オブジェクト。私はJSONObjectsの上記セットを解析し、Javaに変換しています http://kolam.vicz.in:7890/games_gifs/奇妙な問題は、これは私が非常に奇妙な問題に直面しています初めてです
:私は、JSON本体用:
リンク(カントが原因で文字の制限をここでJSON本体を貼り付け)の下JSONObjectを言及していますオブジェクト。以下は、このJSON本体を解析するコードです。
private void getGameList() {
StringRequest request = new StringRequest(Request.Method.GET, gameUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject mainObject = new JSONObject(response);
JSONArray gamesArray = mainObject.getJSONArray("TracingGames");
Log.e(TAG, "gameArray length:" + gamesArray.length());
for (int i = 0; i < gamesArray.length(); i++) {
JSONObject obj = gamesArray.getJSONObject(i);
for (String str : getKeys(obj)) {
Log.e(TAG, str);
if (str.equalsIgnoreCase("kolam")) {
/*Section for Learn and Kolam Tracing games start*/
//TODO: Need to add the game names to the object (Need server side implementation as well)
KolamTracingGames kolamTracingGames = new KolamTracingGames();
kolamTracingGames.setKolamGifPath(obj.getString("path"));
kolamTracingGames.setKolamLevel(Integer.parseInt(str));
kolamTracingGames.setKolamGameName("Kolam Tracing");
kolamTracingGames.setX(getXCoordinates(obj));
kolamTracingGames.setY(getYCoordinates(obj));
kolamObjects.add(kolamTracingGames);
break;
} else if (str.equalsIgnoreCase("level")) {
LearnTracingGames learnTracingGames = new LearnTracingGames();
learnTracingGames.setLearnGameGifPath(obj.getString("path"));
learnTracingGames.setLearnGameLevel(Integer.parseInt(str));
learnTracingGames.setGameName("Learn Game");
learnTracingGames.setX(getXCoordinates(obj));
learnTracingGames.setY(getYCoordinates(obj));
learnGameObjects.add(learnTracingGames);
Log.e(TAG, learnGameObjects.size() + "");
break;
}
}
}
if (gameType.equalsIgnoreCase("Trace the Kolam")) {
kolamTraceAdapter = new KolamTraceAdapter(getActivity());
kolamTraceAdapter.getGameList(kolamObjects);
recyclerView.setAdapter(kolamTraceAdapter);
} else if (gameType.equalsIgnoreCase("Learn")) {
learnGameAdapter = new LearningGameAdapter(getActivity());
learnGameAdapter.getGameList(learnGameObjects);
Log.e(TAG, "learngameobject size:" + learnGameObjects.size());
recyclerView.setAdapter(learnGameAdapter);
Log.e(TAG, "Learn games");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage());
if (getActivity() != null) {
Alerter.create(getActivity())
.setTitle(R.string.warning)
.setText(R.string.network_error)
.setDuration(2000)
.setBackgroundColorRes(R.color.dot_dark_screen1)
.show();
}
}
});
request.setTag(TAG);
request.setRetryPolicy(new DefaultRetryPolicy(30000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
AppController.getInstance().addToRequestQueue(request);
私の問題は8 レベル型オブジェクトと4つのkolamオブジェクトは(明確にするためにJSON体を参照)があります。私はそれらのために2つの別々のPOJOクラスを持っています。私は適切にJSON本体を解析することですが、私はにしようとしていますとき、Javaは最も内側のfor loop
が完全に実行されていないものをJSONObjectsのオブジェクトを作成します。 1ループ後に停止します。
forループの内側は、(Javaオブジェクトの作成)(一度だけ実行するが、より多くのそして12回実行取得する必要があります)完全に実行取得されていない私はこれをやっている場合:
for (int i = 0; i < gamesArray.length(); i++) {
JSONObject obj = gamesArray.getJSONObject(i);
for (String str : getKeys(obj)) {
Log.e(TAG, str);
if (str.equalsIgnoreCase("kolam")) {
/*Section for Learn and Kolam Tracing games start*/
//TODO: Need to add the game names to the object (Need server side implementation as well)
KolamTracingGames kolamTracingGames = new KolamTracingGames();
kolamTracingGames.setKolamGifPath(obj.getString("path"));
kolamTracingGames.setKolamLevel(Integer.parseInt(str));
kolamTracingGames.setKolamGameName("Kolam Tracing");
kolamTracingGames.setX(getXCoordinates(obj));
kolamTracingGames.setY(getYCoordinates(obj));
kolamObjects.add(kolamTracingGames);
break;
} else if (str.equalsIgnoreCase("level")) {
LearnTracingGames learnTracingGames = new LearnTracingGames();
learnTracingGames.setLearnGameGifPath(obj.getString("path"));
learnTracingGames.setLearnGameLevel(Integer.parseInt(str));
learnTracingGames.setGameName("Learn Game");
learnTracingGames.setX(getXCoordinates(obj));
learnTracingGames.setY(getYCoordinates(obj));
learnGameObjects.add(learnTracingGames);
Log.e(TAG, learnGameObjects.size() + "");
break;
}
}
}
getKeys(JSONObject)
方法は以下の通りです:私はfor loop
内のオブジェクトを作成しない場合は
private static String[] getKeys(JSONObject firstJSONObject) {
Iterator keysToCopyIterator = firstJSONObject.keys();
List<String> keysList = new ArrayList<>();
while (keysToCopyIterator.hasNext()) {
String key = (String) keysToCopyIterator.next();
keysList.add(key);
}
return keysList.toArray(new String[keysList.size()]);
}
はしかし、その後、内側for loop
が完全に実行されます。
をフェッチ代わり
str
を使用しないでください?あなたがAndroid上にいることを確認して、例えば、 'Gson'? 原因それは理論的には、 'KolamTracingGmaesゲーム=新しいGsonを()書くのと同じくらい簡単である可能性があります。fromJson(応答、KolamTracingGames.class)' –私は私ができる..私はすべての可能な方法を試してみましたあなたは 'break'声明 –
を持っていると思いましたこれらのJavaオブジェクトを作成していない場合は、JSON本体を簡単に完全に解析します。これらのオブジェクトをコメントするだけで、setterメソッドの行はコードを正常に実行します。しかし、私は上記のコードを実行する場合。そして、それだけで – XoXo