Извлечение данных из sqlite и сохранение в json - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть таблица, из которой я хочу получить все данные от имени определенного столбца, а затем хочу сохранить эти данные в форме JSON, чтобы я мог отправить их через API в базу данных для сохранения.

Я не могу получить все данные из базы данных, хотя я пытался сделать это с помощью курсора. Я получаю отдельные данные в этом.Пожалуйста, помогите мне получить данные и преобразовать их в JSON.Это то, что я кодировал.Это метод из класса Dbsave, который расширяет DatabaseOpenHelper.

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

И затем я использую этот метод в Activity следующим образом.

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

Я не могу разобрать данные из списка в settergetter.Если я смогу получить все данные, я буду использовать GSON для преобразования их в JSON.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы инициализируете свой список массивов каждый раз внутри курсора. Инициализируйте его вне курсора.

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();
  }
}
0 голосов
/ 12 февраля 2019

Цикл внутри функции 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();
   }
}

Надеюсь, что это решит вашу проблему.

Обновление

Чтобы преобразовать данные, хранящиеся в ArrayList, в JSON с помощью GSON, сначала необходимо добавить библиотеку в файл build.gradle.Вы можете найти способ его использования здесь .

Просто добавьте следующую зависимость в ваш файл 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();
   }
}
...