【问题标题】:the return type is incompatible with Asynctask返回类型与 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 必须返回一个布尔值。

标签: android string android-asynctask


【解决方案1】:

这里的问题是 AsyncTask 扩展是通用的,需要三种类型:AsyncTask&lt;Params, Progress, Result&gt;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 乐于助人,享受编码。
猜你喜欢
  • 2016-05-28
  • 2019-09-06
  • 2013-11-11
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2021-04-15
  • 1970-01-01
相关资源
最近更新 更多