我想在完成之后通过asynctask获得值返回。这是我的代码:
class asyncGet extends AsyncTask<Void, String, String> {
Boolean goterror = false;
@Override
protected String doInBackground(Void... params) {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response;
try {
request.setHeader("Cache-Control", "no-cache");
request.setHeader("Cache-Control", "no-store");
response = client.execute(request);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
str.append(line);
}
in.close();
return str.toString();
} catch (Exception e) {
goterror = true;
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pDialog != null && pDialog.isShowing())
pDialog.dismiss();
if (result != null && goterror == false) {
}
}
async在另一个类中,我希望在完成后显示结果。
如何从异步中返回结果?
谢谢
答案 0 :(得分:2)
如果你想让它保持异步,那么它已经在你的代码中实现了, 使用onPostExecute方法,&#34;结果&#34;包含返回的数据。
或者,如果您希望它同步返回数据,请使用扩展的asynctask,如下所示:
try {
String result = new asyncGet().execute().get();
} catch (InterruptedException e) {
e.printStackTrace(); //handle it the way you like
} catch (ExecutionException e) {
e.printStackTrace();//handle it the way you like
}
答案 1 :(得分:1)
您可以创建一个界面,如下所示:
public interface OnStringListener {
void onStringCompleted(String s);
void onStringError(String error);
}
并且您必须使用AsyncTask
作为参数创建OnStringListener
的构造函数:
class asyncGet extends AsyncTask<Void, String, String> {
Boolean goterror = false;
private final OnStringListener mListener;
public asyncGet(OnStringListener listener) {
mListener = listener;
}
//The rest of your code
在您的onPostExecute
方法中,您可以通过String
方法返回发送它的onStringCompleted
:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pDialog != null && pDialog.isShowing())
pDialog.dismiss();
if (result != null && goterror == false) {
}
if (mListener != null) {
mListener.onStringCompleted(result);
}
}
当然,您必须在要获取AsyncTask 结果的活动中创建方法onStringCompleted
和onStringError
。从那里,您将能够在其他课程中使用您的成绩。
我希望它会对你有所帮助!
答案 2 :(得分:0)
AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。
AsyncTask必须是子类才能使用。子类将覆盖至少一个方法(doInBackground(Params...)),并且通常会覆盖第二个方法(onPostExecute(Result)。)
所以哲学是你覆盖doInBackground
,当doInBackground
完成它的任务时,它会将结果传递给onPostExecute
,结果在主线程中可用。
如果你仍然想要同步执行,请按@ meghraj27
的解释调用get()答案 3 :(得分:0)
您可以实现一个Activity或类的接口,您希望获得AsynTask的结果,并从AsynTask触发该接口。