Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-jsonArray.length()即使在从localhost获取JSON输出后仍返回null_Android_Json_Android Asynctask_Arrays - Fatal编程技术网

android-jsonArray.length()即使在从localhost获取JSON输出后仍返回null

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

这是我从本地主机提取JSON数据的简单android活动

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)