2017-08-17 4 views
0

私は気象衛星データを処理している最初のアンドロイドアプリケーションで自分のやり方を苦労しています。 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

@ AshishはgetJSONメソッドからjResponseを返すことができるでしょうか?JSON配列かarraylistのどちらかを構文解析して使用しますか?もしそうなら、私はそれが私の問題を解決すると信じています。 –

+0

回答の階層を表示しますか? –

答えて

0

すべての解析が完了した後にデータを使用する場合は、BroadCastReceiversを使用できます。
この問題は2つのステップで分解できます。

1)解析が行われたことを通知 -

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(); 
       } 

      } 

が通知Receivers.`

使用
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); 
} 

は、あなたは、いくつかの構文エラーがやっていない。この

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

マインドを希望の受信機のごonReceive内部JsonArray()メソッドを受け取ることができ、この

BroadcastReceiver receiver = new YourReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(OBJECTMAPPED); 
    registerReceiver(receiver, filter); 

のようなあなたのレシーバを登録ブロードキャスト を受信しますそれはIDEで。私はあなたがそのような意図内JSONArrayを渡すことができるかどうかわからない: はおそらく、あなたのアイデア

EDITを取得します。それはあなたにそのような問題に対処する方法の大まかなアイデアを与えます。おそらくthis threadを調べて、目的でJSONArrayを渡すことができます

+0

私はあなたが何を得ているのか理解していると思います。私はこれを試して実装します。私はちょっと答えたようにマークしています。 –

+0

質問がある場合はお知らせください –

関連する問題