来自php文件的数据无法转换为JSONArray

时间:2018-04-19 15:52:25

标签: php android json

我想在我的Android应用程序中从我的数据库中获取数据,但我不能。我使用this site作为如何将JSON解析到我的应用程序的示例。如果我尝试使用他的示例中的变量年龄,我的代码可以工作,但是使用我的php,它不会。下面是我的代码文件。

我的PHP。它输出一个没有键的数组,我发现没有问题,数据是在我创建的画家中绘制一些房间的坐标。数据来自用户输入,可能有所不同,一个用户可以绘制5个房间,另一个可以有10个房间。Its current output is this。这个php文件在我使用它的网站上也能正常工作。

<?php
    session_start();
    require_once('dbconfig/config.php');
    //phpinfo();
?>
    <?php 

        $sql = "SELECT * FROM painterarrays  WHERE painterarrays.username='darf' ";
         $result = mysqli_query($con, $sql);
         if (mysqli_num_rows($result) > 0) {    
             $i=0; 
    while($row = mysqli_fetch_array($result)) {
        $id=$row['id'];
        $startX= $row['startX'];
        $startY=$row['startY'];
        $endX=$row['endX'];
        $endY=$row['endY'];

        $ar[$i]=array('id'=>$id,'startX'=>$startX,'startY'=>$startY,'endX'=>$endX,'endY'=>$endY);
        $i++;
    }
        $c= json_encode($ar);
        echo $c;


  } else {
    echo "0 results";
}


mysqli_close($con);
?>

以下是应该获取Json并将其发送到另一个Activity的应用程序的Activity,以绘制房间(CustomView)。     公共类MainActivity扩展了AppCompatActivity {

    private RequestQueue mQueue;

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

        mQueue = Volley.newRequestQueue(this);
        jsonParse();
        setContentView(new CustomView(this));


    }


    private void jsonParse() {

        final String url = "https://api.myjson.com/bins/f2kbn";
        Log.d("check before request",url.toString());
        JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url,null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            Log.d("check before jsonarray",url);
                            JSONArray jsonArray = new JSONArray(url);
                            Log.d("check after jsonArray",jsonArray.toString());

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject room = jsonArray.getJSONObject(i);


                                int id = room.getInt("id");
                                int startX = room.getInt("startX");
                                int startY = room.getInt("startY");
                                int endX = room.getInt("endX");
                                int endY = room.getInt("endY");

                               Intent yy = new Intent(MainActivity.this, CustomView.class);
                                yy.putExtra("id",id);
                                yy.putExtra("startX",startX);
                                yy.putExtra("startY",startY);
                                yy.putExtra("endX",endX);
                                yy.putExtra("endY",endY);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);
    }
}

以下是Android Studio的错误

    com.tonikamitv.loginregister D/HI BEFORE THE JSONARray: https://api.myjson.com/bins/f2kbn
    com.tonikamitv.loginregister W/System.err: org.json.JSONException: Value https of type java.lang.String cannot be converted to JSONArray
com.tonikamitv.loginregister W/System.err:     at org.json.JSON.typeMismatch(JSON.java:112)
com.tonikamitv.loginregister W/System.err:     at org.json.JSONArray.<init>(JSONArray.java:96)
com.tonikamitv.loginregister W/System.err:     at org.json.JSONArray.<init>(JSONArray.java:108)
com.tonikamitv.loginregister W/System.err:     at com.tonikamitv.loginregister.MuseumActivity$1.onResponse(MuseumActivity.java:48)
com.tonikamitv.loginregister W/System.err:     at com.tonikamitv.loginregister.MuseumActivity$1.onResponse(MuseumActivity.java:43)
com.tonikamitv.loginregister W/System.err:     at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
com.tonikamitv.loginregister W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
com.tonikamitv.loginregister W/System.err:     at android.os.Handler.handleCallback(Handler.java:819)
com.tonikamitv.loginregister W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
com.tonikamitv.loginregister W/System.err:     at android.os.Looper.loop(Looper.java:164)
com.tonikamitv.loginregister W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6656)
com.tonikamitv.loginregister W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
com.tonikamitv.loginregister W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
com.tonikamitv.loginregister W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

我不认为它需要发布CustomView.class,因为应用程序甚至不会触及该活动,因为它已经停留在请求的开头。那么,有什么想法吗?

0 个答案:

没有答案