错误无法从AsyncTask <string,string,string>转换为String </string,string,string>

时间:2014-06-05 06:33:42

标签: android android-asynctask

我想从php加载数据,然后在android中解析它。我试图在这个过程中实现asynctask。返回是字符串。我收到了一个错误 &#34;类型不匹配:无法在

中从AsyncTask<String,String,String>转换为String
    ProsesTampil p = new ProsesTampil();
    xResult = p.execute(urltampil);

xResult应该是我从php获得的字符串值。 这是完整的代码:

public void tampilkanData() {
        try {
            String nama = URLEncoder.encode(Login.usernameP, "utf-8");
            urltampil += "?" + "&nama=" + nama;
            txtNama.setText("");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        ProsesTampil p = new ProsesTampil();
        xResult = p.execute(urltampil);

        try {
            parse();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


       private void parse() throws Exception {
            //jObject = new JSONObject(xResult);

            JSONArray menuitemArray = new JSONArray(xResult);
            jObject=menuitemArray.getJSONObject(0);
            String sret="";
            txtBerat.setText(jObject.getString("berat_badan"));
            txtNama.setText(jObject.getString("username"));
       //     txtUsia.setText(jObject.getString("usia"));
            txtTinggi.setText(jObject.getString("tinggi_badan"));
            //System.out.println(jObject.getString("jenis_kelamin").equalsIgnoreCase("female"));
            if(jObject.getString("jenis_kelamin").equalsIgnoreCase("female")){
                radioFemale.setSelected(true);
                radioMale.setSelected(false);
            }else{
                radioMale.setSelected(true);
                radioFemale.setSelected(false);
            }
   }

 public String getRequestData(String UrlTampil){

               String sret="";
                HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet(UrlTampil);
                try{
              HttpResponse response = client.execute(request);
                  sret =request(response);

                }catch(Exception ex){
                    Toast.makeText(this,"Gagal "+sret, Toast.LENGTH_SHORT).show();
            }
                System.out.println(sret);
                return sret;

        }

    class ProsesTampil extends AsyncTask<String, String, String>{

        @Override
        protected String doInBackground(String... params) {
            return getRequestData(params[0]);

        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

        }

    }

对不起我的英语不好。提前谢谢

5 个答案:

答案 0 :(得分:2)

AsyncTask的建议是在一个单独的线程中执行一些代码(与 UI线程不同),但该代码的结果在准备好后将在{{{{1>}中传递。 1}}。
即方法onPostExecute会返回execute本身,而非AynscTask,因此请将代码更改为

String

   ProsesTampil p = new ProsesTampil();
     xResult = p.execute(urltampil);

ProsesTampil p = new ProsesTampil(); p.execute(urltampil); 方法中的xResult作为

onPostExecute

答案 1 :(得分:0)

execute()没有返回字符串。所以你不能那样分配它。 AsyncTasks是异步的 - 他们要等到晚些时候才能完成。您希望在AsyncTask的结果上运行的任何代码都应放在onPostExecute()的{​​{1}}函数中。

答案 2 :(得分:0)

First Thing您无法从onPostExecute()返回值,因为返回类型为void

protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

        }

第二,你的班级没有任何价值......

因此,如果您想获得结果值,请尝试从onPostExecute()获取值。

我的意思是说按照以下方式行事......

           protected void onPostExecute(String result) {
                // TODO Auto-generated method stub
                xResult = result;
                super.onPostExecute();
            }

答案 3 :(得分:0)

你不能这样做,因为AsyncTask在后台线程中工作。 在后台完成自我工作后,您的结果将出现在UI线程中:

   @Override
        protected void onPostExecute(String result) {
           //String result - that what you need     
        }

答案 4 :(得分:-1)

哟可以使用

String results = yourAsyntask.get()而不是使用yourAsyntask.execut()e方法,它会返回结果。与结果相同,让您进入onPostExecute方法;

But it will block your main thread.