-1

I am fairly new to android and java. I am trying to add JSON data to a listview. I have the JSON data coming in and printing to log, but I am having a hard time getting the data to the list view. I've tried and arraylist on row numbers and it works, but don't know how to get the JSON data there. Any pointers or advice would be appericated.

I am looking for a result Like

(Keys)ID Name Tourn_ID (Values) 1 Tournamnet1 MI2016 (Values) 2 Tournamnet2 UT2016 (Values) 3 Tournamnet4 USNC2016 etc.

Here is my code Java.

    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;

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

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import static android.R.*;
import static android.R.layout.simple_list_item_1;
import static java.util.Arrays.asList;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DownloadTask task = new DownloadTask();
        task.execute("http://www.goalballscoreboard.net/mobile/downloads/WebServices/Tournnames/Tournnames.php?rows=all");

        ListView tournListView = (ListView) findViewById(R.id.tournListView);
        final ArrayList<String> myTournList = new ArrayList<String>(asList("ROW 1", "ROW 2", "Row3"));
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, simple_list_item_1, myTournList);
        tournListView.setAdapter(arrayAdapter);

    }

    public class DownloadTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {

            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(urls[0]);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader reader = new InputStreamReader(in);

                int data = reader.read();

                while (data != -1) {

                    char current = (char) data;

                    result += current;

                    data = reader.read();

                }

                return result;

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            try {
                JSONObject jsonObject = new JSONObject(result);

                String tournInfo = jsonObject.getString("posts");

                Log.i("Tourn INFO", tournInfo);

                JSONArray arr = new JSONArray(tournInfo);

                List<String> list = new ArrayList<String>();

                for (int i = 0; i < arr.length(); i++) {


                    JSONObject jsonPart = arr.getJSONObject(i);

                    JSONObject jsonObjectPost = jsonPart.getJSONObject("post");

                    //Log.i("Each Tournament Object", jsonPart.getString("post"));
                    Log.i("ID", jsonObjectPost.getString("ID"));
                    Log.i("Name of Tournament", jsonObjectPost.getString("NAME"));
                    Log.i("TOURN_ID", jsonObjectPost.getString("TOURN_ID"));

                    String id = jsonObjectPost.get("ID").toString();
                    String name = jsonObjectPost.get("NAME").toString();
                    String tournID = jsonObjectPost.get("TOURN_ID").toString();
                    list.add(jsonObjectPost.getString("ID") + ", " + jsonObjectPost.getString("NAME") + "," + jsonObjectPost.getString("TOURN_ID") + "\n");
                }

                System.out.println("" + list.toString());


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

    }
}
  • Post a sample of the JSON you're parsing and your adapter class. – AL. May 12 '16 at 01:21
  • 1
    Possible duplicate of [JSON Android ListView](http://stackoverflow.com/questions/11318761/json-android-listview) – Andre Classen May 12 '16 at 01:35
  • {"posts":[ {"post":{"ID":"74", "TOURN_ID":"999", "YEAR":"2016", "START_DATE":"2016-09-07", "END_DATE":"2016-09-18", "DATE_STRING":"September 7th - 18th 2016", "NAME":"2016 Paralympic Games", "ShortName":"2016 Paralympic Games", "TOURN_TYPE":"International"}}, {"post":{"ID":"73", "TOURN_ID":"999", "YEAR":"2016", "START_DATE":"2016-06-23", "END_DATE":"2016-06-25", "DATE_STRING":"June 22nd - 23rd 2016", "NAME":"2016 USABA National Goalball Championships", "ShortName":"2016 US Nationals", "TOURN_TYPE":"Domestic"}}, ]} – Tornado973 May 12 '16 at 01:38

1 Answers1

1

Create a JAVA file named Model.java

public class Model {
    public String ID ;
    public String Name;
    public Tourn_ID;
}

Now at the time of parsing data

ArrayList<Model> modelArrayList = new ArrayList();
for (int i = 0; i < arr.length(); i++) {


                    JSONObject jsonPart = arr.getJSONObject(i);

                    JSONObject jsonObjectPost = jsonPart.getJSONObject("post");

                   Model model;
                    model.ID = jsonObjectPost.get("ID").toString();
                    model.Name = jsonObjectPost.get("NAME").toString();
                    Model.Tourn_ID = jsonObjectPost.get("TOURN_ID").toString();
                    modelArrayList .add(model);
                }

Adapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class CustomAdapter extends BaseAdapter{   
    ArrayList<Model> result = new ArrayList();
    Context context;
 int [] imageId;
      private static LayoutInflater inflater=null;
    public CustomAdapter(Context context, ArrayList<Model> result) {
        // TODO Auto-generated constructor stub
        this.result=result;
        this.context=context;
         inflater = ( LayoutInflater )context.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.size;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class Holder
    {
        TextView tv,tv2,tv3;

    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;       
             rowView = inflater.inflate(R.layout.custom_adapter, null);
             holder.tv=(TextView) rowView.findViewById(R.id.textView1);
             holder.tv2=(TextView) rowView.findViewById(R.id.textView2);    
              holder.tv3=(TextView) rowView.findViewById(R.id.textView3);       
         holder.tv.setText(result[position].ID);
          holder.tv2.setText(result[position].Name);
           holder.tv3.setText(result[position].Tour_ID);      
         rowView.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
            }
        });   
        return rowView;
    }

} 

in custom_adapter.xml

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

        <TextView
            android:id="@+id/textView1"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:text="TextView" />

<TextView
            android:id="@+id/textView2"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:text="TextView" />

<TextView
            android:id="@+id/textView3"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:text="TextView" />


    </LinearLayout> 

now listview

listview = (Listview).findViewById(R.id.idOfYpurListview);
Adapter adapter = new Adapter(Activity.this,modelArrayList);
listview.setAdapter(adapter);
Vishwesh Jainkuniya
  • 2,821
  • 3
  • 18
  • 35