Fresco
Fresco

Reputation: 363

How to parse JSON response from API

I am trying to fetch json data and put it in a ListView. I was following a tutorial and tried to implement this. Problem is: the tutorial was based on AppCompatActivity and I am trying to add it in a Fragment (Tab):

public class InstallsTab extends Fragment{
    ListView installs;
    String url = "http://localhost/android.php";
    ProgressBar dialog;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.installs_tab, container, false);

        installs = rootView.findViewById(R.id.install_list);

        dialog = new ProgressBar(getActivity().getApplicationContext());
        dialog.setVisibility(View.VISIBLE);

        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String string) {
                parseJsonData(string);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(getActivity().getApplicationContext(), "Some error occurred!!", Toast.LENGTH_SHORT).show();
                dialog.setVisibility(View.GONE);
            }
        });

        RequestQueue rQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
        rQueue.add(request);

        return rootView;
    }

    void parseJsonData(String jsonString) {
        try {
            JSONObject object = new JSONObject(jsonString);
            JSONArray fruitsArray = object.getJSONArray("fruits");
            ArrayList al = new ArrayList();

            for(int i = 0; i < fruitsArray.length(); ++i) {
                al.add(fruitsArray.getString(i));
            }

            ArrayAdapter adapter = new ArrayAdapter(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, al);
            installs.setAdapter(adapter);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        dialog.setVisibility(View.GONE);
    }

}

enter image description here

And the app is crashing on run.

Upvotes: 1

Views: 286

Answers (1)

Ratilal Chopda
Ratilal Chopda

Reputation: 4220

you have not initialize your array list proper

Use this

ArrayList<String> al = new ArrayList<>();

Instead of this

ArrayList al = new ArrayList();

EDIT

also change this use i++ instead of ++i

for(int i = 0; i < fruitsArray.length(); i++) {

    al.add(fruitsArray.getString(i));
}

Upvotes: 1

Related Questions