use*_*167 0 string android android-asynctask
我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)
这是AsyncTask:
//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) {
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是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;
}
Run Code Online (Sandbox Code Playgroud)
编辑
在AsyncTask中,您将返回,Boolean而在doInBackground中,返回类型为String,so
将其更改为String因为您想要insertar()功能的字符串值
class Insertar extends AsyncTask<String,String,Boolean>{
Run Code Online (Sandbox Code Playgroud)
至
class Insertar extends AsyncTask<String,String,String>{
Run Code Online (Sandbox Code Playgroud)
和
@Override
protected void onPostExecute(Boolean result) {
}
Run Code Online (Sandbox Code Playgroud)
至
@Override
protected void onPostExecute(String result) {
}
Run Code Online (Sandbox Code Playgroud)