JSON - 帮助将JSONArray转换为Arraylist并填充listview。

时间:2016-05-12 01:07:19

标签: java android json listview arraylist

我对android和java相当新。我正在尝试将JSON数据添加到列表视图中。我有JSON数据进入并打印到日志,但我很难将数据导入列表视图。我在行号上尝试过arraylist并且它有效,但是不知道如何在那里获取JSON数据。任何指针或建议都会被暗示。

我正在寻找一个像

的结果

(键)ID名称Tourn_ID (值)1 Tournamnet1 MI2016 (值)2 Tournamnet2 UT2016 (值)3 Tournamnet4 USNC2016 等

这是我的代码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();
            }
        }

    }
}

1 个答案:

答案 0 :(得分:1)

创建名为Model.java

的JAVA文件
public class Model {
    public String ID ;
    public String Name;
    public Tourn_ID;
}

现在在解析数据时

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;
    }

} 
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> 

现在 listview

listview = (Listview).findViewById(R.id.idOfYpurListview);
Adapter adapter = new Adapter(Activity.this,modelArrayList);
listview.setAdapter(adapter);