我想创建列表视图。我来自https://demonuts.com/android-listview-using-volley/。
我只获取android的源代码,而不获取php。当我创建自己的php文件时,应用程序会继续显示加载,并且永不停止。当我看到日志猫时,它表明“类型org.json.JSONArray无法转换为JSONObject”
下面是代码
Mainactivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
retrieveJSON();
}
private void retrieveJSON() {
showSimpleProgressDialog(this,"Loading...","Fetching Json",false);
StringRequest stringRequest = new StringRequest(Request.Method.GET,URLstring,new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("strrrrr",">>" + response);
try {
JSONObject obj = new JSONObject(response);
if(obj.optString("status").equals("true")){
dataModelArrayList = new ArrayList<>();
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
DataModel playerModel = new DataModel();
JSONObject dataobj = dataArray.getJSONObject(i);
playerModel.setTitle(dataobj.getString("title"));
playerModel.setShortdesc(dataobj.getString("shortdesc"));
playerModel.setImage(dataobj.getString("image"));
dataModelArrayList.add(playerModel);
}
setupListview();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//displaying the error in toast if occurrs
Toast.makeText(getapplicationContext(),error.getMessage(),Toast.LENGTH_SHORT).show();
}
});
// request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void setupListview(){
removeSimpleProgressDialog(); //will remove progress dialog
listAdapter = new ListAdapter(this,dataModelArrayList);
listView.setadapter(listAdapter);
}
public static void removeSimpleProgressDialog() {
try {
if (mProgressDialog != null) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showSimpleProgressDialog(Context context,String title,String msg,boolean isCancelable) {
try {
if (mProgressDialog == null) {
mProgressDialog = ProgressDialog.show(context,title,msg);
mProgressDialog.setCancelable(isCancelable);
}
if (!mProgressDialog.isShowing()) {
mProgressDialog.show();
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
recyclerview.php
<?php
//database constants
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','');
define('DB_NAME','recyclerview');
//connecting to database and getting the connection object
$conn = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME);
//Checking if any error occured while connecting
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
die();
}
//creating a query
$stmt = $conn->prepare("SELECT id,shortdesc,image FROM products;");
//executing the query
$stmt->execute();
//binding results to the query
$stmt->bind_result($id,$title,$shortdesc,$image);
$products = array();
//traversing through all the result
while($stmt->fetch()){
$temp = array();
$temp['id'] = $id;
$temp['title'] = $title;
$temp['shortdesc'] = $shortdesc;
$temp['image'] = $image;
array_push($products,$temp);
}
//displaying the result in json format
echo json_encode($products);
?>