10

当我尝试获取没有对象的 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
4

9 回答 9

12

改变

 JSONObject jsonObject = new JSONObject(result);

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

insidedoInBackground方法,DownloadJSONFileAsync因为目前您没有发布任何从服务器获取 Json 数据的帖子,只是尝试将空字符串解析为 json

于 2012-12-26T06:53:37.777 回答
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 
}
于 2012-12-26T06:48:54.680 回答
3

正如您从这个答案中看到的那样,您可能会得到一个空白的回复。
一般来说,这org.json.JSONException: End of input at character N of...意味着无法解析 JSON 并且某些事情没有正确完成。

如果问题是您收到空白响应,则应确保在尝试解析之前从服务器获得响应(如 ρяσѕρєя K 的答案)。

如果问题是错误的 JSON,您应该尝试验证它。JSONLint是一个很好的起点。

于 2012-12-26T07:01:49.947 回答
1

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

于 2017-02-21T14:56:46.297 回答
1

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

于 2019-04-28T15:55:29.847 回答
0
JSONArray array=    new JSONArray(resultdata);
            for(int i=0;i<array.length();i++)
             {                  
                carid.add(jsonObject.getString("Id"));
                carlogo.add(jsonObject.getString("CarImage"));
                carname.add(jsonObject.getString("CarType"));
                prize.add(jsonObject.getString("Price"));
                availibility.add(jsonObject.getString("CarAvailable"));}
于 2015-10-28T06:13:30.120 回答
0

最好使用 optJSONObject代替,getJSONObject 因为它不会通过异常。

于 2017-05-03T04:29:12.327 回答
0

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

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

于 2020-07-16T15:56:21.343 回答
-2
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);
于 2015-10-28T06:25:59.243 回答