从这个链接到Android列表视图填充JSON [英] Populating JSON from this link to android Listview

查看:165
本文介绍了从这个链接到Android列表视图填充JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

JsonURL - <$c$c>https://dl.dropboxusercontent.com/s/rhk01nqlyj5gixl/jsonparsing.txt?token_hash=AAHpfauVxJaC9Rkx_5abNtJnPFG04os7TZky1AhOuC5jEw

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listViewID"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:layout_gravity="center">
    </ListView>

</LinearLayout>


JSONParser.java

package com.example.testjson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

    static InputStream is = null;
    static JSONArray jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONArray getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONArray(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}


row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dip"
        android:maxLines="1"
        android:text="Name"
        android:textColor="@android:color/black"
        android:textSize="14dp"
        android:textStyle="bold" >
    </TextView>

    <TextView
        android:id="@+id/tvcity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvname"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="3dip"
        android:maxLines="1"
        android:text="City"
        android:textColor="@android:color/black"
        android:textSize="14dp" >
    </TextView>

    <TextView
        android:id="@+id/tvbdate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvcity"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="3dip"
        android:maxLines="1"
        android:text="Birthdate"
        android:textColor="@android:color/black"
        android:textSize="14dp" >
    </TextView>

    <TextView
        android:id="@+id/tvgender"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="15dip"
        android:maxLines="1"
        android:text="Gender"
        android:textColor="@android:color/black"
        android:textSize="14dp"
        android:textStyle="bold" >
    </TextView>

    <TextView
        android:id="@+id/tvage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/tvgender"
        android:layout_marginRight="15dip"
        android:layout_marginTop="3dip"
        android:maxLines="1"
        android:text="Age"
        android:textColor="@android:color/black"
        android:textSize="14dp" >
    </TextView>

</RelativeLayout>


MainActivity.java

package com.example.testjson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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

import android.os.Bundle;
import android.app.Activity;
import android.text.StaticLayout;
import android.view.Menu;

public class MainActivity extends Activity {

    private static String url="https://www.dropbox.com/s/rhk01nqlyj5gixl/jsonparsing.txt?dl=1";

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

        //Create a JSON parser Instance ----- Used JSON parser from Android
        JSONParser jParser=new JSONParser();

        //Getting JSON string from URL ------ Used JSON Array from Android
        JSONArray json=jParser.getJSONFromUrl(url);

        try {
            for(int i=0;i<json.length();i++)
            {
                JSONObject c=json.getJSONObject(i);// Used JSON Object from Android

                //Storing each Json in a string variable
                int AGE=c.getInt("age");
                String NAME=c.getString("name");
                String CITY=c.getString("city");
                String GENDER=c.getString("Gender");
                String BIRTHDATE=c.getString("birthdate");



            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}

  • 我想从JSON数据填充到ListView中,一些 含糊不清的填充 MainActivity.java
  • 要使用此功能集合了什么?
  • 在任何想法,这看起来简单的任务,但对于像我这样的初学者的 给予了很多的斗争中去学习
    • I am trying to populate the data from the JSON to listView, some ambiguity on filling MainActivity.java
    • what collection to use for this functionality ?
    • Any ideas, This looks a simple task but for a beginner like me its giving a lot of fight to learn
    • 谢谢,

      推荐答案

      继续你的类:

      public class MainActivity extends Activity {
      
          private static String url="https://www.dropbox.com/s/rhk01nqlyj5gixl/jsonparsing.txt?dl=1";
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              //Create a JSON parser Instance ----- Used JSON parser from Android
              JSONParser jParser=new JSONParser();
      
              //Getting JSON string from URL ------ Used JSON Array from Android
              JSONArray json=jParser.getJSONFromUrl(url);
      
              List<WhateverObject> yourData = new ArrayList<WhateverObject>();
      
              try {
                  for(int i=0;i<json.length();i++)
                  {
                      JSONObject c=json.getJSONObject(i);// Used JSON Object from Android
      
                      //Storing each Json in a string variable
                      int AGE=c.getInt("age");
                      String NAME=c.getString("name");
                      String CITY=c.getString("city");
                      String GENDER=c.getString("Gender");
                      String BIRTHDATE=c.getString("birthdate");
      
      
                      yourData.add(new WhateverObject(NAME, CITY, GENDER, BIRTHDATE));
      
                  }
              } catch (JSONException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
      
              ListView yourListView = (ListView) findViewById(R.id.itemListView);
      
              ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, yourData);
      
              yourListView.setAdapter(customAdapter);
      
          }
      
      
      }
      

      adater:

      adater:

      public class ListAdapter extends ArrayAdapter<Item> {
      
          public ListAdapter(Context context, int textViewResourceId) {
              super(context, textViewResourceId);
              // TODO Auto-generated constructor stub
          }
      
          private List<Item> items;
      
          public ListAdapter(Context context, int resource, List<Item> items) {
      
              super(context, resource, items);
      
              this.items = items;
          }
      
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
      
              View v = convertView;
      
              TextView tt = null;
              TextView tt1 = null;
              TextView tt2 = null;
              TextView tt3 = null;
              TextView tt4 = null;
      
