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

Java 从sqlite获取数据并存储在json中,java,android,sqlite,gson,getter-setter,Java,Android,Sqlite,Gson,Getter Setter,我有一个表,我想从中代表一个特定列获取所有数据,然后以JSON的形式保存该数据,以便通过API将其发送到数据库进行保存 我无法从数据库中获取所有数据,尽管我尝试通过游标来获取数据,但我在此获取的是单个数据。请帮助我获取数据并将其转换为JSON。这就是我写的代码。这是Dbsave类中的方法,它扩展了DatabaseOpenHelper public Cursor getAllData() { SQLiteDatabase db = this.getWritableDatabase();

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

我无法从数据库中获取所有数据,尽管我尝试通过游标来获取数据,但我在此获取的是单个数据。请帮助我获取数据并将其转换为JSON。这就是我写的代码。这是
Dbsave
类中的方法,它扩展了
DatabaseOpenHelper

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();
  }
}

我无法解析
settergetter
中列表中的数据。如果我能够获取所有数据,我将使用GSON将其转换为JSON。

函数中的
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();
   }
}
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();
   }
}
GSON获取一个对象,用于将其转换为JSON。因此,我建议您使用从光标获取的元素创建一个对象,如下所示

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();
   }
}
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();
   }
}
公共类数据{
公共字符串aaa;
公共字符串bbb;
公共字符串;
}
公共类ListOfData{
公共列表数据列表;
}
现在再次修改函数,如下所示

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();
   }
}
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();
   }
}
public void getalldata(){
//游标加载了数据
cursor=dbAutoSave.getAllData();
ArrayList dataList=新的ArrayList();
如果(光标!=null){
cursor.moveToFirst();
做{
数据=新数据();
data.aaa=cursor.getString(1);
data.bbb=cursor.getString(2);
data.ccc=cursor.getColumnName(3);
//在此处添加到ArrayList
dataList.add(数据);
}while(cursor.moveToNext());
//现在创建要传递给GSON的对象
DataList listOfData=新数据列表();
listOfData.dataList=数据列表;
Gson Gson=新的Gson();
字符串jsonInString=gson.toJson(listOfData);//给你!
cursor.close();
}
}

每次在光标内初始化数组列表时 在游标外部初始化它

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();
  }
}
public void getalldata(){
cursor=dbAutoSave.getAllData();
ArrayList aaaa=新的ArrayList();
如果(光标!=null){
if(cursor.moveToNext()){

对于(int i=0;我可以看到您只打印了
员工列表中的一个元素。您确定没有从游标中获取所有数据,而只打印了一个元素吗?在游标中,我获取了所有数据,因为我检查了计数,结果是30。请检查下面的答案。谢谢。这解决了我的问题。现在您可以帮助我转换这些数据吗在使用GSON的json中。我已经接受并投票支持了它。如果您能帮助我将其转换为json,请。非常感谢!请检查更新的答案,了解您需要如何使用GSON创建json字符串。祝您好运!在这种情况下,Data gettersetter类是吗?不是。您需要创建一个不同的类,正如我前面提到的。因为,尽我所能请看,
SetterGetter
类不包含列表。但是为了创建JSON字符串,您需要一个列表。这就是为什么您需要一个额外的类
ListOfData
,正如我提到的,它将保存列表。我想您明白了。