org.json.JSONException:字符输入结束

时间:2012-12-26 06:37:42

标签: android arrays json

当我尝试获取没有对象的json时,它工作正常。但是当我尝试去获取有对象的json时会出现错误。

你有什么想法吗?

protected Void doInBackground(String... params) {

    String url = "http://example.com/adchara1/";
    JSONArray data = null;

    try {
        JSONObject jsonObject = new JSONObject(result);

        MyArrList = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> map;
        data = jsonObject.getJSONArray("countries");
        data = new JSONArray(getJSONUrl(url));
        for (int i = 0; i < data.length(); i++) {
            JSONObject c = data.getJSONObject(i);
            map = new HashMap<String, Object>();

            // Thumbnail Get ImageBitmap To Object
            map.put("photo", (String) c.getString("photo"));
            map.put("ImageThumBitmap",(Bitmap) loadBitmap(c.getString("photo")));

            // Full (for View Popup)
            map.put("frame", (String) c.getString("frame"));

            MyArrList.add(map);
        }

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}

错误

12-26 11:51:10.352: W/System.err(23284): org.json.JSONException: End of input at character 0 of 
12-26 11:51:10.368: W/System.err(23284):    at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
12-26 11:51:10.368: W/System.err(23284):    at org.json.JSONTokener.nextValue(JSONTokener.java:97)
12-26 11:51:10.368: W/System.err(23284):    at org.json.JSONObject.<init>(JSONObject.java:154)
12-26 11:51:10.368: W/System.err(23284):    at org.json.JSONObject.<init>(JSONObject.java:171)
12-26 11:51:10.376: W/System.err(23284):    at com.example.gridview.MainActivity$DownloadJSONFileAsync.doInBackground(MainActivity.java:180)
12-26 11:51:10.376: W/System.err(23284):    at com.example.gridview.MainActivity$DownloadJSONFileAsync.doInBackground(MainActivity.java:1)
12-26 11:51:10.376: W/System.err(23284):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-26 11:51:10.376: W/System.err(23284):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-26 11:51:10.376: W/System.err(23284):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-26 11:51:10.376: W/System.err(23284):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-26 11:51:10.376: W/System.err(23284):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-26 11:51:10.376: W/System.err(23284):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-26 11:51:10.376: W/System.err(23284):    at java.lang.Thread.run(Thread.java:856)
12-26 11:51:10.399: D/libEGL(23284): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-26 11:51:10.423: D/libEGL(23284): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-26 11:51:10.430: D/libEGL(23284): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-26 11:51:10.516: D/OpenGLRenderer(23284): Enabling debug mode 0
12-26 11:51:10.735: D/AndroidRuntime(23284): Shutting down VM
12-26 11:51:10.735: W/dalvikvm(23284): threadid=1: thread exiting with uncaught exception (group=0x4158f300)
12-26 11:51:10.735: E/AndroidRuntime(23284): FATAL EXCEPTION: main
12-26 11:51:10.735: E/AndroidRuntime(23284): java.lang.NullPointerException
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.example.gridview.MainActivity$ImageAdapter.getCount(MainActivity.java:122)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.widget.GridView.setAdapter(GridView.java:182)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.example.gridview.MainActivity.ShowAllContent(MainActivity.java:91)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.example.gridview.MainActivity$DownloadJSONFileAsync.onPostExecute(MainActivity.java:209)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.example.gridview.MainActivity$DownloadJSONFileAsync.onPostExecute(MainActivity.java:1)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.os.AsyncTask.finish(AsyncTask.java:631)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.os.Looper.loop(Looper.java:137)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at android.app.ActivityThread.main(ActivityThread.java:4931)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at java.lang.reflect.Method.invokeNative(Native Method)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at java.lang.reflect.Method.invoke(Method.java:511)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
12-26 11:51:10.735: E/AndroidRuntime(23284):    at dalvik.system.NativeStart.main(Native Method)
12-26 11:51:12.509: I/Process(23284): Sending signal. PID: 23284 SIG: 9

9 个答案:

答案 0 :(得分:8)

更改

 JSONObject jsonObject = new JSONObject(result);

result=getJSONUrl(url);  //<< get json string from server
JSONObject jsonObject = new JSONObject(result);

doInBackground的{​​{1}}方法中,因为目前你没有发表任何从服务器获取Json数据的帖子,只是试图将空字符串解析为json

答案 1 :(得分:3)

在此String result = "";之后,我没有看到您为此结果分配任何内容pastebin.com/mNVGEnD5 如果你试图用这个

获取json对象
JSONObject jsonObject = new JSONObject(result);

它肯定会返回字符0处的输入结束,因为字符串结果为空 也许你可以尝试用一些jsonString替换它,你可以用它作为例子:

{
    "result": "OK",
    "member_id": "32",
    "first_name": "Android",
    "last_name": "JSON",
    "nickname": "HEY",
    "accesskey": "123556332",
    "facebook_id": "0",
    "facebook_token_expire_date": "0000-00-00 00:00:00",
    "facebook_token_expire_date2": "0000000000000",
    "facebook_token_refresh_date": "0000-00-00 00:00:00",
    "facebook_token_key": "null",
    "status_active": 1 
}

答案 2 :(得分:2)

this answer可以看到,你可能会得到一个空白的回复。
一般来说,org.json.JSONException: End of input at character N of...意味着无法解析JSON而某些事情没有完成右。

如果问题是你得到一个空白的回复,你应该确保在尝试解析它之前从服务器得到响应(比如ρяσѕρєяK的回答)。

如果问题是一个糟糕的JSON,你应该尝试验证它。 JSONLint是一个非常好的起点。

答案 3 :(得分:1)

请检查浏览器中的PHP文件URL如果获取数据意味着如果浏览器没有显示数据,那么在android端有问题则表示PHP文件存在问题。

答案 4 :(得分:0)

p_kminus1

答案 5 :(得分:0)

carid = new ArrayList<String>();
        carlogo = new ArrayList<String>();
        carname = new ArrayList<String>();
        prize = new ArrayList<String>();
        availibility = new ArrayList<String>();

        ListView carlist=(ListView)findViewById(R.id.listcardetails);
        adapter=new CustomAdapter(this, carid, carlogo, carname, prize, availibility);
        carlist.setAdapter(adapter);

答案 6 :(得分:0)

最好使用 optJSONObject代替getJSONObject 因为它不会通过例外。

答案 7 :(得分:0)

-请检查您所有的json验证码是否正确返回json格式。

答案 8 :(得分:0)

有时候问题出在URL上,如果您的网站强制使用 HTTPS ,则必须确保您在 HTTPS URL 中使用了您的 APP

String url = "https://example.com/adchara1/";