1

伙计们,你能帮我一点吗,我收到这个错误:

"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;

    }

}

这是我实例化解析器的代码:

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"}]}

从您的问题中不清楚您到底在寻找什么。您应该发布一些有关您的方法的详细信息,否则使用这些黑盒知识,没有人能真正帮助您。

至于你的第一个问题,你想要一个轻量级的 Memcached 客户端,你可以参考以下链接

https://code.google.com/p/memcached/wiki/Clients

有许多以不同语言列出的不同 memcached 基准测试客户端。

我不知道您使用的是哪种语言,但是有一个用 PHP 编写的 memcached UDP 客户端,它轻量级且易于理解。

https://github.com/aempirei/EZ-Memcache-UDP

可能你已经尝试过了,但这里值得一提。要了解 memcached 数据包结构,您可以点击此链接:

https://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol

上面的链接提供了关于各种memcached请求-响应数据包及其结构的详细而清晰的解释。

另外,在实现你自己的系统之前,你应该看看这个链接, Memcached Telnet commands

它解释了 memcached 请求-响应的不同命令。在进一步进行自己的实现之前,使用 telnet 手动尝试所有这些以更好地了解它们确实是一个好习惯。

是的,你最后说的是对的。要实现 UDP,您需要在请求标头之前包含一个 8 字节的标头。其余一切都取决于您的实现逻辑和场景。除非您分享有关您的逻辑的更多详细信息,否则我们无法真正帮助您。

希望这可以帮助。

4

2 回答 2

6

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

<!DOCTYPE 

这可以是:

  1. 一个简单的网页(而不是原始 JSON)。它对应于网页的第一个 XML 标记(来源
  2. 服务器生成的错误页面,并以 HTML 格式打印

要进一步调试,只需json在 logcat 中打印变量的内容:

Log.d("Debug", json.toString());
jObj = new JSONObject(json);
于 2014-08-25T07:24:40.837 回答
0

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

解决方案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");


            }

        });
于 2016-04-04T12:42:36.280 回答