从sqlite获取数据并存储在json中

时间:2019-02-12 06:00:09

标签: java android sqlite gson getter-setter

我有一个表,我希望从该表中代表特定列获取所有数据,然后以JSON形式保存该数据,以便可以通过API将其发送到数据库以进行保存。

尽管我尝试通过游标来获取所有数据,但我无法从数据库获取所有数据。请帮助我获取数据并将其转换为JSON。这就是我编写的代码。这是来自2019-02-12 18:47:20.879463+1300 Techsupport[15324:9474292] <UIView:0x7ff96154a2f0; frame = (0 0; 375 812); autoresize = W+H; tintColor =UIExtendedSRGBColorSpace 1 0.149131 0 1; gestureRecognizers = <NSArray:0x600002c474e0>; layer = <CALayer: 0x6000021d42c0>>'s window is not equal` to <Techsupport.EslViewController: 0x7ff9618fd800>'s view's window! 类的方法,该方法扩展了Dbsave

DatabaseOpenHelper

然后我在Activity中使用这种方法。

public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+"autosave",null);
    return res;
}

我在public void getalldata(){ cursor=dbAutoSave.getAllData(); if (cursor!=null) { if(cursor.moveToNext()) { for (int i = 0; i <= cursor.getCount(); i++) { aaa = cursor.getString(1); String bbb = cursor.getString(2); String ccc = cursor.getColumnName(3); } ArrayList<String> aaaa=new ArrayList<>(); aaaa.add(aaa); Toast.makeText(getApplicationContext(),"bbbbb"+aaaa,Toast.LENGTH_LONG).show(); } cursor.close(); } } 中仅获得一个数据。然后,我尝试使用aaaa这样做,但是没有任何好处。

gettersetter

我无法解析private void showEmployeesFromDatabase() { Cursor cursorEmployees = mDatabase.rawQuery("SELECT * FROM autosave", null); if (cursorEmployees.moveToFirst()) { do { // Pushing each record in the employee list employeeList.add(new SetterGetter( cursorEmployees.getString(0), cursorEmployees.getString(1), cursorEmployees.getString(2) )); } while (cursorEmployees.moveToNext()); } // Closing the cursor System.out.println("aaaaaa" + employeeList.get(1)); cursorEmployees.close(); } 中列表中的数据。如果我能够提取所有数据,则将使用GSON将其转换为JSON。

2 个答案:

答案 0 :(得分:2)

getalldata函数内部的循环有故障。它不是在游标上迭代,而是一次又一次地循环遍历同一元素。我想建议如下更改功能。

public void getalldata() {

  // Cursor is loaded with data
  cursor = dbAutoSave.getAllData();
  ArrayList<String> aaaa = new ArrayList<>();

  if (cursor != null) {
      cursor.moveToFirst();

       do {
          aaa = cursor.getString(1);
          String bbb = cursor.getString(2);
          String ccc = cursor.getColumnName(3);

          // Add into the ArrayList here
          aaaa.add(aaa);

       } while (cursor.moveToNext());

       cursor.close();
   }
}

希望能解决您的问题。

更新

要使用GSON将ArrayList中存储的数据转换为JSON,您需要首先在build.gradle文件中添加该库。您可以找到一种here的使用方式。

只需在您的build.gradle文件中添加以下依赖项即可。

dependencies {
  implementation 'com.google.code.gson:gson:2.8.5'
}

GSON使用一个对象将其转换为JSON。因此,我建议您使用从光标中获取的元素创建一个对象,如下所示。

public class Data {
    public String aaa;
    public String bbb;
    public String ccc;
}

public class ListOfData {
    public List<Data> dataList;
}

现在再次修改功能,如下所示。

public void getalldata() {

  // Cursor is loaded with data
  cursor = dbAutoSave.getAllData();
  ArrayList<Data> dataList = new ArrayList<Data>();

  if (cursor != null) {
      cursor.moveToFirst();

       do {
          Data data = new Data();
          data.aaa = cursor.getString(1);
          data.bbb = cursor.getString(2);
          data.ccc = cursor.getColumnName(3);

          // Add into the ArrayList here
          dataList.add(data);

       } while (cursor.moveToNext());

       // Now create the object to be passed to GSON
       DataList listOfData = new DataList();
       listOfData.dataList = dataList;

       Gson gson = new Gson();
       String jsonInString = gson.toJson(listOfData); // Here you go! 

       cursor.close();
   }
}

答案 1 :(得分:0)

每次在光标内初始化数组列表 在光标之外对其进行初始化

public void getalldata(){
  cursor=dbAutoSave.getAllData();
 ArrayList<String> aaaa=new ArrayList<>();
  if (cursor!=null) {
      if(cursor.moveToNext()) {
          for (int i = 0; i <= cursor.getCount(); i++) {
              aaa = cursor.getString(1);
              String bbb = cursor.getString(2);
              String ccc = cursor.getColumnName(3);
          }


          aaaa.add(aaa);
          Toast.makeText(getApplicationContext(),"bbbbb"+aaaa,Toast.LENGTH_LONG).show();
      }
      cursor.close();
  }
}