如何在Android中获取异步任务的结果
我正在尝试如何在Android中获取异步任务的结果,android,android-asynctask,Android,Android Asynctask,我正在尝试AsyncTask。我不知道如何返回结果。我还对doInBackground()hasreturntypeVoid感到困惑。为什么需要返回null;如果我返回null我将如何从该方法中获取值 package com.example.shikkok_services; import android.app.Dialog; import android.content.Context; import android.os.AsyncTask; import android.os.Hand
AsyncTask
。我不知道如何返回结果。我还对doInBackground()
hasreturn
typeVoid
感到困惑。为什么需要返回null
;如果我返回null
我将如何从该方法中获取值
package com.example.shikkok_services;
import android.app.Dialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MyTask extends AsyncTask<Void, Integer, Void> {
//progressBar holo UI te kaj kore tai Context dorkar tai MyTask e construtor decler korlam.Inner class hole eita dorkar silo na
Context context;
Handler handler;
Dialog dialog;
TextView txtprogrss;
ProgressBar progress;
Button btnCancel;
MyTask(Context context, Handler handler){
this.context=context;
this.handler=handler;
}
MyTask(Context context){
this.context=context;
this.handler=handler;
}
//--------------------------------onPreExecute()............................................
@Override
protected void onPreExecute() {
super.onPreExecute();
// create dialog
dialog=new Dialog(context);
dialog.setCancelable(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.pogressdialog);
dialog.show();
txtprogrss=(TextView) dialog.findViewById(R.id.txtProgress);
progress=(ProgressBar)dialog.findViewById(R.id.progressBar2);
btnCancel=(Button)dialog.findViewById(R.id.btnProgress);
//progress=new ProgressBar(context);
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
MyTask.this.cancel(true);
dialog.dismiss();
}
});
dialog.show();
}
//--------------------------------doInBackground()...........................
@Override
protected Void doInBackground(Void... arg0) {
//Kaj hobe backgournd e not UI e
// do tasks and update msg
for (int i = 0; i < 10; i++) {
if(isCancelled()){
break;
}else{
Log.e("In Background","current value;"+ i);
publishProgress(i);
//joto bar publishProgress() call hobe toto bar OnProgressUpdate hobe..
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
//------------------------------onProgressUpdate().....................................
@Override
protected void onProgressUpdate(Integer... values) {
//dowonload hole koto percent hosse seita dhore dhore UI te dekhalte parbo
super.onProgressUpdate(values);
// update dialog progress
progress.setProgress(values[0]);
txtprogrss.setText("progress update"+ values[0]+"%");
}
//-----------------------------OonPostExecute()...........................................
@Override
protected void onPostExecute(Void result) {
// jokhon kaj ses hoe jabe tokhon ei method e asben then UI te chole asben
super.onPostExecute(result);
// handler.sent message
dialog.dismiss();
Toast.makeText(context, "Finished", Toast.LENGTH_LONG).show();
}
}
package com.example.shikkok_服务;
导入android.app.Dialog;
导入android.content.Context;
导入android.os.AsyncTask;
导入android.os.Handler;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.Window;
导入android.widget.Button;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MyTask扩展了AsyncTask{
//进度条:全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位、全方位
语境;
处理者;
对话;
TextView txtprogrss;
进度条进度;
按钮btnCancel;
MyTask(上下文、处理程序){
this.context=context;
this.handler=handler;
}
MyTask(上下文){
this.context=context;
this.handler=handler;
}
//--------------------------------onPreExecute()。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建对话框
对话框=新对话框(上下文);
对话框。可设置可取消(true);
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
setContentView(R.layout.pogressdialog);
dialog.show();
txtprogrss=(TextView)dialog.findviewbyd(R.id.txtProgress);
ProgressBar)dialog.findViewById(R.id.progressBar2);
btnCancel=(按钮)dialog.findviewbyd(R.id.btnProgress);
//进度=新进度条(上下文);
btnCancel.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
MyTask.this.cancel(true);
dialog.dismise();
}
});
dialog.show();
}
//--------------------------------doInBackground()。。。。。。。。。。。。。。。。。。。。。。。。。。。
@凌驾
受保护的Void doInBackground(Void…arg0){
//Kaj hobe backgournd e不是UI e
//执行任务并更新消息
对于(int i=0;i<10;i++){
如果(isCancelled()){
打破
}否则{
Log.e(“背景”、“当前值;”+i);
出版进度(一);
//joto bar publishProgress()调用hobe toto bar on ProgressUpdate hobe。。
试一试{
睡眠(500);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
返回null;
}
//------------------------------onProgressUpdate()。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
@凌驾
受保护的void onProgressUpdate(整型…值){
//dowonload HORE THORE dowonload HOSE seita dhore dhore te dekhalte parbo百分比
super.onProgressUpdate(值);
//更新对话框进度
progress.setProgress(值[0]);
setText(“进度更新”+值[0]+“%”);
}
//-----------------------------OonPostExecute()。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
@凌驾
受保护的void onPostExecute(void结果){
//这是一个非常好的方法,然后是一个非常好的方法
super.onPostExecute(结果);
//handler.sent消息
dialog.dismise();
Toast.makeText(上下文,“完成”,Toast.LENGTH_LONG.show();
}
}
AsyncTask
必须返回null
,因为您这样声明:AsyncTask
。第三个参数确定doInBackground()
返回的内容以及onPostExecute()
获取的内容
更改此数据类型以使其在需要时返回,这样您将在
onPostExecute()
方法中将其作为参数接收,并且您甚至可以在此方法内更新主UI线程中的视图
s(您甚至可以从doInBackground()
之外的任何位置更新它们).AsyncTask
必须返回null
,因为您这样声明:AsyncTask
。第三个参数确定doInBackground()
返回的内容以及onPostExecute()
获取的内容
更改此数据类型以使其在需要时返回,这样您将在
onPostExecute()
方法中将其作为参数接收,并且您甚至可以在此方法内更新主UI线程中的视图
s(您甚至可以从doInBackground()
之外的任何位置更新它们).AsyncTask
必须返回null
,因为您这样声明:AsyncTask
。第三个参数确定doInBackground()
返回的内容以及onPostExecute()
获取的内容
更改此数据类型以使其在需要时返回,这样您将在
onPostExecute()
方法中将其作为参数接收,并且您甚至可以在此方法内更新主UI线程中的视图
s(您甚至可以从doInBackground()
之外的任何位置更新它们).AsyncTask
必须返回null
,因为您这样声明:AsyncTask
。第三个参数确定doInBackground()
返回的内容以及onPostExecute()
获取的内容
更改此数据类型以使其在需要时返回,这样您将在onPostExecute()
方法中将其作为参数接收,甚至可以在主UI线程中更新视图
s
public class MyTask extends AsyncTask<Void, Integer, String> { // changed last param
@Override
protected void onPostExecute(String result) {
String result= new MyTask ().execute().get();
class MyTask extends AsyncTask<String, String, String>
{
protected String doInBackground(String... params)
return somevalue;
}
}