Android doInBackground和onPostExecute错误

时间:2015-07-28 21:19:17

标签: android

我正在尝试使用自定义适配器填充listview。如何修复以下错误:

类型不匹配:无法从JSONObject转换为JSONArray

我已经改变了参数,但它没有用。

private class JSONParse extends AsyncTask<String, String, JSONArray> {
   private ProgressDialog pDialog;
   @Override
   protected void onPreExecute() {
       super.onPreExecute();
       pDialog = new ProgressDialog(ListResult.this);
       pDialog.setMessage("Loading...");
       pDialog.setIndeterminate(false);
       pDialog.setCancelable(true);
       pDialog.show();

   }

   @Override
   protected JSONArray doInBackground(String... args) {
       JSONParser jParser = new JSONParser();

       JSONObject json = jParser.getJSONFromUrl(url);

       return json;  // Type mismatch: cannot convert from JSONObject to JSONArray
   }

    @Override
    protected void onPostExecute(JSONArray response) {
        pDialog.dismiss();
            try {
                // Getting JSON Array
                for(int i = 0; i < response.length(); i++){

                JSONObject obj = response.getJSONObject(i);
                Medico medico = new Medico();
                medico.setNome(obj.getString("name"));
                medico.setSobrenome(obj.getString("sname"));

                unid = obj.getString("unidade");
                serv = obj.getString("servico");
                esp = obj.getString("espec");

                if(unidade.getText().toString().equalsIgnoreCase(unid) && 
                        servico.getText().toString().equalsIgnoreCase(serv) && 
                        espec.getText().toString().equalsIgnoreCase(esp)){

                    mList.add(medico);

                }                   
                }
           } catch (JSONException e) {
               e.printStackTrace();
           }

            if(mList.size() > 0){
                listView.setAdapter(adapter);
            }else{
                empty.setText("No results");
            }

            adapter.notifyDataSetChanged();

    }
}

2 个答案:

答案 0 :(得分:2)

您将在JSONArray中以doInBackground返回。

将返回类型替换为JSONObject,并在任何使用位置处理

答案 1 :(得分:0)

您的doInBackground正在传递Object({}数据类型),并且您的onPostExecute需要一个Array([]数据类型)。数据类型不匹配。 取决于您尝试处理的JSON数据,可以尝试更改onPostExecute以接受JSONObject,然后访问它的每个属性:

   @Override
    protected void onPostExecute(JSONObjct response)
    {
        pDialog.dismiss();
            try
            {
                // Getting JSON Array
                for (Map.Entry<String,JsonElement> entry : response.entrySet()) 
                {

                }                   
           } catch (JSONException e) 
           {
               e.printStackTrace();
           }

    }