Reputation: 96
I want to load JSONArray and set into listview.
Here, is my one_fragment where i load the data into listiview
<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"
tools:context="info.androidhive.materialtabs.fragments.ThreeFragmnet">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#3C3C3C">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="35dp"
android:paddingLeft="5dp"
android:orientation="horizontal">
<TextView
android:id="@+id/txtlblTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_gravity="center"
android:textSize="15dp"
android:text="IND-250/4(ovr-90)"/>
<View
android:layout_width="110dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtlblRuns"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_gravity="center"
android:textSize="15dp"
android:text="R"/>
<TextView
android:id="@+id/txtlblBalls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="15dp"
android:text="B"/>
<TextView
android:id="@+id/txtlblFours"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="18dp"
android:text="4s"/>
<TextView
android:id="@+id/txtSixs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="15dp"
android:text="6s"/>
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
</LinearLayout>
</LinearLayout>
Here, is my OneFragment which i load the json data and store into adapter
public class OneFragment extends Fragment {
View rootView;
JSONObject jsonObject;
List<Score> list=new ArrayList<Score>();
ListView lst;
FullScoreAdapter adapter=null;
private static final String url="http://10.0.2.2/JSON/fullLitz.php";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_one, container, false);
new JSONLoader().execute();
return rootView;
}
public class JSONLoader extends AsyncTask<String, String, JSONObject> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(getActivity());
dialog.setMessage("Getting....");
dialog.setIndeterminate(false);
dialog.setCancelable(true);
dialog.show();
}
@Override
protected JSONObject doInBackground(String... params) {
JSONParser parser = new JSONParser();
jsonObject = parser.getJSONFromUrl(url);
return jsonObject;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
dialog.dismiss();
try {
JSONObject mainObject = new JSONObject(jsonObject.toString());
String status = mainObject.getString("status");
String version = mainObject.getString("version");
String status_code = mainObject.getString("status_code");
String Etag = mainObject.getString("Etag");
String cache_key = mainObject.getString("cache_key");
JSONObject dataObject = mainObject.getJSONObject("data");
JSONObject cardObject = dataObject.getJSONObject("card");
JSONObject innings = cardObject.getJSONObject("innings");
JSONObject b_1=innings.getJSONObject("b_1");
JSONArray batting_order=b_1.getJSONArray("batting_order");
int length=batting_order.length();
ArrayList<String> p_name=new ArrayList<String>();
Score s=new Score();
//for(int j=0;j<length;j++) {
for (int i = 0; i < batting_order.length(); i++) {
p_name.add(batting_order.getString(i));
}
//p_name.add(batting_order.getString(j));
//}
s.setPlayernames(p_name);
list.add(s);
lst=(ListView)rootView.findViewById(R.id.listview);
adapter=new FullScoreAdapter(getContext(),list,length);
lst.setAdapter(adapter);
}
catch (JSONException e){
e.printStackTrace();
}
}
}
}
Here, Is my list_rows.xml to create custom listview
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#3C3C3C">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="35dp"
android:paddingLeft="5dp"
android:orientation="horizontal">
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_gravity="center"
android:textSize="10dp"
android:text="IND-250/4(ovr-90)"/>
<View
android:layout_width="110dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtRuns"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_gravity="center"
android:textSize="10dp"
android:text="R"/>
<TextView
android:id="@+id/txtBalls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="10dp"
android:text="B"/>
<TextView
android:id="@+id/txtFours"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="10dp"
android:text="4s"/>
<TextView
android:id="@+id/txtSixs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="15dp"
android:layout_gravity="center"
android:textSize="15dp"
android:text="6s"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Here, Is my FullScoreAdapter.java which inflate list_rows.xml and set into OneFragment.java
public class FullScoreAdapter extends BaseAdapter {
private static final int TYPES_COUNT = 2;
private static final int TYPE_LEFT = 0;
private static final int TYPE_RIGHT = 1;
private Context context;
private List<Score> items,lst;
private int length;
private static LayoutInflater inflater;
public FullScoreAdapter(Context context,List<Score> items,int length){
this.context=context;
this.items=items;
this.length=length;
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder {
TextView txtname;
TextView txtballs;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder=new Holder();
final View view;
view = inflater.inflate(R.layout.list_rows, null);
holder.txtname=(TextView)view.findViewById(R.id.txtName);
holder.txtballs=(TextView)view.findViewById(R.id.txtBalls);
Score score=items.get(position);
String batting="";
for(String str:score.getPlayernames()){
//batting+=str;
Log.e("BESTMAN NAME", str);
holder.txtname.setText(str);
}
return view;
}
}
Here is my score.java class which have setter and getter methods.
package com.domore.tabfinaldemo;
import java.util.List;
public class Score {
private List<String> playernames;
private String target;
public List<String> getPlayernames() {
return playernames;
}
public void setPlayernames(List<String> playernames) {
this.playernames = playernames;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
}
This is my json data which i want to load
{
"status": true,
"version": "2.0.3",
"status_code": 200,
"expires": "1427298827.0",
"Etag": "1427287936.0",
"cache_key": "match|iplt20_2013_g30|full_card",
"data": {
"card_type": "full_card",
"card": {
"related_name": "30th Match",
"inactive_balls": [],
"msgs": {
"info": "CSK won by 5 wickets.",
"completed": "CSK won by 5 wickets.",
"others": []
},
"batting_order": [
[
"b",
"1"
],
[
"a",
"1"
]
],
"toss": {
"decision": "bat",
"won": "b",
"str": "Rajasthan Royals won the toss and chose to bat first"
},
"winner_team": "a",
"long_description": "CSK won by 5 wickets. Chennai Super Kings scored 186/5 in 19.5 and Rajasthan Royals scored 185/4 in 20.0. Michael Hussey played good and he is man of the match. - Chennai Super Kings vs Rajasthan Royals (International Cricket Match) - 30th Match - IPL 2013 - IPL T20 2013. On 22 April 2013 in MA Chidambaram Stadium, Chepauk, Chennai.",
"innings": {
"b_1": {
"batting_order": [
"s_watson",
"a_rahane",
"d_yagnik",
"r_dravid",
"s_binny",
"b_hodge"
],
"runs": 185,
"balls": 120,
"fall_of_wickets": [
"AM Rahane at 71 runs, in 7.2 over",
"DH Yagnik at 84 runs, in 9.3 over",
"RS Dravid at 113 runs, in 13.2 over",
"SR Watson at 159 runs, in 17.3 over"
],
"wide": 0,
"run_rate": "9.25",
"fours": 12,
"run_str": "185/4 in 20.0",
"wickets": 4,
"wicket_order": [
"a_rahane",
"d_yagnik",
"r_dravid",
"s_watson"
],
"extras": 10,
"bowling_order": [
"a_chandila",
"r_shukla",
"j_faulkner",
"k_cooper",
"s_trivedi",
"s_watson",
"s_binny"
],
"key": "b_1",
"noball": 0,
"sixes": 7,
"legbye": 0,
"bye": 0,
"overs": "20.0",
"dotballs": 30,
"partnerships": [
{
"player_a_six": 3,
"player_a_four": 5,
"first_ball": "bfee9a98-76a9-4959-b1cb-638989c96bff",
"overs_balls": "7.1",
"four": 6,
"index": 1,
"six": 3,
"dismissed": false,
"player_b_four": 1,
"start_over": "0.1",
"end_over": "7.1",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 0,
"player_b_balls": 14,
"runs": 71,
"balls": 43,
"player_b": "a_rahane",
"player_a": "s_watson",
"player_a_balls": 29,
"last_ball": "4825aad2-25d8-434c-86bb-11f8eedbdc4f",
"player_a_runs": 54,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.91"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "c7351d98-9012-4361-ba2a-f5cd8665587d",
"overs_balls": "2.1",
"four": 1,
"index": 2,
"six": 0,
"dismissed": true,
"player_b_four": 0,
"start_over": "7.2",
"end_over": "9.2",
"innings": "1",
"player_b_runs": 4,
"player_b_six": 0,
"player_b_balls": 5,
"runs": 13,
"balls": 13,
"player_b": "s_watson",
"player_a": "a_rahane",
"player_a_balls": 1,
"last_ball": "c4134225-b057-4a43-9e0f-cd227b377540",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "6.00"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "17d6fc7f-d37e-45ee-9b0a-aaf15221d8c4",
"overs_balls": "3.5",
"four": 1,
"index": 3,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "9.3",
"end_over": "13.1",
"innings": "1",
"player_b_runs": 21,
"player_b_six": 1,
"player_b_balls": 14,
"runs": 29,
"balls": 23,
"player_b": "s_watson",
"player_a": "d_yagnik",
"player_a_balls": 1,
"last_ball": "cf9137bb-9fd7-49c1-9fdc-3e5c8492ee3b",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "7.57"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "0ea39992-7647-4916-bfcc-b2beba9dbf00",
"overs_balls": "4.1",
"four": 2,
"index": 4,
"six": 2,
"dismissed": true,
"player_b_four": 0,
"start_over": "13.2",
"end_over": "17.2",
"innings": "1",
"player_b_runs": 22,
"player_b_six": 2,
"player_b_balls": 12,
"runs": 46,
"balls": 25,
"player_b": "s_watson",
"player_a": "r_dravid",
"player_a_balls": 1,
"last_ball": "2eaaa026-485f-493c-9a70-551abc2bb83c",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "11.04"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "4720b7ff-e963-4bc8-9138-6124c2b261fc",
"overs_balls": "2.4",
"four": 2,
"index": 5,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "17.3",
"end_over": "19.6",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 1,
"player_b_balls": 9,
"runs": 26,
"balls": 16,
"player_b": "s_binny",
"player_a": "s_watson",
"player_a_balls": 1,
"last_ball": "76481b09-e7e4-4097-9e88-b6884f069082",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.75"
}
]
}
}
}
}
}
Above json file is incomplete i post only which i need to solve this post.
I want to get the batting_order inside the innings->b_1->batting order
I already done to get the batting_order data but it set only on single row of listview.
How can i set single name into single row of listview?? E.g. s_watson in first row, a_rahane in second row and so on
Upvotes: 3
Views: 102
Reputation: 5045
If you are using Score model classs other thn this adapter thn i will suggest you not to change Model class but if you just wants to display list of batting order only thn make changes in BaseAdapter. here i have changed from List to List if you wants to display only batting order list
public class FullScoreAdapter extends BaseAdapter {
private static final int TYPES_COUNT = 2;
private static final int TYPE_LEFT = 0;
private static final int TYPE_RIGHT = 1;
private Context context;
private List<String> items, lst;
private int length;
int size = 0;
private static LayoutInflater inflater;
public FullScoreAdapter(Context context, List<String> items, int length) {
this.context = context;
this.items = items;
if (items != null && !items.isEmpty()) {
size = items.length();
}
this.length = length;
}
@Override
public int getCount() {
return size;
}
@Override
public String getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder {
TextView txtname;
TextView txtballs;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder = null;
final View view;
if (convertView == null) {
holder = new Holder();
convertView =LayoutInflater.from(this.context).inflate(R.layout.list_rows, parent,false);
holder.txtname = (TextView) convertView.findViewById(R.id.txtName);
holder.txtballs = (TextView) convertView.findViewById(R.id.txtBalls);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
//check answer for baseadapter
//http://stackoverflow.com/a/34349311/1140237
}
//Score score = items.get(position);
String batting = "";
holder.txtname.setText(this.items.get(position));
return convertView;
}
}
Change in onPostExecute
protected void onPostExecute(JSONObject jsonObject) {
dialog.dismiss();
try {
JSONObject mainObject = new JSONObject(jsonObject.toString());
String status = mainObject.getString("status");
String version = mainObject.getString("version");
String status_code = mainObject.getString("status_code");
String Etag = mainObject.getString("Etag");
String cache_key = mainObject.getString("cache_key");
JSONObject dataObject = mainObject.getJSONObject("data");
JSONObject cardObject = dataObject.getJSONObject("card");
JSONObject innings = cardObject.getJSONObject("innings");
JSONObject b_1=innings.getJSONObject("b_1");
JSONArray batting_order=b_1.getJSONArray("batting_order");
int length=batting_order.length();
ArrayList<String> p_name=new ArrayList<String>();
Score s=new Score();
//for(int j=0;j<length;j++) {
for (int i = 0; i < batting_order.length(); i++) {
p_name.add(batting_order.getString(i));
}
//p_name.add(batting_order.getString(j));
//}
s.setPlayernames(p_name);
list.add(s);
lst=(ListView)rootView.findViewById(R.id.listview);
adapter=new FullScoreAdapter(getContext(),p_name,length);
lst.setAdapter(adapter);
}
catch (JSONException e){
e.printStackTrace();
}
}
Upvotes: 1
Reputation: 2812
I think this is mistake in your code
JSONArray batting_order=b_1.getJSONArray("batting_order");
int length=batting_order.length();
ArrayList<String> p_name=new ArrayList<String>();
Score s=new Score();
for(int j=0;j<length;j++) {
p_name.add(batting_order.getString(j));
}
s.setPlayernames(p_name);
list.add(s);
YOur Score class ::
public class Score {
private String playernames;
private String target;
public String getPlayernames() {
return playernames;
}
public void setPlayernames(String playernames) {
this.playernames = playernames;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
}
Upvotes: 0