我有一个运行下面代码的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语句,但它只是强制关闭。
答案 0 :(得分:2)
您无法重复使用AsyncTask
实例。您需要在每次循环时创建新实例。
答案 1 :(得分:0)
如果没有其他信息,很难给出具体的答案。但是,请考虑使用Loader,使用Service
等来抽象所有内容
关于Loaders
:
- 每个活动和片段都可以使用它们。
- 他们提供异步数据加载。
- 他们会监控数据来源,并在内容发生变化时提供新结果。
- 在配置更改后重新创建时,它们会自动重新连接到上一个加载程序的游标。因此,他们不需要重新查询他们的数据。