Reputation: 1467
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
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
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
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