android-jsonArray.length()即使在从localhost获取JSON输出后仍返回null
这是我从本地主机提取JSON数据的简单android活动android-jsonArray.length()即使在从localhost获取JSON输出后仍返回null,android,json,android-asynctask,arrays,Android,Json,Android Asynctask,Arrays,这是我从本地主机提取JSON数据的简单android活动 public class JSONtest extends ActionBarActivity { private ProgressDialog dialog; String message3; String[] items; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst
public class JSONtest extends ActionBarActivity {
private ProgressDialog dialog;
String message3;
String[] items;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsontest);
String localhost = "http://10.0.2.2/example/json/notification.php";
tv = (TextView) findViewById(R.id.textView1);
tv.setText("Downloading Recent Notifications. Please wait...");
new ReadJSONFeedTask().execute(localhost);
}
private class ReadJSONFeedTask extends AsyncTask<String, Void, String>
{
protected void onPreExecute()
{
super.onPreExecute();
dialog = new ProgressDialog(JSONtest.this);
dialog.setMessage("Downloading Recent Notifications. Please wait . . .");
dialog.setIndeterminate(false);
dialog.setCancelable(false);
dialog.show();
}
protected String doInBackground(String...urls)
{
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result)
{
dialog.dismiss();
try
{
JSONArray jsonArray = new JSONArray(result);
items = new String[jsonArray.length()];
id_list = new String[jsonArray.length()];
for(int i = 0; i < jsonArray.length(); i++)
{
JSONObject jobj = jsonArray.getJSONObject(i);
message3 = "SUBJECT : " + jobj.getString("subject") + "\n\n" +
"TIME : " + jobj.getString("time");
items[i] = message3;
}
}
catch(Exception e)
{
e.printStackTrace();
}
tv.setText("Done! Click to view Notifications. ");
}
}
public void helpMe(View view)
{
Intent i = new Intent(JSONtest.this, Temp.class);
i.putExtra("items", items);
startActivity(i);
}
public String readJSONFeed(String URL)
{
StringBuilder sb = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet hg = new HttpGet(URL);
try
{
HttpResponse response = client.execute(hg);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if(statusCode == 200)
{
HttpEntity en = response.getEntity();
InputStream content = en.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while((line = reader.readLine()) != null)
{
sb.append(line);
}
}
else
{
Log.e("JSON", "Failed to download File");
}
}
catch(ClientProtocolException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
return sb.toString();
}
}
但我的代码不起作用。因此,我尝试在
TextView
的onPostExecute(String result)
中输出结果
,这将使JSON输出保持原样,如上所述。这意味着我的应用程序接收JSON输出。但是我的jsonArray.length()
返回null
。我的代码有什么问题请帮忙 日志上写着
11-05 13:05:31.523: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.563: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.643: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.673: W/System.err(1909): org.json.JSONException: Value [{"time":"2:00pm","subject":"Subject One"},{"time":"2:30pm","subject":"Subject Two"}] of type org.json.JSONArray cannot be converted to JSONObject
11-05 13:05:32.673: W/System.err(1909): at org.json.JSON.typeMismatch(JSON.java:111)
11-05 13:05:32.673: W/System.err(1909): at org.json.JSONObject.<init>(JSONObject.java:159)
11-05 13:05:32.673: W/System.err(1909): at org.json.JSONObject.<init>(JSONObject.java:172)
11-05 13:05:32.673: W/System.err(1909): at com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:70)
11-05 13:05:32.673: W/System.err(1909): at com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:1)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask.finish(AsyncTask.java:632)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
11-05 13:05:32.673: W/System.err(1909): at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 13:05:32.673: W/System.err(1909): at android.os.Looper.loop(Looper.java:136)
11-05 13:05:32.673: W/System.err(1909): at android.app.ActivityThread.main(ActivityThread.java:5017)
11-05 13:05:32.673: W/System.err(1909): at java.lang.reflect.Method.invokeNative(Native Method)
11-05 13:05:32.673: W/System.err(1909): at java.lang.reflect.Method.invoke(Method.java:515)
11-05 13:05:32.673: W/System.err(1909): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-05 13:05:32.673: W/System.err(1909): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-05 13:05:32.673: W/System.err(1909): at dalvik.system.NativeStart.main(Native Method)
11-05 13:05:31.523:W/EGL_仿真(1909):未实现eglSurfaceAttrib
11-05 13:05:32.563:W/EGL_仿真(1909):未实现eglSurfaceAttrib
11-05 13:05:32.643:W/EGL_仿真(1909):未实现eglSurfaceAttrib
11-05 13:05:32.673:W/System.err(1909):org.json.JSONException:Value[{“time”:“subject One”},{“time”:“subject One”},{“time”:“2:30pm”,“subject”:“subject Two”}]类型的org.json.JSONArray无法转换为JSONObject
11-0513:05:32.673:W/System.err(1909):位于org.json.json.typemissmatch(json.java:111)
11-0513:05:32.673:W/System.err(1909):位于org.json.JSONObject.(JSONObject.java:159)
11-0513:05:32.673:W/System.err(1909):位于org.json.JSONObject.(JSONObject.java:172)
11-05 13:05:32.673:W/System.err(1909):位于com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:70)
11-05 13:05:32.673:W/System.err(1909):位于com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:1)
11-05 13:05:32.673:W/System.err(1909):在android.os.AsyncTask.finish(AsyncTask.java:632)
11-0513:05:32.673:W/System.err(1909):在android.os.AsyncTask.access$600(AsyncTask.java:177)
11-05 13:05:32.673:W/System.err(1909):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
11-0513:05:32.673:W/System.err(1909):在android.os.Handler.dispatchMessage(Handler.java:102)上
11-0513:05:32.673:W/System.err(1909):在android.os.Looper.loop(Looper.java:136)上
11-05 13:05:32.673:W/System.err(1909):位于android.app.ActivityThread.main(ActivityThread.java:5017)
11-05 13:05:32.673:W/System.err(1909):位于java.lang.reflect.Method.invokenactive(本机方法)
11-0513:05:32.673:W/System.err(1909):位于java.lang.reflect.Method.invoke(Method.java:515)
11-05 13:05:32.673:W/System.err(1909):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-0513:05:32.673:W/System.err(1909):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-05 13:05:32.673:W/System.err(1909):在dalvik.System.NativeStart.main(本机方法)
事实证明,您应该使用jsonobjectjobj=(JSONObject)jsonArray.get(i)相反,当在JSONArray
上迭代时。在将JsonObject
添加到项目之前,还必须检查它何时为null。我还建议您在try catch
块中添加一个catch,这样您就可以确定何时出现JSONException
你确定你的jsonArray对象不是空的吗?onPostExecute(字符串结果)
中的result
向我显示了完整的JSON数据,这意味着我的应用程序正在获取JSON数据。这是否意味着我的jsonArray对象不是null
?我不确定。然后你必须调试它并检查它是否为空。或者验证jsonArray.isEmpty()。我是否尝试执行tv.setText(Integer.toString(jsonArray.length())
其中tv
是TextView
并且在运行应用程序时在TextView
中显示我null
。这不意味着我的jsonArray
是空的吗。但是,当它获取JSON输出时,为什么会是空的呢?我不知道@joao2fast4uThat确认您的JSONArray为空。你的结果值是多少?您是否在代码中检查了它的值?是的,非常感谢您为我的问题花费的时间和精力。:)
11-05 13:05:31.523: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.563: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.643: W/EGL_emulation(1909): eglSurfaceAttrib not implemented
11-05 13:05:32.673: W/System.err(1909): org.json.JSONException: Value [{"time":"2:00pm","subject":"Subject One"},{"time":"2:30pm","subject":"Subject Two"}] of type org.json.JSONArray cannot be converted to JSONObject
11-05 13:05:32.673: W/System.err(1909): at org.json.JSON.typeMismatch(JSON.java:111)
11-05 13:05:32.673: W/System.err(1909): at org.json.JSONObject.<init>(JSONObject.java:159)
11-05 13:05:32.673: W/System.err(1909): at org.json.JSONObject.<init>(JSONObject.java:172)
11-05 13:05:32.673: W/System.err(1909): at com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:70)
11-05 13:05:32.673: W/System.err(1909): at com.onclaveinc.ioexception.JSONtest$ReadJSONFeedTask.onPostExecute(JSONtest.java:1)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask.finish(AsyncTask.java:632)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-05 13:05:32.673: W/System.err(1909): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
11-05 13:05:32.673: W/System.err(1909): at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 13:05:32.673: W/System.err(1909): at android.os.Looper.loop(Looper.java:136)
11-05 13:05:32.673: W/System.err(1909): at android.app.ActivityThread.main(ActivityThread.java:5017)
11-05 13:05:32.673: W/System.err(1909): at java.lang.reflect.Method.invokeNative(Native Method)
11-05 13:05:32.673: W/System.err(1909): at java.lang.reflect.Method.invoke(Method.java:515)
11-05 13:05:32.673: W/System.err(1909): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-05 13:05:32.673: W/System.err(1909): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-05 13:05:32.673: W/System.err(1909): at dalvik.system.NativeStart.main(Native Method)