Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何每10秒刷新一次Android listview_Android_Listview_Refresh - Fatal编程技术网

如何每10秒刷新一次Android listview

如何每10秒刷新一次Android listview,android,listview,refresh,Android,Listview,Refresh,我对安卓非常陌生。我正在做这件事,但是我在刷新时遇到了问题,无法理解如何刷新我的listview // Creating volley request obj JsonArrayRequest movieReq = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public

我对安卓非常陌生。我正在做这件事,但是我在刷新时遇到了问题,无法理解如何刷新我的listview

        // Creating volley request obj
    JsonArrayRequest movieReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    hidePDialog();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Movie movie = new Movie();
                            movie.setTitle(obj.getString("title"));
                            movie.setThumbnailUrl(obj.getString("image"));
                            movie.setRating(((Number) obj.get("rating"))
                                    .doubleValue());
                            movie.setYear(obj.getInt("releaseYear"));

                            // Genre is json array
                            JSONArray genreArry = obj.getJSONArray("genre");
                            ArrayList<String> genre = new ArrayList<String>();
                            for (int j = 0; j < genreArry.length(); j++) {
                                genre.add((String) genreArry.get(j));
                            }
                            movie.setGenre(genre);

                            // adding movie to movies array
                            movieList.add(movie);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hidePDialog();

                }
            });


/** REFRESH HERE /** 

 Thread t = new Thread() {

        @Override
        public void run() {
            try {
                while (!isInterrupted()) {
                    Thread.sleep(10000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.e(TAG, "EVRY 10 SECOND START NOW ");

                            listView.invalidateViews();
                            listView.refreshDrawableState();
                            adapter.notifyDataSetChanged();

//                                Log.e(TAG, String.valueOf(movieList));

                            // fire the event

                        }
                    });
                }
            } catch (InterruptedException e) {
            }
        }
    };

    t.start();
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(movieReq);

使用处理程序及其postDelayed方法使列表的适配器无效,如下所示:

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            adapter.notifyDataSetChanged();
            handler.postDelayed(this, 10 * 1000);
        }
    }, 10 * 1000);
只能在主(UI)线程中更新UI


通过在主线程中创建处理程序,您可以确保发布到处理程序的所有内容也在主线程中运行。

将您的截取请求代码放入一个方法中,让我们命名为id
fetchData()

然后,您可以在10秒后通过以下代码再次呼叫您的服务:

final Handler mHandler = new Handler();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(10000);
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                                // Write your code here to call the method.
                              fetchData();
                            }
                        });
                    } catch (Exception e) {
                        // TODO: handle exception here
                        e.printStackTrace();
                    }
                }
            }
        }).start();
试试这个,如果有问题请告诉我。

使用计时器:

 Timer timerAsync;
 TimerTask timerTaskAsync;

timerAsync = new Timer();
        timerTaskAsync = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        doWork();
                    }
                });
            }
        };
        timerAsync.schedule(timerTaskAsync, 1000, 5000);// First Start 1 seconds 5 seconds repeat

是否要再次请求正在使用的web服务?是,发出新请求并使用新项目获取新json您可以在10秒后使用计时器调用web服务,然后使用onResponse()刷新listviewadapter.getData().clear();在刷新之前,我清理了数据和它的作品,然后我得到了循环,谢谢你,乐于帮助,乐于编码!!
 Timer timerAsync;
 TimerTask timerTaskAsync;

timerAsync = new Timer();
        timerTaskAsync = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        doWork();
                    }
                });
            }
        };
        timerAsync.schedule(timerTaskAsync, 1000, 5000);// First Start 1 seconds 5 seconds repeat