Android的 - 添加列矩阵光标和显示列计数吐司导致崩溃 [英] Android - Adding Columns to Matrix Cursor and Showing Column Count Toast causing Crash

查看:237
本文介绍了Android的 - 添加列矩阵光标和显示列计数吐司导致崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用im矩阵光标行添加到游标。

在上创建在MainActivity定义的列

  //在保护无效的onCreate的String [] =列新的String [] {dealername \"product\",\"type\",\"description\",\"location\",\"sublocation\",\"address\",\"phone1\",\"phone2\",\"auth\",\"brands\",\"lat\",\"lon\"};
光标=新MatrixCursor(列);

// -----------------在asyctask doinbackground

  cursor.addRow(新的String [] {json.getString(dealername),json.getString(产品), json.getString(\"type\"),json.getString(\"description\"),json.getString(\"location\"),json.getString(\"sublocation\"),json.getString(\"address\"),json.getString(\"phone1\"),json.getString(\"phone2\"),json.getString(\"auth\"),json.getString(\"brands\"),json.getString(\"lat\"),json.getString(\"lon\")});

当我试图让光标应用程序崩溃简单列数

 保护无效onPostExecute(虚空避免){
    super.onPostExecute(避免);
    Toast.makeText(getApplicationContext(),cursor.getCount(),Toast.LENGTH_LONG).show();
}

更新:

 私有类getdealerinfo扩展的AsyncTask<太虚,太虚,MatrixCursor> {            @覆盖
            在preExecute保护无效(){
                super.on preExecute();            }
            @覆盖
            保护MatrixCursor doInBackground(无效参数... args){                / *建筑参数* /                清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
                params.add(新BasicNameValuePair(PNAME,selectedproduct));
                params.add(新BasicNameValuePair(位置,selectedlocation));                / *从URL *获取JSON字符串/
                JSONObject的JSON = jParser.makeHtt prequest(dealers_url,GET,则params);                尝试{
                    / *检查成功TAG * /
                    INT成功= json.getInt(TAG_SUCCESS);
                    如果(成功== 1){
                        JSONArray JAStuff = json.getJSONArray(TAG_STUFF);                        / **检查记录号** /
                        INT intStuff = JAStuff.length();
                        //创建数组
                        dealerdetailsarray =新的String [intStuff] [12];
                        如果(intStuff!= 0){
                             的String [] = STR1新的String [JAStuff.length()];
                             的for(int i = 0; I< JAStuff.length();我++)
                             {
                             JSON = JAStuff.getJSONObject(ⅰ);
                            // startManagingCursor(光标);
                  // dealerdetailsarray [0] [0] = json.getString(dealername);
                             cursor.addRow(新的String [] {json.getString(dealername),json.getString(产品), json.getString(\"type\"),json.getString(\"description\"),json.getString(\"location\"),json.getString(\"sublocation\"),json.getString(\"address\"),json.getString(\"phone1\"),json.getString(\"phone2\"),json.getString(\"auth\"),json.getString(\"brands\"),json.getString(\"lat\"),json.getString(\"lon\")});                             }
                             }
                    }
                }赶上(例外五){
              Log.e(测试,e.toString());
                }
                返回游标;
            }
            @覆盖
            保护无效onPostExecute(Matr​​ixCursor光标){
            // super.onPostExecute(避免);
             尝试
             {
              Toast.makeText(getApplicationContext(),cursor.getCount(),Toast.LENGTH_LONG).show();
             }
             赶上(例外五){
                  Log.e(myerror,e.getMessage());
                    }
       }
        }    }


解决方案

您需要从返回光标对象doInBackground() onPostExecute()。定义你的的AsyncTask

 类XYZTask扩展的AsyncTask<太虚,太虚,MatrixCursor> {    保护MatrixCursor doInBackground(虚空......无效){         .....
         cursor.addRow(新的String [] {json.getString(dealername),json.getString(产品), json.getString(\"type\"),json.getString(\"description\"),json.getString(\"location\"),json.getString(\"sublocation\"),json.getString(\"address\"),json.getString(\"phone1\"),json.getString(\"phone2\"),json.getString(\"auth\"),json.getString(\"brands\"),json.getString(\"lat\"),json.getString(\"lon\")});
         返回游标;
    }    保护无效onPostExecute(Matr​​ixCursor光标){
        Toast.makeText(getApplicationContext(),cursor.getCount(),Toast.LENGTH_LONG).show();
    }
}

和返回光标对象doInBackground()作为参数传递给 onPostExecute( )

编辑:

定义你的的AsyncTask 是这样的:

 私有类getdealerinfo扩展的AsyncTask<无效,无效的JSONObject> {            @覆盖
            在preExecute保护无效(){
                super.on preExecute();            }
            @覆盖
            受保护的JSONObject doInBackground(无效参数... args){                / *建筑参数* /                清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
                params.add(新BasicNameValuePair(PNAME,selectedproduct));
                params.add(新BasicNameValuePair(位置,selectedlocation));                / *从URL *获取JSON字符串/
                JSONObject的JSON = jParser.makeHtt prequest(dealers_url,GET,则params);
                返回JSON;
            }
            @覆盖
            保护无效onPostExecute(JSON的JSONObject){
            // super.onPostExecute(避免);
            MatrixCursor光标=新MatrixCursor();             尝试{
                    / *检查成功TAG * /
                    INT成功= json.getInt(TAG_SUCCESS);
                    如果(成功== 1){
                        JSONArray JAStuff = json.getJSONArray(TAG_STUFF);                        / **检查记录号** /
                        INT intStuff = JAStuff.length();
                        //创建数组
                        dealerdetailsarray =新的String [intStuff] [12];
                        如果(intStuff!= 0){
                             的String [] = STR1新的String [JAStuff.length()];
                             的for(int i = 0; I< JAStuff.length();我++)
                             {
                             JSON = JAStuff.getJSONObject(ⅰ);
                            // startManagingCursor(光标);
                  // dealerdetailsarray [0] [0] = json.getString(dealername);
                             cursor.addRow(新的String [] {json.getString(dealername),json.getString(产品), json.getString(\"type\"),json.getString(\"description\"),json.getString(\"location\"),json.getString(\"sublocation\"),json.getString(\"address\"),json.getString(\"phone1\"),json.getString(\"phone2\"),json.getString(\"auth\"),json.getString(\"brands\"),json.getString(\"lat\"),json.getString(\"lon\")});                             }
                             }
                    }
                }赶上(例外五){
              Log.e(测试,e.toString());
                }
             Toast.makeText(getApplicationContext(),cursor.getCount(),Toast.LENGTH_LONG).show();       }
        }    }

先试试这个。

Im using a matrix cursor to add rows to cursor.

Defined columns in the MainActivity on Create

//In protected void onCreate

String[] columns = new String[] { "dealername", "product","type","description","location","sublocation","address","phone1","phone2","auth","brands","lat","lon"};
cursor= new MatrixCursor(columns);

//----------------- In asyctask doinbackground

cursor.addRow(new String[] {json.getString("dealername"),json.getString("product"), json.getString("type"),json.getString("description"),json.getString("location"),json.getString("sublocation"),json.getString("address"),json.getString("phone1"),json.getString("phone2"),json.getString("auth"),json.getString("brands"),json.getString("lat"),json.getString("lon")});

When i try to get number of columns in the cursor the app simply crashes

protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    Toast.makeText(getApplicationContext(), cursor.getCount(),Toast.LENGTH_LONG).show();
}

UPDATE:

 private class getdealerinfo extends AsyncTask<Void,Void,MatrixCursor> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();

            }


            @Override
            protected  MatrixCursor doInBackground(Void... args) {

                /* Building Parameters */

                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("pname",selectedproduct));
                params.add(new BasicNameValuePair("location",selectedlocation));

                /* getting JSON string from URL */
                JSONObject json = jParser.makeHttpRequest(dealers_url, "GET", params);

                try {
                    /* Checking for SUCCESS TAG */
                    int success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        JSONArray JAStuff = json.getJSONArray(TAG_STUFF);

                        /** CHECK THE NUMBER OF RECORDS **/
                        int intStuff = JAStuff.length();
                        //creating array 
                        dealerdetailsarray =new String[intStuff][12];
                        if (intStuff != 0) {
                             String[] str1 = new String[JAStuff.length()]; 
                             for(int i=0;i<JAStuff.length();i++)
                             {
                             json=JAStuff.getJSONObject(i);
                            // startManagingCursor(cursor);
                  //         dealerdetailsarray[0][0]=json.getString("dealername");
                             cursor.addRow(new String[] {json.getString("dealername"),json.getString("product"), json.getString("type"),json.getString("description"),json.getString("location"),json.getString("sublocation"),json.getString("address"),json.getString("phone1"),json.getString("phone2"),json.getString("auth"),json.getString("brands"),json.getString("lat"),json.getString("lon")});

                             } 
                             }
                    }
                } catch (Exception e) {
              Log.e("test",e.toString());
                }
                return cursor; 
            }


            @Override
            protected void onPostExecute(MatrixCursor cursor) {
            //    super.onPostExecute(aVoid);
             try
             {
              Toast.makeText(getApplicationContext(), cursor.getCount(),Toast.LENGTH_LONG).show();
             }
             catch (Exception e) {
                  Log.e("myerror",e.getMessage());
                    } 
       }
        }

    }

解决方案

You need to return the cursor object from doInBackground() to onPostExecute(). Define your AsyncTask class as

class XYZTask extends AsyncTask<Void, Void, MatrixCursor>{

    protected MatrixCursor doInBackground(Void... void) {

         .....
         cursor.addRow(new String[] {json.getString("dealername"),json.getString("product"), json.getString("type"),json.getString("description"),json.getString("location"),json.getString("sublocation"),json.getString("address"),json.getString("phone1"),json.getString("phone2"),json.getString("auth"),json.getString("brands"),json.getString("lat"),json.getString("lon")});
         return cursor;
    }

    protected void onPostExecute(MatrixCursor cursor) {
        Toast.makeText(getApplicationContext(), cursor.getCount(),Toast.LENGTH_LONG).show();
    }


}

and return the cursor object from doInBackground() as a parameter to onPostExecute().

EDIT:

Define your AsyncTask like this:

private class getdealerinfo extends AsyncTask<Void,Void,JSONObject> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();

            }


            @Override
            protected  JSONObject doInBackground(Void... args) {

                /* Building Parameters */

                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("pname",selectedproduct));
                params.add(new BasicNameValuePair("location",selectedlocation));

                /* getting JSON string from URL */
                JSONObject json = jParser.makeHttpRequest(dealers_url, "GET", params);


                return json; 
            }


            @Override
            protected void onPostExecute(JSONObject json) {
            //    super.onPostExecute(aVoid);
            MatrixCursor cursor = new MatrixCursor();

             try {
                    /* Checking for SUCCESS TAG */
                    int success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        JSONArray JAStuff = json.getJSONArray(TAG_STUFF);

                        /** CHECK THE NUMBER OF RECORDS **/
                        int intStuff = JAStuff.length();
                        //creating array 
                        dealerdetailsarray =new String[intStuff][12];
                        if (intStuff != 0) {
                             String[] str1 = new String[JAStuff.length()]; 
                             for(int i=0;i<JAStuff.length();i++)
                             {
                             json=JAStuff.getJSONObject(i);
                            // startManagingCursor(cursor);
                  //         dealerdetailsarray[0][0]=json.getString("dealername");
                             cursor.addRow(new String[] {json.getString("dealername"),json.getString("product"), json.getString("type"),json.getString("description"),json.getString("location"),json.getString("sublocation"),json.getString("address"),json.getString("phone1"),json.getString("phone2"),json.getString("auth"),json.getString("brands"),json.getString("lat"),json.getString("lon")});

                             } 
                             }
                    }
                } catch (Exception e) {
              Log.e("test",e.toString());
                }
             Toast.makeText(getApplicationContext(), cursor.getCount(),Toast.LENGTH_LONG).show();

       }
        }

    }

Try this first.

这篇关于Android的 - 添加列矩阵光标和显示列计数吐司导致崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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