2014-07-03 35 views
1

我得到的光標並將其轉換爲JSONArray(不知道如果我正確地做它的方式) 但即時通訊只爲一個表做任務。我有5張桌子。我可以爲所有5個表執行一次遊標並將它們打包在一個JSONOBject {{「tasks」,JSONArray},{「projects」,JSONArray} ....}等等。 我應該用什麼sql語句來做到這一點。我不想有很多類似的代碼。光標到JSONObject

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; //!!!!!! 
    } 
+0

要整個光標轉換成JSON,爲什麼呢? – pskink

+0

我想我的代碼看起來很漂亮 –

+0

對不起,我不明白 – pskink

回答

0

你在哪裏檢查cursor.getString(i)爲空,首先考慮使用cursor.getType(),這樣你可以處理所有類型。

除非您需要連接表(通過在SQL查詢中使用JOIN表達式),否則應該對每個表單獨調用database.rawQuery。

0

如果我理解它是正確的。你想查詢5個表,並且想把它們放在一個JSONArray中。 兩件事情: -

  1. 如果表之間的任何關係,那麼你可以使用加入你的SQL語句,它會從表中獲取數據。現在使用光標以JSON格式填充它

  2. 如果沒有關係,則必須單獨查詢它們。 5個遊標將在那裏查詢5個表格。將每個光標逐一推送到JSONObject中。聲明JSONObject爲全局狀態以維護狀態。或者你也可以使用捆綁或Sharedpref

希望這將幫助你在本地保存