akkk
akkk

Reputation: 1467

Custom ListView not populating with items in Android

I am parsing using JSON. On button click JSON parsing starts and listview is to be populated. The data is coming from the server but the listview is not populating. Code is not even showing any error. Please Check

public class MainActivity extends AppCompatActivity {

Button start;
ListView listView;
TextView textView;
RequestQueue requestQueue;
String[] deliverName = new String[100];
String[] deliverPrice = new String[100];
int[] deliverImage = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,
        R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,
        R.mipmap.ic_launcher, R.mipmap.ic_launcher,};
int total;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    start = (Button) findViewById(R.id.button);
    //textView = (TextView) findViewById(R.id.textView);
    requestQueue = Volley.newRequestQueue(this);
    listView = (ListView) findViewById(R.id.listView2);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://deliverit.co.in/test.php?tablename=shakestable",
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                JSONArray jsonArray = response.getJSONArray("products");
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    JSONObject products = jsonArray.getJSONObject(i);
                                    deliverName[i] = products.getString("name");
                                    deliverPrice[i] = products.getString("price");
                                }
                                Adapter adapter = new Adapter(getBaseContext(), deliverName, deliverPrice, deliverImage);
                                listView.setAdapter(adapter);
                                Log.e("TESTTTT", deliverName[2]);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(MainActivity.this, "ERROR\n" + error.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
            );
            requestQueue.add(jsonObjectRequest);
        }
    });
}
}

Adapter.java

public class Adapter extends ArrayAdapter<String> {

int[] imgs={};
String[] name={};
String[] price={};
Context c;
LayoutInflater inflater;
public Adapter(Context context, String[] name, String[] price, int[] imgs) {
    super(context, R.layout.movies_row_layout);

    this.c = context;
    this.name = name;
    this.price = price;
    this.imgs = imgs;
}

public class ViewHolder
{
    TextView deliver_name;
    TextView deliver_price;
    ImageView deliver_image;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView==null){
        inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.movies_row_layout, null);
    }
    //View Holder Object
    final ViewHolder holder = new ViewHolder();
    holder.deliver_name = (TextView) convertView.findViewById(R.id.DELIVERname);
    holder.deliver_price = (TextView) convertView.findViewById(R.id.DELIVERprice);
    holder.deliver_image = (ImageView) convertView.findViewById(R.id.movie_poster);

    //ASSIGN DATA
    holder.deliver_image.setImageResource(imgs[position]);
    holder.deliver_price.setText(price[position]);
    holder.deliver_name.setText(name[position]);

    return convertView;
}
}

Upvotes: 0

Views: 68

Answers (3)

Alexey Rogovoy
Alexey Rogovoy

Reputation: 701

You extended your adapter from ArrayAdapter, but you don't add any items to adapter. Also, you put to constructor 3 different arrays. I think, the right way is extending your adapter from BaseAdapter. But, you can bit modify your constructor:

public Adapter(Context context, String[] name, String[] price, int[] imgs) {
    super(context, R.layout.movies_row_layout,names);
                                            ^^^^^^^^^
...

And your exists adapter will work.

Upvotes: 2

GhostDede
GhostDede

Reputation: 446

Actually you should create your queue below the response Listener. i hope it will work. If it doesn't work, it may stems from your php side.

Like

public class MainActivity extends AppCompatActivity {

Button start;
ListView listView;
TextView textView;
RequestQueue requestQueue;
String[] deliverName = new String[100];
String[] deliverPrice = new String[100];
int[] deliverImage = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,
        R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,
        R.mipmap.ic_launcher, R.mipmap.ic_launcher,};
int total;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    start = (Button) findViewById(R.id.button);
    //textView = (TextView) findViewById(R.id.textView);
    requestQueue = Volley.newRequestQueue(this);
    listView = (ListView) findViewById(R.id.listView2);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://deliverit.co.in/test.php?tablename=shakestable",
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                JSONArray jsonArray = response.getJSONArray("products");
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    JSONObject products = jsonArray.getJSONObject(i);
                                    deliverName[i] = products.getString("name");
                                    deliverPrice[i] = products.getString("price");
                                }
                                Adapter adapter = new Adapter(getBaseContext(), deliverName, deliverPrice, deliverImage);
                                listView.setAdapter(adapter);
                                Log.e("TESTTTT", deliverName[2]);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(MainActivity.this, "ERROR\n" + error.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
            );
             RequestQueue requestQueue =  Volley.newRequestQueue(this);
            requestQueue.add(jsonObjectRequest);
        }
    });
}
}

Upvotes: 1

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132992

When creating custom Adapter then also need to override getCount() method of Adapter class which is extended in class:

@Override
public int getCount() {
    return name.length;  // return data-source size from here
}

Upvotes: 0

Related Questions