【问题标题】:How do I store a JSONARRAY from a Volley request in AndroidSDK?如何在 AndroidSDK 中存储来自 Volley 请求的 JSONARRAY?
【发布时间】:2018-01-25 08:43:12
【问题描述】:

我正在努力通过我的第一个处理气象卫星数据的 Android 应用程序。我正在使用 JSON 从远程服务器检索平铺图像的时间。由于我缺乏使用 java 的经验,我无法获得 jResponse,因此应用程序的其他部分可以使用这些数据。有没有办法让 jResponse (JSONArray) 脱离 on response 方法?当我尝试更改方法以返回 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;

【问题讨论】:

  • 为什么不在 jsonObjectRequest 之前声明 jResponse ?
  • 我想在解析后使用 JSON 数组或数组列表。@Ashish 是否允许我从 getJSON 方法返回 jResponse?如果是这样,我相信这会解决我的问题。
  • 你会显示响应的层次结构吗??

标签: java android json android-volley


【解决方案1】:

如果您想在整个解析完成后使用数据,您可以使用 BroadCastReceivers。
这个问题可以分为两个步骤。

  1. 通知解析完成 - 通过发送广播

  2. 使用广播接收器接收消息。

    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
        }
   } 

}

编辑:

我不确定您是否可以在这样的意图中传递 JSONArray。但它让您大致了解如何处理此类问题。也许您可以查看this thread 以传递 JSONArray 的意图

【讨论】:

  • 我想我明白你在说什么。我将尝试实现这一点。我打算暂缓将其标记为已回答。
  • 如果您有任何疑问,请告诉我
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多