android异步返回类型onPostexecute

时间:2015-02-27 11:12:47

标签: android

为什么此代码在Android Studio中出现错误,表示在线上存在不兼容的返回类型 protected String onPostExecute(String result2)

此处为异步代码;

class loaderdd extends AsyncTask<String, Void, String> {



protected String doInBackground(String... params) {

    String result2 = "hello";

    return result2;
}

protected void onProgressUpdate(Void progress) {
    //setProgressPercent(progress[0]);
}

protected String onPostExecute(String result2) {

return result2;
}

}

我只是试图理解这个想法,并在尝试更复杂的东西之前让它工作,比如http请求。新手。

2 个答案:

答案 0 :(得分:0)

onPostExecute没有返回值,必须是

protected void onPostExecute(String result2) {

请参阅此处http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

正如AsyncTask中提到的那样onPost有回报无效。

如果你想从asyntask获得一些数据,那么唯一的方法就是使用CallBack。你可以这样做:

new CallServiceTask(this).execute(request, url);

然后在你的CallServiceTask中添加一个本地类变量,并在onPostExecute中对该类中的方法进行分类:

private class CallServiceTask extends AsyncTask<Object, Void, Object[]>
   {
     RestClient caller;

     CallServiceTask(RestClient caller) {
      this.caller = caller;
   }


protected Object[] doInBackground(Object... params) 
   {
    HttpUriRequest req = (HttpUriRequest) params[0];
    String url = (String) params[1];
    return executeRequest(req, url);
   }

protected onPostExecute(Object result) {
    caller.onBackgroundTaskCompleted(result);
   }
}

然后在RestClient类的onBackgroundTaskCompleted()方法中直接使用Object。

更优雅和可扩展的解决方案是使用接口。有关示例实现,请参阅此库。我刚刚开始它,但它有一个你想要的例子。