【发布时间】:2016-05-10 10:05:20
【问题描述】:
在我的活动中,我使用线程调用服务器并接收我放在内部存储中的 XML 响应。
在这个调用之后,我读取这个 xml 文件来解析它并向用户显示这个 xml 文件的信息,但是当我在我的 InputStream 中添加这个文件时,这个 InputStream 是空的。
我猜我的活动会继续简单的执行并且不等待我的线程,所以当我创建我的 InputStream 时,我的 xml 文件不存在。
我使这个模式与我的程序的执行相对应:
如何让我的活动等待我的线程结束?我知道冻结主要活动不是一件好事,但我不知道我该怎么做。 我可以在我的线程上有观察者的情况下添加一个等待进度条直到线程结束吗?
PS:我的线程实现了 Runnable
/*************用解决方案编辑*************/
首先,感谢大家的回复,这让我进步了很多。
//In my Activity
MyAsyncTask asyncTask = new MyAsynctask();
asynctask.execute();
//My Async class
public class MyAsynctask extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(getApplicationContext(), "calling server...", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... params) {
//Instance of calling class
//Method of this instance to call the server and create a file in internal storage
//After that my file is stored with the server response
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), "Data received", Toast.LENGTH_LONG).show();
FileInputStream inputStream = null;
inputStream = openFileInput("myFile");
data=XMl.parse(inputStream);
}
}
我希望这篇文章和您的回复会有所帮助。
【问题讨论】:
-
你应该看看AsyncTask
-
如果我使用异步任务,我不需要创建线程,我将所有请求方法都放在我的异步任务中?
-
AsyncTask会为你创建后台线程,它有一个回调onPostExecute(...),当任务完成时在主线程上执行。
标签: java android multithreading