为什么此代码在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请求。新手。
答案 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。
更优雅和可扩展的解决方案是使用接口。有关示例实现,请参阅此库。我刚刚开始它,但它有一个你想要的例子。