如何将OnPostExecute()的结果导入主活动,因为AsyncTask是一个单独的类?

如何将OnPostExecute()的结果导入主活动,因为AsyncTask是一个单独的类?

我有这两节课。我的主要活动和扩展的一个AsyncTask,现在在我的主要活动,我需要从得到的结果OnPostExecute()AsyncTask。我怎样才能将结果传递给我的主要活动?

这是示例代码。

我的主要活动。

public class MainActivity extends Activity{

    AasyncTask asyncTask = new AasyncTask();

    @Override
    public void onCreate(Bundle aBundle) {
        super.onCreate(aBundle);            

        //Calling the AsyncTask class to start to execute.  
        asyncTask.execute(a.targetServer); 

        //Creating a TextView.
        TextView displayUI = asyncTask.dataDisplay;
        displayUI = new TextView(this);
        this.setContentView(tTextView); 
    }}

这是AsyncTask类

public class AasyncTask extends AsyncTask<String, Void, String> {TextView dataDisplay; 
//store the data  String soapAction = " 
 //SOAPAction header line. String targetServer = "https://sampletargeturl.com";
  //Target Server.//SOAP Request.String soapRequest = "<sample XML request>";    
  @Overrideprotected String doInBackground(String... string) {String responseStorage = null; //storage of the responsetry {


    //Uses URL and HttpURLConnection for server connection. 
    URL targetURL = new URL(targetServer);
    HttpURLConnection httpCon = (HttpURLConnection) targetURL.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setDoInput(true);
    httpCon.setUseCaches(false); 
    httpCon.setChunkedStreamingMode(0);

    //properties of SOAPAction header
    httpCon.addRequestProperty("SOAPAction", soapAction);
    httpCon.addRequestProperty("Content-Type", "text/xml; charset=utf-8"); 
    httpCon.addRequestProperty("Content-Length", "" + soapRequest.length());
    httpCon.setRequestMethod(HttpPost.METHOD_NAME);


    //sending request to the server.
    OutputStream outputStream = httpCon.getOutputStream(); 
    Writer writer = new OutputStreamWriter(outputStream);
    writer.write(soapRequest);
    writer.flush();
    writer.close();


一只斗牛犬
浏览 721回答 4
4回答

天涯尽头无女友

有几个选择:将AsyncTask班级嵌入你的Activity班级。假设您在多个活动中不使用相同的任务,这是最简单的方法。您的所有代码都保持不变,您只需将现有任务类移动到活动类中的嵌套类。public&nbsp;class&nbsp;MyActivity&nbsp;extends&nbsp;Activity&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;existing&nbsp;Activity&nbsp;code &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;class&nbsp;MyAsyncTask&nbsp;extends&nbsp;AsyncTask<String,&nbsp;Void,&nbsp;String>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;existing&nbsp;AsyncTask&nbsp;code &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;}}为您创建一个自定义构造函数,AsyncTask引用您的Activity。您可以使用类似的方式实例化任务new MyAsyncTask(this).execute(param1, param2)。public&nbsp;class&nbsp;MyAsyncTask&nbsp;extends&nbsp;AsyncTask<String,&nbsp;Void,&nbsp;String>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Activity&nbsp;activity; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MyAsyncTask(Activity&nbsp;activity)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.activity&nbsp;=&nbsp;activity; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;existing&nbsp;AsyncTask&nbsp;code &nbsp;&nbsp;&nbsp;&nbsp;...}

慕桂英546537

我觉得下面的方法非常简单。我已经声明了一个回调接口public&nbsp;interface&nbsp;AsyncResponse&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;processFinish(Object&nbsp;output);}然后创建异步任务以响应所有类型的并行请求&nbsp;public&nbsp;class&nbsp;MyAsyncTask&nbsp;extends&nbsp;AsyncTask<Object,&nbsp;Object,&nbsp;Object>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;AsyncResponse&nbsp;delegate&nbsp;=&nbsp;null;//Call&nbsp;back&nbsp;interface &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;MyAsyncTask(AsyncResponse&nbsp;asyncResponse)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate&nbsp;=&nbsp;asyncResponse;//Assigning&nbsp;call&nbsp;back&nbsp;interfacethrough&nbsp;constructor &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;Object&nbsp;doInBackground(Object...&nbsp;params)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//My&nbsp;Background&nbsp;tasks&nbsp;are&nbsp;written&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{resutl&nbsp;Object} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onPostExecute(Object&nbsp;result)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate.processFinish(result); &nbsp;&nbsp;&nbsp;&nbsp;}}然后单击活动类中的按钮时调用异步任务。public&nbsp;class&nbsp;MainActivity&nbsp;extends&nbsp;Activity{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;mbtnPress&nbsp;=&nbsp;(Button)&nbsp;findViewById(R.id.btnPress); &nbsp;&nbsp;&nbsp;&nbsp;mbtnPress.setOnClickListener(new&nbsp;View.OnClickListener()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onClick(View&nbsp;v)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyAsyncTask&nbsp;asyncTask&nbsp;=new&nbsp;MyAsyncTask(new&nbsp;AsyncResponse()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;processFinish(Object&nbsp;output)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("Response&nbsp;From&nbsp;Asynchronous&nbsp;task:",&nbsp;(String)&nbsp;output); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbtnPress.setText((String)&nbsp;output); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asyncTask.execute(new&nbsp;Object[]&nbsp;{&nbsp;"Your&nbsp;request&nbsp;to&nbsp;aynchronous&nbsp;task&nbsp;class&nbsp;is&nbsp;giving&nbsp;here.."&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}}谢谢
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java