              if (v == null) {
      
                  LayoutInflater vi;
                  vi = LayoutInflater.from(getContext());
                  v = vi.inflate(R.layout.itemlistrow, null);
      
                  tt = (TextView) v.findViewById(R.id.age);
                  tt1 = (TextView) v.findViewById(R.id.name);
                  tt2 = (TextView) v.findViewById(R.id.city);
                  tt3 = (TextView) v.findViewById(R.id.gender);
                  tt4 = (TextView) v.findViewById(R.id.birthdate);
              }
      
              Item p = items.get(position);
      
              if (p != null) {
      
                  if (tt != null) {
                      tt.setText(""+p.getAge());
                  }
                  if (tt1 != null) {
      
                      tt1.setText(""+p.getName());
                  }
                  if (tt2 != null) {
      
                      tt2.setText(""+p.getCity());
                  }
      
                  if (tt3 != null) {
      
                      tt3.setText(""+p.getGender());
                  }
      
                  if (tt4 != null) {
      
                      tt4.setText(""+p.getBirthdate());
                  }
              }
      
      
      
              return v;
      
          }
      }
      

      对象保存数据:

      object holding data:

      public class WhateverObject{
          private int age;
          private String name;
          private String city;
          private String gender;
          private String birthdate;        
      
          public WhateverObject(int age, String name, String city, String gender, String birthdate){
              this.age = age;
              this.name = name;
              this.city = city;
              this.gender = gender;
              this.birthdate = birthdate;
          }
      
          public int getAge(){
              return this.age;
          }
      
          public String getName(){
              return this.name;
          }
      
          public String getCity(){
              return this.city;
          }
      
          public String getGender(){
              return this.gender;
          }
      
          public String getBirthdate(){
              return this.birthdate;
          }
      }
      

      XML为列表视图项(保存在 itemlistrow 名):

      <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
                   android:layout_height="wrap_content" android:orientation="vertical"
                   android:layout_width="fill_parent">
      
          <TableRow android:layout_width="fill_parent"
                    android:id="@+id/TableRow01"
                    android:layout_height="wrap_content">
      
              <TextView
                      android:id="@+id/age"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="age" android:textStyle="bold"
                      android:gravity="left"
                      android:layout_weight="1"
                      android:typeface="monospace"
                      android:height="40sp"/>
          </TableRow>
      
          <TableRow android:layout_height="wrap_content"
                    android:layout_width="fill_parent">
      
              <TextView
                      android:id="@+id/name"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="name"
                      android:layout_weight="1"
                      android:height="20sp"/>
          </TableRow>
      
          <TableRow android:layout_height="wrap_content"
                    android:layout_width="fill_parent">
      
              <TextView
                      android:id="@+id/city"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="city"
                      android:layout_weight="1"
                      android:height="20sp"/>
          </TableRow>
      
          <TableRow android:layout_height="wrap_content"
                    android:layout_width="fill_parent">
      
              <TextView
                      android:id="@+id/gender"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="city"
                      android:layout_weight="1"
                      android:height="20sp"/>
          </TableRow>
      
          <TableRow android:layout_height="wrap_content"
                    android:layout_width="fill_parent">
      
              <TextView
                      android:id="@+id/birthdate"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="city"
                      android:layout_weight="1"
                      android:height="20sp"/>
          </TableRow>
      
      </TableLayout>
      

      http://stackoverflow.com/a/8166802/1276374

      重复使用的元素


      简单的例子:

      Simpler example:

      public class MainActivity extends Activity {
      
          private static String url="https://www.dropbox.com/s/rhk01nqlyj5gixl/jsonparsing.txt?dl=1";
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              //Create a JSON parser Instance ----- Used JSON parser from Android
              JSONParser jParser=new JSONParser();
      
              //Getting JSON string from URL ------ Used JSON Array from Android
              JSONArray json=jParser.getJSONFromUrl(url);
      
              List<Map<String, String>> personList = new ArrayList<Map<String,String>>();
      
              try {
                  for(int i=0;i<json.length();i++)
                  {
                      JSONObject c=json.getJSONObject(i);// Used JSON Object from Android
      
                      //Storing each Json in a string variable
                      int AGE=c.getInt("age");
                      String NAME=c.getString("name");
                      String CITY=c.getString("city");
                      String GENDER=c.getString("Gender");
                      String BIRTHDATE=c.getString("birthdate");
      
      
                      personList.add(createPerson(AGE, NAME, CITY, GENDER, BIRTHDATE));
      
                  }
              } catch (JSONException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
      
              ListView yourListView = (ListView) findViewById(R.id.itemListView);
      
              simpleAdpt = new SimpleAdapter(this, personList, android.R.layout.simple_list_item_1, new String[] {"person"}, new int[] {android.R.id.text1});
      
              yourListView.setAdapter(simpleAdpt);
      
          }
      
          private HashMap<String, String> createPerson(int age, String name, String city, String gender, String birthdate) {
              HashMap<String, String> person = new HashMap<String, String>();
              person.put("person", name+" | "+age + " | "+city + " | "+gender + " | "+birthdate);
              return person;
          }
      
      
      
      }
      

      感谢的http://www.java$c$cgeeks.com/2013/06/android-listview-tutorial-and-basic-example.html

      这篇关于从这个链接到Android列表视图填充JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