json-从 PHP MySQL 中检索数据然后传到视图列表中

问题描述

从 PHP MySQL 中检索数据然后传到视图列表中

我想从 PHP MySQL 中检索一个数据,然后传到试图列表中。我使用的下面的代码,但是还是没把数据放到 List View 中,如何改这个问题。
贴出我的代码,大家看看是哪儿出错了。
Activity Codes

public class View extends Activity{
    // Progress Dialog
    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();
    ArrayList<HashMap<String, String>> productsList;
   // url to get all products list
    private static String url_all_products = "http://atlantis-us.com/viewFile.php";
    // JSON Node names
    private static final String TAG_NAME = "name";
    ListView lv;
    // products JSONArray
    JSONArray products = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_products);

        // Get listview
        lv = (ListView) findViewById(R.id.list);

        // Hashmap for ListView
        productsList = new ArrayList<HashMap<String, String>>();
            new LoadAllProducts().execute();
    }
    class LoadAllProducts extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
             // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
                JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
            Log.d("All Products: ", json.toString());
            ListAdapter adapter = new SimpleAdapter(
                    View.this, productsList,
                    R.layout.list_item, new String[] {
                            TAG_NAME},
                    new int[] {R.id.name });
            // updating listview
            lv.setAdapter(adapter);
            return null;
        }
    }
}

JSONParser Class

public class JSONParser {

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

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

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

            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                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 JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;
    }
}

log cat

10-26 14:57:53.673: I/Choreographer(1391): Skipped 61 frames!  The application may be doing too much work on its main thread.
10-26 14:57:54.653: D/All Products:(1391): {"products":[{"name":"Ghalia"},{"name":"yuan"},{"name":"kevin"},{"name":"kevin"},{"name":"kevin"},{"name":"Ghalia"},{"name":"Ghalia"},{"name":"dbgg"},{"name":"Ghalia"},{"name":"Ghalia"},{"name":"test"}]}
10-26 14:57:54.663: W/dalvikvm(1391): threadid=11: thread exiting with uncaught exception (group=0x40a13300)
10-26 14:57:54.684: E/AndroidRuntime(1391): FATAL EXCEPTION: AsyncTask #1
10-26 14:57:54.684: E/AndroidRuntime(1391): java.lang.RuntimeException: An error occured while executing doInBackground()
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.lang.Thread.run(Thread.java:856)
10-26 14:57:54.684: E/AndroidRuntime(1391): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4607)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.View.requestLayout(View.java:15129)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.View.requestLayout(View.java:15129)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.View.requestLayout(View.java:15129)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.View.requestLayout(View.java:15129)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.view.View.requestLayout(View.java:15129)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.widget.AbsListView.requestLayout(AbsListView.java:1928)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.widget.ListView.setAdapter(ListView.java:488)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at com.example.mysql.View$LoadAllProducts.doInBackground(View.java:74)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at com.example.mysql.View$LoadAllProducts.doInBackground(View.java:1)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-26 14:57:54.684: E/AndroidRuntime(1391):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
10-26 14:57:54.684: E/AndroidRuntime(1391):     ... 5 more

解决方案

在 doInBackground()中,你不能对任何试图直接执行更新操作,你在 doInBackground()这里出错了,所以在 onPostExecute()里面添加下面的代码:

ListAdapter adapter = new SimpleAdapter(
                    View.this, productsList,
                    R.layout.list_item, new String[] {
                            TAG_NAME},
                    new int[] {R.id.name });
            // updating listview
            lv.setAdapter(adapter);
时间: 2024-11-17 12:39:47

json-从 PHP MySQL 中检索数据然后传到视图列表中的相关文章

从MySQL数据库表中检索数据

