0

AsyncTasklistView に表示するために、Twitter フィードを非同期に使用して取得しています。それは正常に動作します 次に、リストビューを更新するために、 asyncTask 呼び出しをRunnable'sに入れてRun()、特定の間隔の後にロードします。フィードは特定の時間間隔で読み込まれますが、リストビューは更新されません。notifyDataSetChanged()asyncTask 内で使用していますが、機能していません。

これは私の試みのコードです:

public class Twitter7FeedActivity extends Activity {

    LazyAdapter adapter;
    ListView list;
    JSONObject jsonObj = null;
    JSONArray jsonArray = null;

    @SuppressLint("SimpleDateFormat")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_twitter7_feed);
        callAsynchronousTask();
    }

    public void callAsynchronousTask() {
        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {

            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        try {
                            new GetFeedTask().execute(CommonUtils.BEARER_TOKEN,
                                    CommonUtils.URL);
                        } catch (Exception e) {
                        }
                    }
                });
            }
        };

        timer.schedule(doAsynchronousTask, 0, 50000);
    }

    protected class GetFeedTask extends AsyncTask<String, Void, String> {
        private ProgressDialog dialog = new ProgressDialog(
                Twitter7FeedActivity.this);

        protected void onPreExecute() {
            this.dialog.setMessage("Please wait");
            this.dialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            // related code
        }

        @Override
        protected void onPostExecute(String jsonText) {
            // related code 
            adapter = new LazyAdapter(Twitter7FeedActivity.this,
            // tweets);
            list = (ListView) findViewById(R.id.list);
            list.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    }
}
4

3 に答える 3

0

のみを使用して、質問に記載されている作業を行うことができますHandler。このようなもの:

public class Twitter7FeedActivity extends Activity {
LazyAdapter adapter;
ListView list;
JSONObject jsonObj = null;
JSONArray jsonArray = null;

@SuppressLint("SimpleDateFormat")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_twitter7_feed);
    callAsynchronousTask();
}

public void callAsynchronousTask() {
    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {

        ProgressDialog dialog;

        public void run() {
                    try {

                        //Show your dialog here
                        runOnUiThread(new Runnable() {
                            public void run() {
                                runnable.this.dialog = new ProgressDialog( Twitter7FeedActivity.this);
                                runnable.this.dialog.setMessage("Please wait");
                                runnable.this.dialog.show();
                            }

                         });

                        //Do your AsyncTask's doInBackground work here

                        //Update the UI with runOnUiThread or using the Ui threa handler
                        runOnUiThread(new Runnable() {
                            public void run() {
                                // related code adapter = new LazyAdapter(Twitter7FeedActivity.this, tweets);
                                list = (ListView) findViewById(R.id.list);
                                list.setAdapter(adapter); 
                                adapter.notifyDataSetChanged();
                            }

                         });

                         //Then post the thread to excecute after 50000 milliseconds.
                         handler.postDelayed(runnable, 50000);
                    } catch (Exception e)
                    { }
                }
    };
    handler.post(runnable);
    }
}

このようにして、 a のAsyncTask中で aを使用することを避けますTimerTask

于 2013-07-25T07:20:53.023 に答える
0

この行を移動しようとしましたか:

list = (ListView) findViewById(R.id.list);

onCreate メソッドの setContentView の後?

于 2013-07-25T06:54:51.117 に答える
0
// related code adapter = new LazyAdapter(Twitter7FeedActivity.this, tweets);

onPostExecute() メソッドにあるこのコードのコメントを外します。私はそれがあなたを助けるかもしれないと思う. ありがとう...

于 2013-07-25T07:09:51.430 に答える