2016-04-03 23 views
1

ekledikten sonra hala boş arraylist ekledikten sonra benim android uygulamasında voleybol kullanıyorum ve Torrent nesneleri Arraylist'e ekliyorum ve listeyi doldurur ama program çıktıktan sonra getAllDetails() arraylist boştur. Birisi gerçekten ne olup bittiğini açıklayabilir misiniz ???Android Volley

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

bu yöntem torrent dosyasını

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 –

cevap

0

Eğer senin ArrayList sizin getTorrent() işleve geçmek için deneyebilirsiniz hızlı bir düzeltme indirmek için torrentlist arraylist kullanır.

getTorrent(torrentList); 

Bu şekilde işlevinizi çağıracaksınız.

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

Ama bilmeniz gerekir ki, bu işlev her zaman ilk torrentin sonucunu verecektir. Çünkü ArrayList numaralı telefondan 0 endeksini alıyorsunuz. Belki de endeksi de geçerek, daha işlevsel bir yöntem oluşturabilirsiniz.

İlgili konular