如何在AndroidSDK中存储来自Volley请求的JSONARRAY?

时间:2017-08-17 04:23:17

标签: java android json android-volley

我正在努力通过我的第一个处理气象卫星数据的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;

1 个答案:

答案 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