我正在开发一个项目,因为我想在网格视图中显示JSON数据。我尝试了齐射来获取数据,但数据未显示在网格视图中。以下是我的Json API
{
"status": 200,
"msg": "success",
"data": [
{
"category_name": "ELECTRONICS",
"category_description": "ELECTRONICS Items",
"category_image": "images/uploads/a8cee9e723f669813b999ee6bfe611f42018-05-1712-36-17.jpg"
},
{
"category_name": "Sports",
"category_description": "Sports Accesories",
"category_image": "images/uploads/76f2c9778df71ae83d04bc0d6178042f2018-05-1712-36-17.jpg"
},
{
"category_name": "Dress",
"category_description": "All Kind of dress",
"category_image": "images/uploads/05a5efb96308db381116e90478fce2272018-05-1712-36-17.jpg"
},
{
"category_name": "Cars",
"category_description": "Automobiles",
"category_image": ""
}
]
}
下面的代码是我的主要活动
package shop.shop;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import shop.Fragment.AboutUsFragment;
public class Drawer extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
//Web api url
public static final String DATA_URL = "http://www.foliagetechnologies.com/rent/api/v1/master/category.php";
//Tag values to read from json
public static final String TAG_IMAGE_URL = "category_image";
public static final String TAG_NAME = "category_name";
//GridView Object
private GridView gridView;
//ArrayList for Storing image urls and titles
private ArrayList<String> category_image;
private ArrayList<String> category_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
gridView = (GridView) findViewById(R.id.grid_view_image_text);
category_image = new ArrayList<>();
category_name = new ArrayList<>();
//Calling the getData method
getData();
}
// create a method getData() to get the JSON Array from the API.
private void getData()
{
//Showing a progress dialog while our app fetches the data from url
final ProgressDialog loading = ProgressDialog.show(this,"Loading","Be Patience",false,false);
//Creating a json array request to get the json from our api
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Dismissing the progressdialog on response
loading.dismiss();
//Displaying our grid
showGrid(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loading.dismiss();
Toast.makeText(getApplicationContext(),error.getMessage()+",hello everybody",Toast.LENGTH_LONG).show();
}
}
);
//Creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
//Adding our request to the queue
requestQueue.add(jsonArrayRequest);
}
private void showGrid(JSONArray response) {
//Looping through all the elements of json array
for (int i = 0; i<response.length(); i++){
//Creating a json object of the current index
JSONObject obj = null;
//getting json object from current index
try {
obj = response.getJSONObject(i);
//getting image url and title from json object
category_image.add(obj.getString(TAG_IMAGE_URL));
category_name.add(obj.getString(TAG_NAME));
} catch (JSONException e) {
e.printStackTrace();
}
}
//Creating GridHomeAdapter Object
GridHomeAdapter gridhomeAdapter = new GridHomeAdapter(this,category_image,category_name);
//Adding adapter to gridview
gridView.setAdapter(gridhomeAdapter);
}
下面是布局文件。我没有为我的项目使用操作栏,因此我仅为操作栏创建了一个xml文件,并将其包含在此xml文件中。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
android:id="@+id/include"
layout="@layout/app_bar_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_drawer"
app:menu="@menu/activity_drawer_drawer"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:scrollbars="none"
>
<GridView
android:id="@+id/grid_view_image_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="55dp"
android:columnWidth="110dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:numColumns="auto_fit" />
</LinearLayout>
错误是 This the Exception I am getting..Image URL is given below
答案 0 :(得分:2)
我希望这对您有用。
像这样解析json
try {
JSONObject jsonObject=new JSONObject(reponse.toString());
String status=jsonObject.getString("status");
String msg=jsonObject.getString("msg");
Log.e("status",status);
Log.e("msg",msg);
JSONArray jsonArray=jsonObject.getJSONArray("data");
for (int i = 0; i <jsonArray.length() ; i++) {
JSONObject jsonObject1=jsonArray.getJSONObject(i);
String category_name=jsonObject1.getString("category_name");
String category_description=jsonObject1.getString("category_description");
String category_image=jsonObject1.getString("category_image");
Log.e("category_name",category_name);
Log.e("category_description",category_description);
Log.e("category_image",category_image);
}
} catch (JSONException e) {
e.printStackTrace();
}
并使用volly StringRequest。
答案 1 :(得分:1)
在下面替换getData
方法
private void getData()
{
//Showing a progress dialog while our app fetches the data from url
final ProgressDialog loading = ProgressDialog.show(this,"Loading","Be Patience",false,false);
//Creating a json array request to get the json from our api
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, DATA_URL, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//Dismissing the progressdialog on response
loading.dismiss();
//Displaying our grid
showGrid(response.optJSONArray("data")); }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
loading.dismiss();
Toast.makeText(getApplicationContext(),error.getMessage()+",hello everybody",Toast.LENGTH_LONG).show();
}
});
//Creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
//Adding our request to the queue
requestQueue.add(jsonObjectRequest);
}
答案 2 :(得分:0)
使用JsonObjectRequest
代替JsonArrayRequest
。
然后将showGrid(response);
替换为showGrid(response.optJSONArray("data"));