2016-04-03 4 views
1

私はアンドロイドのアプリでvolleyを使用しており、TorraオブジェクトをArraylistに追加してリストを埋めますが、プログラムはこのメソッドgetAllDetails()を終了するとarraylistは空です。誰かが実際に何が起こっているか説明してもらえますか?Androidのボレーは、arraylistにアイテムを追加した後でもまだ空の状態である

private void getAllDetails() { 
    String URL = MOVIE_DETAILS_URL + movie.getId() + CAST_URL; 
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       JSONObject dataObject = response.getJSONObject(Keys.DATA); 
       JSONObject movieObject = dataObject.getJSONObject(Keys.MOVIE); 
       JSONArray torrentsArray = movieObject.getJSONArray(Keys.TORRENTS); 
       for (int i = 0; i < torrentsArray.length(); i++) { 
        JSONObject torrentObject = torrentsArray.getJSONObject(i); 
        Torrent torrent = new Torrent(); 
        torrent.setUrl(torrentObject.getString(Keys.URL)); 
        torrent.setSize(torrentObject.getString(Keys.SIZE)); 
        torrent.setQuality(torrentObject.getString(Keys.QUALITY)); 
        torrent.setSeeds(Integer.parseInt(torrentObject.getString(Keys.SEEDS))); 
        torrent.setPeers(Integer.parseInt(torrentObject.getString(Keys.PEERS))); 
        torrentList.add(torrent); 
       } 
       getTorrent();//when this method is called here the list has items on it and it works fine 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 
    requestQueue.add(jsonObjectRequest); 
} 

は、この方法は.torrentファイル

private void getTorrent() { 
    String mUrl = torrentList.get(0).getUrl(); 
    InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, 
      new Response.Listener<byte[]>() { 
       @Override 
       public void onResponse(byte[] response) { 
        // TODO handle the response 
        try { 
         if (response != null) { 
          String name = movie.getMovie_title() + ".torrent"; 
          File torrentDirectory = createFolder(); 
          File file = new File(torrentDirectory, name); 
          FileOutputStream fos = new FileOutputStream(file); 
          fos.write(response); 
          Toast.makeText(ViewMovie.this,"Successfully Downloaded",Toast.LENGTH_SHORT).show(); 


         } 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE"); 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      // TODO handle the error 
      error.printStackTrace(); 
     } 
    }, null); 
    RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack()); 
    mRequestQueue.add(request); 
} 
+0

http://stackoverflow.com/questions/33507556/arraylist-empty-after-being-populated-inside-volley-onresponse-callback-method –

答えて

0

あなたのArrayListあなたgetTorrent()関数に渡すことを試みることができ迅速な修正プログラムをダウンロードするtorrentlistのArrayListを使用しています。

getTorrent(torrentList); 

このように関数を呼び出します。

private void getTorrent(ArrayList<Torrent> passedList) { 
    String mUrl = passedList.get(0).getUrl(); 
    // rest of your code here 
} 

しかし、あなたはこの機能が常にあなたに最初のトレントの結果を与えることを知っておく必要があります。 0のインデックスがArrayListにあるためです。たぶんインデックスを渡すことで、より機能的なメソッドを作成することができます。

関連する問題