[英]Fetchind data from Json array
尝试使用 volley 从 web api 获取我的 json 数据。
我的 Json 数据:
{
"data":[
{
"id":3,
"title":"Bakı şəhər Mədəniyyət Baş İdarəsi",
"icon":{
"data":{
"full_url":"http:\/\/app.digitello.agency\/public\/uploads\/_\/originals\/turkey-marmara-region-flag-turkish-regions-by-sergoali-dan65pv-fullview.jpg",
"url":"\/uploads\/_\/originals\/turkey-marmara-region-flag-turkish-regions-by-sergoali-dan65pv-fullview.jpg",
"thumbnails":[
{
"url":"http:\/\/app.digitello.agency\/public\/thumbnail\/_\/200\/200\/crop\/good\/turkey-marmara-region-flag-turkish-regions-by-sergoali-dan65pv-fullview.jpg",
"relative_url":"\/thumbnail\/_\/200\/200\/crop\/good\/turkey-marmara-region-flag-turkish-regions-by-sergoali-dan65pv-fullview.jpg",
"dimension":"200x200",
"width":200,
"height":200
}
],
"embed":null
}
}
},
{
"id":4,
"title":"Sumqayıt Regioal Mədəniyyət İdarəsi",
"icon":null
},
{
"id":5,
"title":"Xaçmaz Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":6,
"title":"İsmayıllı Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":7,
"title":"Şəki Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":8,
"title":"Kürdəmir Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":9,
"title":"Ağstafa Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":10,
"title":"Şəmkir Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":11,
"title":"Gəncə Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":12,
"title":"Bərdə Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":13,
"title":"Ağcabədi Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":14,
"title":"Ağdaş Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":15,
"title":"Sabirabad Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":16,
"title":"Biləsuvar Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":17,
"title":"Masallı Regional Mədəniyyət İdarəsi",
"icon":null
},
{
"id":18,
"title":"Lənkəran Regional Mədəniyyət İdarəsi",
"icon":null
}
],
"public":true
}
我的适配器:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import java.util.ArrayList;
public class GridViewAdapter extends BaseAdapter {
//Imageloader to load images
private ImageLoader imageLoader;
//Context
private Context context;
//Array List that would contain the urls and the titles for the images
private ArrayList<String> images;
private ArrayList<String> names;
public GridViewAdapter (Context context, ArrayList<String> images, ArrayList<String> names){
//Getting all the values
this.context = context;
this.images = images;
this.names = names;
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object getItem(int position) {
return images.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Creating a linear layout
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setOrientation(LinearLayout.VERTICAL);
//NetworkImageView
NetworkImageView networkImageView = new NetworkImageView(context);
//Initializing ImageLoader
imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
imageLoader.get(images.get(position), ImageLoader.getImageListener(networkImageView, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));
//Setting the image url to load
networkImageView.setImageUrl(images.get(position),imageLoader);
//Creating a textview to show the title
TextView textView = new TextView(context);
textView.setText(names.get(position));
//Scaling the imageview
networkImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
networkImageView.setLayoutParams(new GridView.LayoutParams(200,200));
//Adding views to the layout
linearLayout.addView(textView);
linearLayout.addView(networkImageView);
//Returnint the layout
return linearLayout;
}
}
我的片段视图:
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
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 com.mct.virtualcultureguide.GridViewAdapter;
import com.mct.virtualcultureguide.R;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class RegionsFragment extends Fragment {
//Web api url
public static final String DATA_URL = "http://app.digitello.agency/public/_/items/regions?limit=-1&fields=id,title,icon.data";
//Tag values to read from json
public static final String TAG_IMAGE_URL = "icon";
public static final String TAG_NAME = "title";
//GridView Object
private GridView gridView;
//ArrayList for Storing image urls and titles
private ArrayList<String> images;
private ArrayList<String> names;
public RegionsFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_regions, container, false);
gridView = (GridView) rootView.findViewById(R.id.GridView);
images = new ArrayList<>();
names = new ArrayList<>();
//Calling the getData method
getData();
return rootView;
}
private void getData(){
//Showing a progress dialog while our app fetches the data from url
final ProgressDialog loading = ProgressDialog.show((Context) getActivity(), "Please wait...","Fetching data...",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) {
}
}
);
//Creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue((Context) getActivity());
//Adding our request to the queue
requestQueue.add(jsonArrayRequest);
}
private void showGrid(JSONArray jsonArray){
//Looping through all the elements of json array
for(int i = 0; i<jsonArray.length(); i++){
//Creating a json object of the current index
JSONObject obj = null;
try {
//getting json object from current index
obj = jsonArray.getJSONObject(i);
//getting image url and title from json object
images.add(obj.getString(TAG_IMAGE_URL));
names.add(obj.getString(TAG_NAME));
} catch (JSONException e) {
e.printStackTrace();
}
}
//Creating GridViewAdapter Object
GridViewAdapter gridViewAdapter = new GridViewAdapter((Context) getActivity(),images,names);
//Adding adapter to gridview
gridView.setAdapter(gridViewAdapter);
}
}
我需要在我的 json 中获取内容,所有内容都收集在数据容器中,还需要图标行中的缩略图 url。 我尝试添加 JSONArray jArray = new JSONArray(json.getString("data")); 但它不起作用。 将 Directus 用于 json api,尝试仅在 url icon.data.thumbnails.url 中获取带有字段参数的缩略图 url,仅在图标容器中使用带有所有参数的 icon.data。
从你的 json 数据我猜你的“数据”是一个 json 对象,里面是一个数组。 改变你的//Creating a json array request to get the json from our api to create a json object request
您必须使用 JsonObjectRequest,因为响应的第一个字符是{
从那里,你必须使用response.getJsonArray("data")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.