我想在我的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,因为应用程序甚至不会触及该活动,因为它已经停留在请求的开头。那么,有什么想法吗?