如何在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()
has
return
type
Void
感到困惑。为什么需要
返回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; 
                      }

                }