Marco
Marco

Reputation: 1205

Android Volley response for loop

I'm learning how to use Volley. I have the response logged to System.out.printIn successfully and seeing it in logcat for single item in the array. When I have multiple items, I'm struggling with FOR LOOP. I'm unable to figure out how to loop over the data. Could someone help please with showing me how to do it.

My MainActivity

    package hfad.com.volley_listview_array;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
public class MainActivity extends Activity {
    ArrayAdapter<String> adapter;
    ArrayList<String> items;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final TextView mTextView = (TextView) findViewById(R.id.textView);

        String url = "https://reqres.in/api/users?page=2";

        JsonObjectRequest jsonRequest = new JsonObjectRequest
                (Request.Method.GET, url, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        // the response is already constructed as a JSONObject!
                        try {
                            response = response.getJSONObject("data");

                            //for loop goes here? How? I get i already defined in scope
                            for (int i = 0, i < response.length(), i++);
                            //String site = response.getString("first_name"),
                              //      network = response.getString("last_name");
                            //System.out.println("firstname: "+site+"\nLastname: "+network);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                });

        Volley.newRequestQueue(this).add(jsonRequest);


    }}

And my activity_main.xml I don't need to display the results in a list. Just want all data to be piled one after the other.

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
     <!--
    <ListView
        android:id="@+id/listv"
        android:layout_width="match_parent"
        android:layout_height="89dp"></ListView>
     -->

</LinearLayout>

My data is from this test api https://reqres.in/api/users?page=2

{"page":"2","per_page":3,"total":12,"total_pages":4,"data":[{"id":4,"first_name":"eve","last_name":"holt","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"},{"id":5,"first_name":"gob","last_name":"bluth","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"},{"id":6,"first_name":"tracey","last_name":"bluth","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"}]}

I got data to be displayed in my logcat but it display the first item only. How to loop over all the records. I appreciate any help.

Upvotes: 2

Views: 3036

Answers (1)

Mukesh M
Mukesh M

Reputation: 2290

 String url = "https://reqres.in/api/users?page=2";

        JsonObjectRequest jsonRequest = new JsonObjectRequest
                (Request.Method.GET, url, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("data");
                            JSONObject jsonInnerObject;

                            for (int k = 0; k< jsonArray.length(); k++){

                                jsonInnerObject=new JSONObject(jsonArray.get(k).toString());

                                String site =  jsonInnerObject.getString("first_name"),
                                    network =  jsonInnerObject.getString("last_name");
                                System.out.println("firstname: "+site+"\nLastname: "+network);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                });

        Volley.newRequestQueue(this).add(jsonRequest);`

Note: data contains the JSONArray of JSONObject

Upvotes: 1

Related Questions