为了学习Android,我正在编写一个小应用程序。我要做的第一件事是通过远程API登录。
我想在进行通话时显示“加载”对话框(如果用户使用移动互联网)。对此进行研究表明了两种可能的方法。
一种是使用 ProgressDialog 和一个扩展线程的私有类,另一种是使用扩展 AsyncTask 的私有类。 / p>
哪个最适合/更适合此任务?
我尝试使用ProgressDialog版本,但我正在努力。我已经在扩展的Thread run()方法中放置了发出http请求的函数,但我不确定如何将响应数据(JSON)传回我的活动。
感谢任何所有帮助。
答案 0 :(得分:2)
最好的方法是使用AsyncTask
和ProgressDialog
。您应该扩展AsyncTask
并实现您需要的所有方法:
onPreExecute()
- 在此初始化您的ProgressDialog
和show()
doInBackground()
- 在这里你做你的工作onPostExecute()
- 在dismiss()
致电ProgressDialog
隐藏onProgressUpdate()
- 您可以在此处更改ProgressDialog
的进度,如果确定的话 get()
类中有一个AsyncTask
方法,可让您检索工作结果。您还可以在AsyncTask
和调用Activity
之间实现接口以返回结果。希望这会有所帮助。
答案 1 :(得分:0)
努力带来奖励:) Egor是对的,AsyncTask是最好的方法。但 您必须知道Activity正在处理UI线程而不是线程。所以分享事物的唯一方法是通过处理程序。这是一个例子:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progress = (ProgressBar) findViewById(R.id.progressBar1);
handler= new Handler();
}
public void startProgress(View view) {
// Do something long
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
progress.setProgress(value);
}
});
}
}
};
new Thread(runnable).start();
}