2017-08-17 49 views
0

我正在努力通过我的第一个Android应用程序处理天气卫星数据。我使用JSON从远程服务器检索平铺图像的时间。由于缺乏java经验,我无法获得jResponse,因此应用程序的其他部分可以使用这些数据。有没有办法从on响应方法中获取jResponse(JSONArray)?当我尝试改变返回JSONArray的方法时,它将撤消覆盖。我很困难,并会非常感谢任何帮助。如何从AndroidSDK中的Volley请求存储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

为什么不在jsonObjectRequest之前声明jResponse? –

+0

我想在解析后使用JSON数组或ArrayList。@ Ashish是否允许我从getJSON方法返回jResponse?如果是这样,我相信这将解决我的问题。 –

+0

你会显示你的响应层次? –

回答

0

如果您想在完成全部解析后使用数据,您可以使用BroadCastReceivers。
这个问题可以分两步进行。

1)通知所述解析完成 - 通过发送广播使用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()方法
2)接收 广播消息

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

+0

我想我明白你在做什么。我会尽力实现这一点。我将暂缓将此标记为回答了一下。 –

+0

让我知道你是否有任何疑问 –