无法从mysql将数据加载到listview中

时间:2014-03-20 07:44:39

标签: php android mysql listview

我正在尝试将数据从mysql加载到列表视图中但不能这样做。我运行这段代码,模拟器上没有显示任何内容,几秒钟后应用程序崩溃。请建议我出错的地方。这是MainActivity.java文件

    package com.example.student;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

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

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    public class MainActivity extends Activity {
    TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    StrictMode.ThreadPolicy policy = new  StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

       connect();
   }
     private void connect() {
      String data;
       List<String> r = new ArrayList<String>();
      ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(),  android.R.layout.simple_list_item_1,r);
     ListView list=(ListView)findViewById(R.id.listView1);
     try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet("http://10.10.6.124/android/insert.php");
        HttpResponse response = client.execute(request);
        HttpEntity entity=response.getEntity();
        data=EntityUtils.toString(entity);
        Log.e("STRING", data);
        try {

     JSONArray json=new JSONArray(data);
        for(int i=0;i<json.length(); i++)
      {
          JSONObject obj=json.getJSONObject(i);
          String name=obj.getString("name");
          String year=obj.getString("year");
          String age=obj.getString("age");
          Log.e("STRING", name);
          r.add(name);
          r.add(year);
          r.add(age);
          list.setAdapter(adapter);

            }

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

         } catch (ClientProtocolException e) {
               Log.d("HTTPCLIENT", e.getLocalizedMessage());
          } catch (IOException e) {
              Log.d("HTTPCLIENT", e.getLocalizedMessage());
            }


         }
      }

这是PHP文件index.php

    <?php
     header('Content-type: application/json');
     mysql_connect("127.0.0.1","root","");
     mysql_select_db("student");
     $sql=mysql_query("select * from student");
     while($row=mysql_fetch_assoc($sql))
     $output[]=$row;
     json_encode($output);
     print(json_encode($output));
     mysql_close();
     ?>

1 个答案:

答案 0 :(得分:0)

在你的connect方法中,你正在用空字符串列表初始化适配器数组。

正确的代码是:

package com.example.student;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    public class MainActivity extends Activity {
    TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    StrictMode.ThreadPolicy policy = new  StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
       connect();
   }
     private void connect() {
      String data;
       List<String> r = new ArrayList<String>();
      ArrayAdapter<String> adapter;
     ListView list=(ListView)findViewById(R.id.listView1);
     try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet("yourdomain/android/insert.php");
        HttpResponse response = client.execute(request);
        HttpEntity entity=response.getEntity();
        data=EntityUtils.toString(entity);
        Log.e("STRING", data);
        try {
     JSONArray json=new JSONArray(data);
        for(int i=0;i<json.length(); i++)
      {
          JSONObject obj=json.getJSONObject(i);
          String name=obj.getString("name");
          String year=obj.getString("year");
          String age=obj.getString("age");
          Log.e("STRING", name);
          r.add(name);
          r.add(year);
          r.add(age);

            }
adapter=new ArrayAdapter<String>(getApplicationContext(),     android.R.layout.simple_list_item_1,r);
          list.setAdapter(adapter);
        } catch (JSONException e) {
           // TODO Auto-generated catch block
      e.printStackTrace();
         }
         } catch (ClientProtocolException e) {
               Log.d("HTTPCLIENT", e.getLocalizedMessage());
          } catch (IOException e) {
              Log.d("HTTPCLIENT", e.getLocalizedMessage());
            }
         }
      }