JSONArray使用Android一个ListView [英] JSONArray in a ListView with Android

查看:148
本文介绍了JSONArray使用Android一个ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

urlHi我这个code,工程从PHP页面接收数据,我希望把这些数据用在列表视图。我收到的数据和我见过一个的System.out.println,但我有在ListView白行。 code:

urlHi i've this code that works receiving data from a php page and i want to put that data in a listview. I receive that data and i've seen that with a system.out.println but i have white rows in the listview. Code:

public class Utenti extends ListActivity {


ListView lv;

ListView listView;

static String temp;
    //ListAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);






    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

      StrictMode.setThreadPolicy(policy);




lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


        }
    });





      Thread t = new Thread(new Runnable (){

          public void run() {
              //Looper.prepare();
              JSONObject json =conn("ketut.php");

              try {
                  //Get the element that holds the earthquakes ( JSONArray )
                  JSONArray  ute = json.getJSONArray("success");
                  final List<HashMap<String, String>> mylist = 
                          new ArrayList<HashMap<String, String>>();
                  HashMap<String, String> map = new HashMap<String, String>();
                     for(int i=0;i < ute.length();i++){

                      JSONObject e = ute.getJSONObject(i);
                       System.out.println(e.getString("user"));



                       map.put("name",  e.getString("user"));



                       mylist.add(map);
                  }

                     runOnUiThread(new Runnable() {


                         public void run() {

                          ListAdapter adapter = new SimpleAdapter(Utenti.this, mylist , R.layout.utentii,new String[] { "name" },new int[] { 1});
                          Utenti.this.setListAdapter(adapter);
                          }

                      });

              } catch (JSONException e) {
                  System.out.println("4");
                  e.printStackTrace();
              }

          }
      });
              t.start();
        //  t.start();  







}


public  static JSONObject conn(String pagina){
    HttpURLConnection connection;
    OutputStreamWriter request = null;
    URL url = null;
    String response = null;
    JSONObject jArray = null;


    try
        {
            url = new URL("url"+pagina);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestMethod("POST");


            String line = "";

            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            response = sb.toString();
            System.out.println(response);
            try{jArray=new JSONObject (response);}
            catch(JSONException e){}

            isr.close();
            reader.close(); 
        }
        catch(IOException e)
        {
            Log.i("NetworkTest","Network Error: " + e);
        }
    return jArray;
}}

utentii.xml

utentii.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="20sp" >

推荐答案

没有。因为你要叫 setListAdapter runOnUiThread()是必要的。

no. runOnUiThread() is necessary because you want to call setListAdapter.

一次。 -
在这两个行

again. - move these two lines

ListAdapter adapter = new SimpleAdapter(Utenti.this, mylist , R.layout.utentii,new String[] { "name" },new int[] { 1});
setListAdapter(adapter);

就在的onClick()方法为(){} 循环之后。

如果你确定你的 MYLIST 列表中填充在你的JSON呼叫数据。

if you are sure that your mylist list is populated with data in your json call.

基本上是这样的一个样本:

basically something like this as a sample:

替换为以下XML文件的内容:

replace your xml file contents with the following:

的test.xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /> 

为ListView行

for rows of the ListView

row.xml

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/textView" android:layout_gravity="center"/>
</LinearLayout>

那么的onCreate():

then the onCreate():

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy);

        ListView lv = getListView();
        populateListView();

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                populateListView();
            }
        });

    }

    private void populateListView(){

        Thread t = new Thread(new Runnable (){

            public void run() {

                JSONObject json = getUserObject("http://myhost:8080/login/email");
                Log.i("json",json.toString());

                try {
                    //Get the element that holds the earthquakes ( JSONArray )
                    JSONArray friends = json.getJSONObject("user").getJSONArray("friends");

                    final List<Map<String, String>> mylist =
                            new ArrayList<Map<String, String>>();

                    //get list of friend ids in the user object
                    for(int i=0;i < friends.length();i++){
                        Map<String,String> map = new LinkedHashMap<String, String>();
                        map.put("friendid", friends.getString(i));
                        mylist.add(map);

                    }
                    runOnUiThread(new Runnable() {
                        public void run() {
                            ListAdapter adapter = new SimpleAdapter(MyTestListActivity.this, mylist , R.layout.row,new String[] { "friendid" },new int[] {R.id.textView});
                            setListAdapter(adapter);
                        }
                    });

                } catch (JSONException e) {
                    System.out.println("4");
                    e.printStackTrace();
                }

            }
        });
        t.start();

    }

    public  static JSONObject getUserObject(String page){

        JSONObject jArray = null;

        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(page);

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("user", "test"));
            nameValuePairs.add(new BasicNameValuePair("pwd", "test"));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            String str = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
            try{
                jArray=new JSONObject (str);}
            catch(JSONException e){Log.d("error",e);}    

        }
        catch(Exception e)
        {
            Log.i("NetworkTest", "Network Error: " + e);
        }
        return jArray;
    }

希望这可以帮助升技。

hope this helps abit.

这篇关于JSONArray使用Android一个ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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