Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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
通过PHP文件获取JSON时,JSONArray无法转换为JSONObject错误_Php_Android_Json_Parsing - Fatal编程技术网

通过PHP文件获取JSON时,JSONArray无法转换为JSONObject错误

通过PHP文件获取JSON时,JSONArray无法转换为JSONObject错误,php,android,json,parsing,Php,Android,Json,Parsing,我知道这里也存在同样的问题,但我认为我的情况不同,我觉得这很令人困惑。当我的JSON链接是private static String url=”时,我会遇到这个错误http://10.0.2.2/shareity/test.php/";。但是当我在一个文本文件private static String url=”中有完全相同的JSON数据时http://10.0.2.2/shareity/json.txt";它工作得很好。我的问题是,当我只从PHP文件本身获取JSON时,为什么会发生这种情况 我

我知道这里也存在同样的问题,但我认为我的情况不同,我觉得这很令人困惑。当我的JSON链接是
private static String url=”时,我会遇到这个错误http://10.0.2.2/shareity/test.php/";。但是当我在一个文本文件
private static String url=”中有完全相同的JSON数据时http://10.0.2.2/shareity/json.txt";它工作得很好。我的问题是,当我只从PHP文件本身获取JSON时,为什么会发生这种情况

我的日志:

03-30 09:31:01.250: E/JSON Parser(3129): Error parsing data     org.json.JSONException: Value [{"eid":"1","ename":"First","edesc":"Chirath"},    {"eid":"2","ename":"New one","edesc":"Checking if tiisssf"},    {"eid":"3","ename":"Blood Donation","edesc":"Giv the blud"},    {"eid":"4","ename":"Clean","edesc":"cleant eh thin g"}] of type org.json.JSONArray cannot be converted to JSONObject
03-30 09:31:01.260: W/EGL_emulation(3129): eglSurfaceAttrib not implemented
03-30 09:31:01.260: W/OpenGLRenderer(3129): Failed to set EGL_SWAP_BEHAVIOR     on surface 0x7ff0079d5140, error=EGL_SUCCESS
03-30 09:31:01.310: D/AndroidRuntime(3129): Shutting down VM
03-30 09:31:01.310: E/AndroidRuntime(3129): FATAL EXCEPTION: main
03-30 09:31:01.310: E/AndroidRuntime(3129): Process: learn2crack.listview,     PID: 3129
03-30 09:31:01.310: E/AndroidRuntime(3129): java.lang.NullPointerException:     Attempt to invoke virtual method 'org.json.JSONArray     org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     learn2crack.listview.MainActivity$JSONParse.onPostExecute(MainActivity.java:108)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     learn2crack.listview.MainActivity$JSONParse.onPostExecute(MainActivity.java:1)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     android.os.AsyncTask.finish(AsyncTask.java:632)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     android.os.AsyncTask.access$600(AsyncTask.java:177)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     android.os.Handler.dispatchMessage(Handler.java:102)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     android.os.Looper.loop(Looper.java:135)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     java.lang.reflect.Method.invoke(Native Method)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     java.lang.reflect.Method.invoke(Method.java:372)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-30 09:31:01.310: E/AndroidRuntime(3129):     at     com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
这是我的主要活动

public class MainActivity extends Activity {
ListView list;
TextView eid;
TextView ename;
TextView edesc;
Button Btngetdata;
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

//URL to get JSON Array
private static String url = "http://10.0.2.2/shareity/test.php/";

//JSON Node Names 
private static final String TAG_OS = "events";
private static final String TAG_EID = "eid";
private static final String TAG_ENAME = "ename";
private static final String TAG_EDESC = "edesc";

JSONArray events = null;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    oslist = new ArrayList<HashMap<String, String>>();



    Btngetdata = (Button)findViewById(R.id.getdata);
    Btngetdata.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
             new JSONParse().execute();


        }
    });


}



private class JSONParse extends AsyncTask<String, String, JSONObject> {
     private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
         eid = (TextView)findViewById(R.id.vers);
         ename = (TextView)findViewById(R.id.name);
         edesc = (TextView)findViewById(R.id.api);
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();



    }

    @Override
    protected JSONObject doInBackground(String... args) {

        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
     @Override
     protected void onPostExecute(JSONObject json) {
         pDialog.dismiss();
         try {
                // Getting JSON Array from URL
                events = json.getJSONArray(TAG_OS);
                for(int i = 0; i < events.length(); i++){
                JSONObject c = events.getJSONObject(i);

                // Storing  JSON item in a Variable
                String eid = c.getString(TAG_EID);
                String ename = c.getString(TAG_ENAME);
                String edesc = c.getString(TAG_EDESC);




                // Adding value HashMap key => value


                HashMap<String, String> map = new HashMap<String, String>();

                map.put(TAG_EID, eid);
                map.put(TAG_ENAME, ename);
                map.put(TAG_EDESC, edesc);

                oslist.add(map);
                list=(ListView)findViewById(R.id.list);





                ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist,
                        R.layout.list_v,
                        new String[] { TAG_EID,TAG_ENAME, TAG_EDESC }, new int[] {
                                R.id.vers,R.id.name, R.id.api});

                list.setAdapter(adapter);
                list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
                        Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();

                    }
                });

                }
        } catch (JSONException e) {
            e.printStackTrace();
        }


     }
}

}
试试这个,它会有用的 将以下内容放在php代码的顶部

header('Content-Type: application/json');
首先关闭mysql连接而不是fclose(我不确定)


您可以从字符串创建jsonObject,但是这个字符串是jsonarray

JSONArray jsonArray = new JSONArray(yourJSONString);
for(int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObj = jsonArray.getJSONObject(i);
}
JSONArray-JSONArray=newjsonarray(yourJSONString);
for(int i=0;i
显然,请学习如何使用谷歌…@Selvin,我知道如何使用谷歌。这就是为什么我在问题的开头提到,我相信我的案例与其他案例不同。问题在于我的PHP代码。不是安卓。谢谢你的帮助,顺便说一句:)哈哈。。。你甚至不明白其他的问题。。。替换
JSONObject jObj=新的JSONObject(json)
with
JSONArray jObj=新的JSONArray(json)也应该做到这一点。。。基本上,你只是复制粘贴一些代码而不理解它。。。这不是编程哦,是吗?我不知道。我是自学型安卓,而且我是个新手。请不要嘲笑我。我很确定你在某个时候是这样的,它可能有用?这不是这个错误的原因…我希望你的答案,谢谢,伙计,从字符串形成json,它必须是有效的json,这里OP没有发布从php收到的确切json。当然没有。。。org.json.JSONException:Value[{“eid”:“1”,“ename”:“First”,“edesc”:“Chirath”},{“eid”:“2”,“ename”:“New one”,“edesc”:“Checking if tiisssf”},{“eid”:“Blood exection”,“edesc”:“Giv the blud”},{“eid”:“4”,“ename”:“Clean”,“edesc”:“cleant eh thin g”}类型org.json.JSONArray无法转换为JSONObject。。。这里是$json_response=array()。。。echo json_编码($json_响应)@塞尔文,我现在明白了。在PHP代码中,缺少
{“events”:
。我如何获得它?我应该向PHP代码中添加什么代码?请帮助我,我对所有这些都是新手:(我已经在PHP部分更正了您的代码,echo json_encode(array('events'=>$json_response));
header('Content-Type: application/json');
mysql_close();

echo json_encode(array('events'=>$json_response));
JSONArray jsonArray = new JSONArray(yourJSONString);
for(int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObj = jsonArray.getJSONObject(i);
}