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

在Android中发出HTTP请求时显示加载对话框,android,Android,为了学习Android,我正在编写一个小应用程序。我尝试做的第一件事是通过远程API登录 我想在通话时显示一个“加载”对话框(以防用户使用移动互联网)。对此的研究表明了两种可能的方法 一种是使用进程对话框和扩展线程的私有类,另一种是使用扩展异步任务的私有类 哪个最适合/更适合此任务 我尝试过使用ProgressDialog版本,但我很挣扎。我已经将发出http请求的函数放在extended Thread run()方法中,但不确定如何将响应数据(JSON)传递回我的活动中 感谢您的所有帮助。最好

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

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

一种是使用进程对话框和扩展线程的私有类,另一种是使用扩展异步任务的私有类

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

我尝试过使用ProgressDialog版本,但我很挣扎。我已经将发出http请求的函数放在extended Thread run()方法中,但不确定如何将响应数据(JSON)传递回我的活动中


感谢您的所有帮助。

最好的方法是将
异步任务
进度对话框
一起使用。您应该扩展
AsyncTask
,并实现所需的所有方法:

  • onPreExecute()
    -在这里,您可以初始化
    ProgressDialog
    show()
    对话框
  • doInBackground()
    -这里是您的工作
  • onPostExecute()
    -在这里,您可以调用
    ProgressDialog
    上的
    dismise()
    来隐藏它
  • (可选)
    onProgressUpdate()
    -此处您可以更改
    ProgressDialog
    的进度(如果它是确定的)

AsyncTask
类中有一个
get()
方法,用于检索工作结果。您还可以在
异步任务
和调用
活动
返回结果之间实现一个接口。希望这能有所帮助。

努力带来回报:)自我是对的,异步任务是最好的方法。但是 您必须知道活动在UI线程上工作,而线程不工作。因此,共享内容的唯一方法是通过handler。这里有一个例子:

@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();
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
进度=(ProgressBar)findViewById(R.id.progressBar1);
handler=新的handler();
}
public void startProgress(视图){
//做些长的事情
Runnable Runnable=新的Runnable(){
@凌驾
公开募捐{

对于(int i=0;我感谢您提供的信息(向上投票)。我如何调用get()方法,因为我已经了解到您不允许直接调用AsynTask方法?一旦您新建了YourAsyncTask().execute();@Rooneyl,我在回答中描述的方法都受到保护,get()将按顺序调用这些方法是一个公共方法,您可以毫无问题地调用它;