1

I am doing a simple project in which I can firstly get JSON data from my database and then display it in a listview in my andorid application. I have the first part working fine as I can see that all the JSON data is there, however only the first element in the array is being displayed in my listview. Was hoping anyone could help as I am unsure as to where I cam going wrong. Thanks

PickPlayerActivity.java

public class PickPlayerActivity extends AppCompatActivity {


String json_string;
JSONObject jsonObject;
JSONArray jsonArray;
PlayerAdapter playerAdapter;
ListView listview;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pick_player);
    listview = (ListView) findViewById(R.id.listview);
    playerAdapter = new PlayerAdapter(this, R.layout.row_layout);
    listview.setAdapter(playerAdapter);
    json_string = getIntent().getExtras().getString("json_data");

    try {
        jsonObject = new JSONObject(json_string);
        jsonArray = jsonObject.getJSONArray("server_response");
        int count = 0;
        String firstname, surname, position;

        while(count<jsonObject.length()){

            JSONObject jo = jsonArray.getJSONObject(count);

            firstname = jo.getString("firstname");
            surname = jo.getString("surname");
            position = jo.getString("position");


            Players players = new Players(firstname, surname, position);

            playerAdapter.add(players);
            count ++;


        }


    } catch (JSONException e) {
        e.printStackTrace();
    }


}
}

activity_pick_player.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="testproject.PickPlayerActivity">


<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listview"

    />

row_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="75dp">


<TextView

    android:layout_height="match_parent"
    android:layout_width="120dp"
    android:id="@+id/tx_firstname"
    android:layout_alignParentLeft="true"
    android:text="firstname"
    android:gravity="center"
    android:textAppearance="?android:textAppearanceLarge">

</TextView>

<TextView

    android:layout_height="match_parent"
    android:layout_width="120dp"
    android:id="@+id/tx_lastname"
    android:layout_toRightOf="@+id/tx_firstname"
    android:text="surname"
    android:gravity="center"
    android:textAppearance="?android:textAppearanceLarge">

</TextView>

<TextView

    android:layout_height="match_parent"
    android:layout_width="120dp"
    android:id="@+id/tx_position"
    android:layout_toRightOf="@+id/tx_lastname"
    android:text="position"
    android:gravity="center"
    android:textAppearance="?android:textAppearanceLarge">

</TextView>

players.java

public class Players {

private String position, firstname, lastname;

public Players(String firstname, String lastname, String position){

    this.setFirstname(firstname);
    this.setLastname(lastname);
    this.setPosition(position);

}

public String getFirstname(){
    return firstname;
}

public void setFirstname(String firstname)
{
    this.firstname = firstname;
}


public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public String getPosition() {
    return position;
}

public void setPosition(String position) {
    this.position = position;
}
}

PlayerAdapter.java

public class PlayerAdapter extends ArrayAdapter {

List list = new ArrayList();

public PlayerAdapter(Context context, int resource){
    super(context, resource);

}


public void add(Players object) {
    super.add(object);
    list.add(object);
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row;
    row = convertView;
    PlayerHolder playerHolder;
    if (row==null){
        LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.row_layout,parent,false);
        playerHolder = new PlayerHolder();
        playerHolder.tx_firstname = (TextView) row.findViewById(R.id.tx_firstname);
        playerHolder.tx_lastname = (TextView) row.findViewById(R.id.tx_lastname);
        playerHolder.tx_position = (TextView) row.findViewById(R.id.tx_position);
        row.setTag(playerHolder);

    }
    else{
        playerHolder = (PlayerHolder) row.getTag();


    }
    Players players = (Players) this.getItem(position);
    playerHolder.tx_firstname.setText(players.getFirstname());
    playerHolder.tx_lastname.setText(players.getLastname());
    playerHolder.tx_position.setText(players.getPosition());

    return row;
}


class PlayerHolder{

    TextView tx_firstname, tx_lastname, tx_position;

}

}

1 Answer 1

1

Try changing this line from

while(count<jsonObject.length())

to

while(count<jsonArray.length())

Since you are looping over the length of jsonObject, if the object contains a single array, its length will be 1. It looks like you actually want to loop over the length of that array itself and not the length of the object.

Sign up to request clarification or add additional context in comments.

1 Comment

Perfect! Thank you so much!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.