返回类型与 Asynctask 不兼容
Posted
技术标签:
【中文标题】返回类型与 Asynctask 不兼容【英文标题】:the return type is incompatible with Asynctask 【发布时间】:2014-08-29 12:55:58 【问题描述】:我正在尝试使用 AsyncTask 捕获 httpclient 的响应,但在验证字符串中的任何不兼容 doInBackground 时抛出以下错误:
“返回类型与AsyncTask不兼容”
我尝试捕获httpclient的响应字符串并在doInBackground中返回它以便在onPostExecute中使用它。
有人可以帮助我。
谢谢
private String insertar()
String response = "";
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
HttpPost httppost;
httpclient=new DefaultHttpClient();
httppost= new HttpPost("http://10.1.1.20/pruebaandroid/insert.php"); // Url del Servidor
//Añadimos nuestros datos
nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("dni",dni.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("nombre",nombre.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("telefono",telefono.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("email",email.getText().toString().trim()));
try
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));// envio las variables
// capturo lo que devuelve, si no devolviera nada solo hago la ejecucion del httpclient sin el handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
response = httpclient.execute(httppost, responseHandler);
//----------------------------------------------------------------
catch (UnsupportedEncodingException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ClientProtocolException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
return response;
这是异步任务:
//AsyncTask para insertar Personas
class Insertar extends AsyncTask<String,String,Boolean>
private Activity context;
Insertar(Activity context)
this.context=context;
@Override
protected String doInBackground(String... params)
// TODO Auto-generated method stub
String result = insertar();
return result;
@Override
protected void onPostExecute(Boolean result)
【问题讨论】:
发布 AsyncTask 的声明。 var 像 String 一样声明 好的,但是,post the declaration of the AsyncTask.
(有趣的是,每当一个人说多于 1 件事时,除了最后一个之外的所有事情都会立即被驳回)(显然每个人都会这样做)
用我的 AsyncTask 完成检查我的编辑代码
您定义异步任务的方式,doInBackground
必须返回一个布尔值。
【参考方案1】:
这里的问题是 AsyncTask 扩展是通用的,需要三种类型:AsyncTask<Params, Progress, Result>
AsyncTask 可能是 Void 或类,但不是原始数据类型。
所以发生的情况是你告诉编译器 doInBackground 返回一个原始 var 但它期待一个 String
类的实例。
所以使用doInBackground
函数作为
@Override
protected String doInBackground(String... params)
// TODO Auto-generated method stub
String result = insertar();
return result;
编辑
在 AsyncTask 中,您返回 Boolean
,而在 doInBackground 中返回类型为 String
,所以
将其更改为String
,因为您需要来自insertar()
函数的字符串值,即改变
class Insertar extends AsyncTask<String,String,Boolean>
到
class Insertar extends AsyncTask<String,String,String>
和
@Override
protected void onPostExecute(Boolean result)
到
@Override
protected void onPostExecute(String result)
【讨论】:
@user3810167 var 是“string”而不是“String”,请发布完整的异步任务代码。 @user3810167 乐于助人,享受编码。以上是关于返回类型与 Asynctask 不兼容的主要内容,如果未能解决你的问题,请参考以下文章
从片段调用 Android AsyncTask 没有调用其成员 - doInbackground、onpreexecute、onpostexecute
AsyncTask中onPostExecute方法的返回类型可以不为void吗?