在<用MySQL创建数据库和数据库表>文章中,我们如何创建一个数据库和数据库表,并知道如何向数 据库表中添加记录. 那么我们如何从数据库表中检索数据呢? 1.从数据库表中检索信息 实际上,前面我们已经用到了SELECT语句,它用来从数据库表中检索信息. select语句格式一般为: SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件(可选) 以前所使用的" * "表示选择所有的列.下面继续使用我们在上篇文章中创建的表 mytable. 2.查询所有数据:

从从MySQL数据库表中检索数据

  在<用MySQL创建数据库和数据库表>文章中,我们如何创建一个数据库和数据库表,并知道如何向数 据库表中添加记录. 那么我们如何从数据库表中检索数据呢? 1.从数据库表中检索信息 实际上,前面我们已经用到了SELECT语句,它用来从数据库表中检索信息. select语句格式一般为: SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件(可选) 以前所使用的" * "表示选择所有的列.下面继续使用我们在上篇文章中创建的表 mytable. 2.查询所有数据

在数据窗口中检索数据

数据 在数据窗口中检索数据 我们往往需要数据窗口仅显示我们需要的数据.在数据窗口中检索数据的方法很多,常用的是设置SetFilter和使用SQL语句来实现. 1.使用SetFilter进行数据过滤 首先需要构造条件语句.如数据窗口中有一列名为xyh,我们需要检索xyh等于"叶秋枫"的数据.那么可写语句如下: string bl;bl="xyh='叶秋枫'";dw_1.setfilter(bl)//数据窗口的名为dw_1dw_1.retrieve()//重新检索数据

mysql中将textbox中的数据修改传给datatable语句出现问题

问题描述 mysql中将textbox中的数据修改传给datatable语句出现问题 解决方案 ...->rows->default[0]->default[1]... 解决方案二: 不能直接对Rows[x][y]赋值,它是只读的,要更新或插入应该用update和insert,不能直接改

用extjs4.1的写的store中的数据加载不到textfiled中,求解啊!

问题描述 用extjs4.1的写的store中的数据加载不到textfiled中,求解啊! var store2 = Ext.create('Ext.data.Store', { model: 'Computer', remoteSort: true, proxy: { type: 'ajax', url: 'computer/FindComByRId.do', reader: { type: 'json', root: 'rcomputer' } } }); 在panel中的 items:[

truts ction-strus中 action从数据库中得到数据怎么传到对应的jsp中

问题描述 strus中 action从数据库中得到数据怎么传到对应的jsp中 public class MyAction extends BaseAction { public ActionForward flfxWaitPoject(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setCon

mongodb中插入数据的时候,一条document中 可以有相同的key吗

问题描述 mongodb中插入数据的时候,一条document中 可以有相同的key吗 如题 小弟刚开始学mongodb 求大神指教 还有,有没有推荐的mongodb的学习方法和书籍呢 解决方案 key是json对象的,同一层,只能一个,不相同 解决方案二: MongoDB权威指南中文版 - 下载频道 - CSDN.NETMongoDB权威指南中文版,

Excel中的数据如何导入到Access数据库中?

  现在大多数人记录数据都是用excel,但是一些程序员需要将Excel中的数据导入Access数据库中,编写一个另外的程序,但是对于初学者来说这还是挺艰难的,那么现在我就为大家讲解如何将Excel中的数据导入到Access数据库中. 找到自己需要做改变的Excel和Access 为了避免自己以后的,所以第一个步骤看似无关重要,但是却缺一不可.确保Excel中的数据导入数据库不要出错,不然一切白费. 新建数据库,开始执行操作 在数据库上方有一个外部数据,点击外部数据存在一个"导入Excel表格功

struct-结构体初始化问题,想要存入结构体中的数据写在了txt文件中,这样写可以实现初始化吗

问题描述 结构体初始化问题,想要存入结构体中的数据写在了txt文件中,这样写可以实现初始化吗 //定义结构体//struct achievement{int number; char name[20]; char sex; float achievement1achievement2achievement3;}tab_achievement[N]; //读出文件函数//void read() {FILE *fp;int in;if((fp=fopen(""C:UsersAdminist