游标到JSONObject

时间:2014-07-03 09:38:47

标签: android json cursor

我正在获取光标并将其转换为JSONArray(如果我正确的话,还不知道) 但我只做一个表任务。我有5张桌子。我可以为所有5个表执行一个游标并将它们打包在一个JSONOBject {{“tasks”,JSONArray},{“projects”,JSONArray} ....}等等。 我应该使用什么sql语句来做到这一点。我不想有很多类似的代码。

private JSONObject sendUserData(){
        // Building Parameters
        // getting JSON Object
        JSONArray jsonArrayTasks=null;
        Cursor cursorTasks=getAllTasks();
        int count=cursorTasks.getCount();
        if (count>0){
        jsonArrayTasks=getJSONFromCursor(cursorTasks);
        }
        cursorTasks.close();

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", send_tag));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("tasks", jsonArrayTasks.toString()));
        JSONObject json = getJsonFromURL.getJSONFromUrl(registerURL, params);
        Log.i("json", json.toString());
        return json;
    }

    private JSONArray getJSONFromCursor(Cursor cursor){
        JSONArray resultSet     = new JSONArray();
        JSONObject returnObj    = new JSONObject();

        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {

            int totalColumn = cursor.getColumnCount();
            JSONObject rowObject = new JSONObject();

            for( int i=0 ;  i< totalColumn ; i++ )
            {
                if( cursor.getColumnName(i) != null )
                {
                    try
                    {
                        if( cursor.getString(i) != null )
                        {
                            Log.d("TAG_NAME", cursor.getString(i) );
                            rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                        }
                        else
                        {
                            rowObject.put( cursor.getColumnName(i) ,  "" );
                        }
                    }
                    catch( Exception e )
                    {
                        Log.d("TAG_NAME", e.getMessage()  );
                    }
                }

            }

            resultSet.put(rowObject);
            cursor.moveToNext();
        }

        cursor.close();
        return resultSet;
    }

    private Cursor getAllTasks() {
        //     return database.rawQuery("SELECT * FROM "+ TABLE_TASKS_NAME +" WHERE "+KEY_CATEGORY +" = " + categoryID,null);
        database=dbOpenHelper.getReadableDatabase();
        String query = "SELECT * FROM " +
                TABLE_TASKS_NAME +" A "
                + "," + TABLE_TAG_NAME +" B "
                + "," + TABLE_CATEGORY_NAME+" C "
                + "," + TABLE_PROJECTS_NAME+" D "
                ;
        Log.d("Test query","Test query :"+query);
        Cursor test = database.rawQuery(query
                , null);
        return  test; //!!!!!!
    }

2 个答案:

答案 0 :(得分:0)

如果你检查cursor.getString(i)为null,请考虑首先使用cursor.getType(),以便处理所有类型。

除非您需要连接表(通过在SQL查询中使用JOIN表达式),否则您应该为每个表单独调用database.rawQuery。

答案 1 :(得分:0)

如果我理解正确的话。您想要查询5个表并希望将所有表放在一个JSONArray中。 两件事: -

  1. 如果表之间存在任何关系,那么您可以在sql语句中使用join,它将从表中获取数据。现在使用光标以JSON格式填充它

  2. 如果没有关系,那么您必须单独查询它们。 5个游标将在那里查询5个表。将每个光标逐个推入JSONObject。将JSONObject声明为全局以维护状态。或者您可以使用Bundle或Sharedpref

  3. 在本地保存它

    希望这会对你有所帮助