当我尝试获取没有对象的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
答案 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
如果你试图用这个
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/";