繁体   English   中英

从 Json 数组中获取数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM