SQLiteDatabase Android + parse.com

时间:2013-08-07 11:48:13

标签: android sqlite parse-platform

我想从parse.com获取数据

public void ParseQueryMap() {
         query = new ParseQuery("MyObject"); 
         query.findInBackground(new FindCallback() {
              public void done(List<ParseObject> myObject, ParseException e) {
              if (e == null) {
                  for ( int i = 0; i < myObject.size(); i++) {              
                              stranaGet = myObject.get(i).getString("Country");
                              oblastGet = myObject.get(i).getString("District");
                              gorodGet = myObject.get(i).getString("City");
                     }
              } 
}

我想把所有这些数据都放到Android数据库

DBHelper dbHelper;
 @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.main);

            dbHelper = new DBHelper(this);
            ContentValues cv = new ContentValues();
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            String name = etName.getText().toString();
            String email = etEmail.getText().toString();

            cv.put("name", name);
            cv.put("email", email);
            Cursor c = db.query("mytable", null, null, null, null, null, null);

            if (c.moveToFirst()) {


        int idColIndex = c.getColumnIndex("id");
        int nameColIndex = c.getColumnIndex("name");
        int emailColIndex = c.getColumnIndex("email");

        do {
          Log.d(LOG_TAG, "ID = " + c.getInt(idColIndex) + 
                                 ", name = " + c.getString(nameColIndex) + 
                                 ", email = " + c.getString(emailColIndex));
          } while (c.moveToNext());
        } else {
         Log.d(LOG_TAG, "0 rows");
        c.close();
        }

       dbHelper.close();

}

    class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context) {
          super(context, "myDB", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
           db.execSQL("create table mytable ("
              + "id integer primary key autoincrement," 
              + "name text,"
              + "email text" + ");");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
      }

在此示例中,数据来自EditText,但我想用parse.com填充数据库。怎么会这样? 更新:我试着喜欢这个

public void ParseQueryMap() {
             query = new ParseQuery("MyObject"); 
             query.findInBackground(new FindCallback() {
                  public void done(List<ParseObject> myObject, ParseException e) {
                  if (e == null) {
                      for ( int i = 0; i < myObject.size(); i++) {              
                                  stranaGet = myObject.get(i).getString("Country");
                                  oblastGet = myObject.get(i).getString("District");
                                  gorodGet = myObject.get(i).getString("City");
                                  cv.put("name",  stranaGet);
                                  cv.put("email", oblastGet);
                                  db.insert("mytable", null, cv);
                         }
                  } 
    }

但没有任何反应

2 个答案:

答案 0 :(得分:2)

query方法用于读取数据。

要插入数据,请使用insert方法;像这样:

db.insert("mytable", null, cv);

答案 1 :(得分:2)

有一种更好的方法。

如果您使用某些ORM engines for Android(例如OrmLite),它允许您将数据库实体映射到java-classes,则与parse.com的集成非常简单直接。实际上,当我在android中发现ORM时,我不能再没有它了。)

假设您拥有映射到某个数据库表的实体类。您可以在其字段中添加注释,以将它们映射到parse.com对应的类字段。然后你编写一个代码来处理这些注释。

但实际上,您不必再编写代码了。以下是该想法的简单实现:https://github.com/ntoskrnl/DataSync

随意贡献:)

简而言之,该库提供了将带注释的类转换为ParseObject的方法,反之亦然。它还为您提供了一种同步本地和远程数据的简单方法(它使用解析objectIdupdatedAt字段来决定要做什么)