2016-04-03 12 views
1

Ich benutze volley in meiner Android-App und ich Torrent-Objekte hinzufügen, die Arraylist und es füllt die Liste, aber nachdem das Programm diese Methode getAllDetails() beendet die Arraylist ist leer. Könnte jemand bitte erklären, was wirklich los ist ???Android Volley nach Hinzufügen von Elementen zu Arraylist noch leer nach dem Hinzufügen

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

diese Methode verwendet die torrentlist Arraylist die .torrent-Datei

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-inside-volley-onresponse-callback-method –

Antwort

0

Eine schnelle Lösung zum Download können Sie versuchen, Ihre ArrayList auf Ihre getTorrent() Funktion zu übergeben.

getTorrent(torrentList); 

Sie werden Ihre Funktion so nennen.

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

Aber Sie müssen wissen, dass diese Funktion Ihnen immer das Ergebnis des ersten Torrents geben wird. Weil Sie 0 Index in ArrayList bekommen. Vielleicht können Sie, indem Sie auch den Index übergeben, eine funktionellere Methode erstellen.

Verwandte Themen