我正在通过AsyncTask内部类从我的android活动发布一个Web服务。我的想法是,每次我发布到Web服务。我希望AsynTask将一个字符串值返回给Activity,通知活动是否有成功的帖子或发布到webservice的失败。 我是通过get方法完成的,但是我注意到当我点击按钮发布我的UI会在响应之前冻结一段时间。但这个职位仍然有效。请问有什么方法可以防止这个UI冻结。 我的代码如下。
这是我的AsyncTask类中的doBackground方法
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
String result = "";
PatientModel patient = new PatientModel();
patient.setPhone(Phone);
patient.setEmail(Email);
patient.setGCMRegistrationID(GCMRegistrationID);
JSONHttpClient jsonHttpClient = new JSONHttpClient();
patient = (PatientModel) jsonHttpClient.PostObject(RestfulServiceUrl.RegisterPatient, patient, PatientModel.class);
GCMRegistrar.setRegisteredOnServer(context, true);
if(patient != null) {
result = patient.getPhone();
}
else if(patient == null){
result = "failed";
}
return result;
}
这是我在活动中收集值的脚本
try {
String result = new RegisterPatient(RegisterActivity.this,resource,email,phone,regId).execute().get();
}
catch(Exception e){
}
答案 0 :(得分:1)
在实现get()
时,不应该使用AsyncTask
方法,因为它将异步调用转换为同步调用。通常,结果检索是使用自定义侦听器接口实现的,该接口由应接收响应的对象实现。
答案 1 :(得分:0)
get()。在AsyncTask中你可以获得3种实用方法。
onPreExecute(),doInBackGround()和onPostexecute()。 onPreExecute()和onPostexecute()在UI线程上运行,doInBackGround()在单独的后台线程中运行。如果要将doInBackGround()方法中获得的值传递给活动, 将活动的引用传递给asynctask。从doInBackGround()返回值时,onPostexecute()方法捕获该值。您可以通过调用onpostExecute()方法中的活动中的任何方法将特定值传递给活动。另外我认为在这种情况下使用接口是最好的。