我正在努力通过我的第一个处理气象卫星数据的Android应用程序。我正在使用JSON从远程服务器检索tile图像的时间。由于我缺乏java经验,我无法获得jResponse,因此应用程序的其他部分可以使用数据。有没有办法从响应方法中获取jResponse(JSONArray)?当我尝试更改方法以返回JSONArray时,它会撤消覆盖。我很困惑,真的很感激任何帮助。
public JSONArray getJson(final int i,String sectorName){
times = new JSONArray();
String url = "https://storage.googleapis.com/satsquatch-tiles-dev/GOES16_"+String.format("%02d",i)+"_"+sectorName+".json";
final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("test", "Success");
try {
JSONArray jResponse = response.getJSONArray("times");
for (int count = 0; count < jResponse.length(); count++){
Log.d("Array_times",jResponse.get(count).toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("test", "JSON Request Failure Check URL!");
}
});
//add request to queue
queue.add(jsonObjectRequest);
return times;
答案 0 :(得分:0)
如果要在完成整个解析后使用数据,可以使用BroadCastReceivers 这个问题可以分两步进行分解。
1)通知解析已完成 - 通过发送广播
2)接收 使用Receivers广播消息。
public void onResponse(JSONObject response) {
Log.d("test", "Success");
try {
JSONArray jResponse = response.getJSONArray("times");
for (int count = 0; count < jResponse.length(); count++){
Log.d("Array_times",jResponse.get(count).toString());
}
notify(JsonArray jsonArray); /// this is the method
} catch (JSONException e) {
e.printStackTrace();
}
}
notify()方法
public void notify(JsonArray jsonArray){
Intent i = new Intent();
i.setAction("Some key");
i.putExtra("Some key to retrive your array",jsonArray);
sendBroadcast(i);
}
接收广播 像这样注册你的接收器
BroadcastReceiver receiver = new YourReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(OBJECTMAPPED);
registerReceiver(receiver, filter);
你可以在接收者的onReceive()方法中接收你想要的JsonArray
private class YourReceiver extends BroadcastReceiver
{
private Context context;
@Override
public void onReceive(Context context,Intent intent)
{
if(intent.getAction().equalsIgnoreCase("Some key"))
{
JSONArray jsonArray = (JSONArray)i.get()
//Do all the processing you want
}
}
请注意一些语法错误,而不是在IDE中执行此操作。 也许你明白了这个想法
编辑:我不确定你是否可以在这样的意图中传递JSONArray。但它让你大致了解如何处理这些问题。也许您可以查看this thread以在意图中传递JSONArray