简体   繁体   English

JSON - 帮助将 JSONArray 转换为 Arraylist 并填充列表视图。

[英]JSON - Help Converting JSONArray to Arraylist and populate a listview.

I am fairly new to android and java.我对android和java相当陌生。 I am trying to add JSON data to a listview.我正在尝试将 JSON 数据添加到列表视图。 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.我有 JSON 数据进入并打印到日志,但我很难将数据获取到列表视图。 I've tried and arraylist on row numbers and it works, but don't know how to get the JSON data there.我已经尝试在行号上使用 arraylist 并且它有效,但不知道如何在那里获取 JSON 数据。 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. (Keys)ID Name Tourn_ID (Values) 1 Tournamnet1 MI2016 (Values) 2 Tournamnet2 UT2016 (Values) 3 Tournamnet4 USNC2016 etc.

Here is my code Java.这是我的代码 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();
            }
        }

    }
}

Create a JAVA file named Model.java创建一个名为Model.java的 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适配器.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.xmlcustom_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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM