gpt4 book ai didi

android - 如何同时使用 ProgressDialog 和 Async Task get 方法

转载 作者:太空狗 更新时间:2023-10-29 15:39:28 24 4
gpt4 key购买 nike

我有通用的异步任务类,它从服务器获取响应。我通过使用 get 方法收到这些响应。现在我知道当我使用 get 方法时 UI 线程被阻塞,因为我的进度对话框没有按时显示。

现在有人可以告诉我这样做的替代方法吗?? (在每种情况下,我都需要发回对调用执行的 Activity 的响应,因此打开新 Activity 对我没有帮助)

代码:AsyncTask 类

 public class GetDataFromNetwork extends AsyncTask<Void,String,Object> {

protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}


protected Object doInBackground(Void... params) {
Object result = null;
try {
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
new MarshalBase64().register(envelope);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(ipAddress + webService);
System.setProperty("http.keepAlive", "true");
try {
androidHttpTransport.call(nameSpace + methodName, envelope);
} catch (Exception e) {

e.printStackTrace();
publishProgress(e.getMessage());
}
androidHttpTransport.debug = true;
System.out.println("response: " + androidHttpTransport.requestDump);
result = envelope.getResponse();
if(result!=null){
System.out.println("GetDataFromNetwork.doInBackground() result expection---------"+result);
}
} catch (Exception e) {
System.out.println("GetDataFromNetwork.doInBackground()-------- Errors");
e.printStackTrace();

}

return result;
}

protected void onPostExecute(Object result) {
super.onPostExecute(result);
progressDialog.dismiss();
}

代码: Activity

GetDataFromNetwork request = new GetDataFromNetwork(
this,
ProgressDialog.STYLE_SPINNER,
getResources().getText(R.string.autenticate).toString());
response= (SoapObject)request.execute().get();

最佳答案

我一直在我的应用程序中做这样的事情,我发现最简单的方法是创建“回调”接口(interface)并将其作为参数传递给我的“AsyncTask”。您执行“doInBackground()”处理,当它完成时,您从 onPostExecute 调用“回调”实例,将“结果”对象作为参数传递。

下面是它的一个非常简化的版本。

回调接口(interface)示例:

package example.app;

public interface Callback {

void run(Object result);
}

使用上述回调接口(interface)的 AsyncTask 示例:

public class GetDataFromNetwork extends AsyncTask<Void,String,Object> {
Callback callback;
public GetDataFromNetwork(Callback callback){
this.callback = callback;
}

protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}


protected Object doInBackground(Void... params) {
Object result = null;
// do your stuff here
return result;
}

protected void onPostExecute(Object result) {
callback.run(result);
progressDialog.dismiss();
}

}

如何在您的应用中使用上述类的示例:

class Example {
public onCreate(Bundle savedInstanceState){
//initialize

GetDataFromNetwork request = new GetDataFromNetwork(new Callback(){
public void run(Object result){
//do something here with the result
}});
request.execute();
}
}

关于android - 如何同时使用 ProgressDialog 和 Async Task get 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com