添加项目后,Android排球后添加到arraylist仍然是空的

时间:2016-04-03 16:54:07

标签: android multithreading android-volley

我在我的Android应用程序中使用volley并且我将Torrent对象添加到Arraylist并填充列表但是在程序退出此方法之后getAllDetails()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);
}

此方法使用torrentlist arraylist下载.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);
}

1 个答案:

答案 0 :(得分:0)

快速解决方法,您可以尝试将ArrayList传递给getTorrent()功能。

getTorrent(torrentList);

你会像这样调用你的函数。

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

但是你需要知道,这个函数总会给你第一个torrent的结果。因为您在0中获得了ArrayList索引。也许通过传递索引,您可以创建更多功能方法。