JSONException:值

时间:2013-11-09 05:46:11

标签: java android json

伙计们,你能帮助我一点,我得到了这个错误:

"JSONException: Value <!DOCTYPE of type java.lang cannot be converted to JSONObject"

当我在解析数据时,这是我的代码:

    public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    public JSONParser() {

    }
    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

        }catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }

}

以下是我实例化Parser的代码:

private void fillSpinnerCabTypes() {        
    List<String> cabTypesSpinner = new ArrayList<String>();
    JSONParser jsonParser = new JSONParser();
    JSONObject cabTypesObject = jsonParser.getJSONFromUrl(urlTypeCabs);
    try{
        TypesArray = cabTypesObject.getJSONArray(TAG_TYPES);

        for(int i = 0; i < TypesArray.length(); i++){
            JSONObject c = TypesArray.getJSONObject(i);
            String name = c.getString(TAG_NAME);
            cabTypesSpinner.add(name);
        }
    }catch(Exception e ){
        e.printStackTrace();
    }       

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_spinner_item, cabTypesSpinner);

     final Spinner spnCabTypes = (Spinner)findViewById(R.id.spnTypeOfCab);
     adapter.setDropDownViewResource(
                            android.R.layout.simple_spinner_dropdown_item);
     spnCabTypes.setAdapter(adapter);
}

我真的很困惑。我正在服务器中的Django后端的数据库中填充微调器。

这是我的JSON数据

{"Types": [{"name": "Normal"}, {"name": "Discapacitados"}, {"name": "Buseta"}]}

2 个答案:

答案 0 :(得分:6)

此问题来自服务器 您请求的URL,向您发送数据,但不是JSON格式 您得到的异常是告诉您服务器发回的字符串以:

开头
<!DOCTYPE 

这可以是:

  1. 一个简单的网页(而不是原始JSON)。它对应于网页的第一个XML标记(source
  2. 服务器生成的错误页面,以HTML格式打印
  3. 要进一步调试,只需在logcat中打印json变量的内容:

    Log.d("Debug", json.toString());
    jObj = new JSONObject(json);
    

答案 1 :(得分:0)

这个问题也出现在我的代码中。解决方案也不同。由于webservice的拼写错误而发生。

解决方案1:

例如,真实的网址是

http://example.com/directory/file.php

我用过

http://example.com/directory/file1.php

解决方案2: 使用loopj库。它正好给你解释的错误。

AsyncHttpClient client = new AsyncHttpClient();
        client.post(str , localRequestParams, new AsyncHttpResponseHandler() {

            @Override
            public void onFinish() {
                super.onFinish();
                Log.i("onFinish","onFinish");
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

                Log.i("onSuccess","onSuccess");



            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                Log.i("onFailure","onFailure");


            }

        });