Я пытаюсь сделать это приложение на Android, я получаю данные из API четырехклассников в формате JSON, и мне нужно проанализировать его, чтобы представить его в другом намерении. Я использую Android-библиотеку волейбола, чтобы получить JSON, но проблема в функции onResponse() JsonObjectRequest не имеет параметра return.so Я не могу получить объект JSON, полученный из url за пределами onResponse. Я не работал с залпом раньше и, следовательно, не знаю много об этом, любая помощь приветствуется. Вот код, который я пытаюсь заставить его работать.Как получить объект из внутреннего класса
Редактировать: Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу присвоить значение глобальной переменной в этом случае myPlaces внутри метода onResponse JsonObjectRequest. Или, если быть точным, то переменная присваивается внутри ничего не значит снаружи, таким образом, в последней строке
Toast.makeText(MainActivity.this, myPlaces[2].getName(), Toast.LENGTH_LONG).show();
, когда я пытаюсь получить доступ к myPlaces [2] он дает мне исключения нулевого указателя.
Спасибо.
public void onClick(View v) {
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(urlString, null, new com.android.volley.Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject meta = response.getJSONObject("meta");
String status = meta.getString("code");
Toast.makeText(MainActivity.this, status, Toast.LENGTH_SHORT).show();
if(status.equals("200"))
{
JSONObject responseJson = response.getJSONObject("response");
JSONArray venues = responseJson.getJSONArray("venues");
Places[] tempPlaces = new Places[venues.length()];
for (int i = 0 ; i < venues.length(); i++)
{
Places place = new Places();
JSONObject venueObject = venues.getJSONObject(i);
place.setName(venueObject.getString("name"));
JSONObject locatVenue = venueObject.getJSONObject("location");
place.setLat(locatVenue.getDouble("lat"));
place.setLon(locatVenue.getDouble("lng"));
tempPlaces[i] = place;
}
Toast.makeText(MainActivity.this, tempPlaces[2].getName(), Toast.LENGTH_LONG).show();
myPlaces = tempPlaces;
}
else
{
Toast.makeText(MainActivity.this, "No response from API", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "There is some error here", Toast.LENGTH_LONG).show();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "There has been some error", Toast.LENGTH_LONG).show();
}
});
requestQueue.add(jsonObjectRequest);
Toast.makeText(MainActivity.this, myPlaces[2].getName(), Toast.LENGTH_LONG).show();
Возможный дубликат [с использованием внутреннего объекта класса во внешнем классе java] (http://stackoverflow.com/questions/18292824/using-inner-class-object-in-outer-class-java) – pczeus