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