1

我有一个运行下面代码的 onCreate 方法。简而言之,代码从服务器检索数据并将其显示在消息传递程序的屏幕上。它只执行一次,但我希望它每 3 秒运行一次 AsyncTask(以尝试模拟聊天)。我很确定这不是拥有聊天系统的方法,但是,我只需要现在可以工作的东西(作为概念证明),稍后我将专注于实现它的正确方法。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_box);// sd

        final Functions function = new Functions();
        final SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        whatroom = prefs.getString("chat", "null");

        new AsyncTask<String, Void, String>() {
            @Override
            protected String doInBackground(String... args) {
                return function.getInbox(args[0]);
            }

            @Override
            protected void onPostExecute(String result) {
                TextView inbox = (TextView) findViewById(R.id.inbox);
                ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1);
                progressBar.setVisibility(View.GONE);
                inbox.setText(result);
            }

        }.execute(whatroom);
    }

我尝试在 asynctask 周围放置一个简单的 while 语句,但是它只是强制关闭。

4

2 回答 2

2

您不能重复使用AsyncTask实例。您需要在循环的每次传递中创建新实例。

于 2012-04-25T23:11:40.213 回答
0

没有额外的信息,很难给你一个具体的答案。但是,请考虑使用Loader,使用 aService等抽象所有内容

关于Loaders

  • 它们适用于每个 Activity 和 Fragment。
  • 它们提供数据的异步加载。
  • 他们监控数据的来源,并在内容发生变化时提供新的结果。
  • 在配置更改后重新创建时,它们会自动重新连接到最后一个加载器的光标。因此,他们不需要重新查询他们的数据。
于 2012-04-25T23:07:08.167 回答