在Android中发出HTTP请求时显示加载对话框

时间:2012-07-13 14:12:18

标签: android

为了学习Android,我正在编写一个小应用程序。我要做的第一件事是通过远程API登录。

我想在进行通话时显示“加载”对话框(如果用户使用移动互联网)。对此进行研究表明了两种可能的方法。

一种是使用 ProgressDialog 和一个扩展线程的私有类,另一种是使用扩展 AsyncTask 的私有类。 / p>

哪个最适合/更适合此任务?

我尝试使用ProgressDialog版本,但我正在努力。我已经在扩展的Thread run()方法中放置了发出http请求的函数,但我不确定如何将响应数据(JSON)传回我的活动。

感谢任何所有帮助。

2 个答案:

答案 0 :(得分:2)

最好的方法是使用AsyncTaskProgressDialog。您应该扩展AsyncTask并实现您需要的所有方法:

  • onPreExecute() - 在此初始化您的ProgressDialogshow()
  • 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();
}