I got a problem on an android based with php result.
I tried to receive a SQL query result of count, and the result is pushed out as JSON data like the following result.
[{"count":"1"}]
And then this result will be get into the android with AsyncTask. I expected the count result should be received successfully and then display on a listview.
However, it seems to be returning null rather then getting the count number in the following code.
private class GetJsonLike extends AsyncTask<Integer, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... params) {
String uri = JSON_URL4 + params[0];
Log.d("GET JSON", uri);
BufferedReader bufferedReader = null;
try {
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "
");
}
return sb.toString().trim();
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(String s) {
List<Like> dbData = new ArrayList<>();
try {
JSONArray array = new JSONArray(s);
for (int n = 0; n < array.length(); n++) {
JSONObject jObject = array.getJSONObject(n);
Like like = new Like(jObject.getLong("count"));
dbData.add(like);
likeSt[1] = likeSt[1].concat("Username:" + like.getLikeNum() + "\b\b" + "Time:");
ArrayList<String> likeList = new ArrayList<String>();
likeList.addAll(Arrays.asList(likeSt));
lv_likeAdapter = new ArrayAdapter<String>(DetailActivity.this, R.layout.list1, likeList);
lv_like.setAdapter(lv_likeAdapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
I suppose it's due to StringBuilder sb is returning a null and cause a crash.
But I don't know why it is returning a null and not getting the data.
Since, this block of code can successfully get other php data like the following JSON data which is not count result type.
[{"userName":"Zero","cmDetail":"test002","cmTime":"2016-05-06 19:41:56"},{"userName":"Zero","cmDetail":"test001","cmTime":"2016-05-06 19:41:13"},{"userName":"Zero","cmDetail":"1234","cmTime":"2016-05-06 19:40:25"}]
Seeking for advice to cope with this count problem! Thank you!
PS: I declared the variable for containing the count result is long, int was tried before but seems not working too.
Additional Info. of Logcat thx for reminding me :D
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: FATAL EXCEPTION: main
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: Process: bhouse.travellist, PID: 30508
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at org.json.JSONTokener.nextValue(JSONTokener.java:94)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at org.json.JSONArray.<init>(JSONArray.java:92)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at org.json.JSONArray.<init>(JSONArray.java:108)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at bhouse.travellist.DetailActivity$GetJsonLike.onPostExecute(DetailActivity.java:540)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at bhouse.travellist.DetailActivity$GetJsonLike.onPostExecute(DetailActivity.java:505)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.os.AsyncTask.finish(AsyncTask.java:651)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.os.AsyncTask.access$500(AsyncTask.java:180)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:224)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5514)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-07 14:20:36.592 30508-30508/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)