我正在获取光标并将其转换为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; //!!!!!!
}
答案 0 :(得分:0)
如果你检查cursor.getString(i)为null,请考虑首先使用cursor.getType(),以便处理所有类型。
除非您需要连接表(通过在SQL查询中使用JOIN表达式),否则您应该为每个表单独调用database.rawQuery。
答案 1 :(得分:0)
如果我理解正确的话。您想要查询5个表并希望将所有表放在一个JSONArray中。 两件事: -
如果表之间存在任何关系,那么您可以在sql语句中使用join,它将从表中获取数据。现在使用光标以JSON格式填充它
如果没有关系,那么您必须单独查询它们。 5个游标将在那里查询5个表。将每个光标逐个推入JSONObject。将JSONObject声明为全局以维护状态。或者您可以使用Bundle或Sharedpref
希望这会对你有所帮助