Как «Экспортировать сохраненные данные и передать эти данные в новое действие в Android» - PullRequest
0 голосов
/ 31 января 2019

Я сохранил данные SQLite в Android;Но когда я вызываю данные, чтобы перенести их в другой вид деятельности, он передает только последние данные в базу данных через другой вид деятельности.где мне нужно установить кодировку?Спасибо.

Это Android Studio 3.0 и SQLite.В прошлом я пытался экспортировать сохраненные данные в базу данных SQLite и переносить эти данные в новое действие.У меня всегда есть только последние данные в моей базе данных.


Мой код в основной активности

 private void xuLyXemLuotLike(View view) {
        database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
        Cursor cursor = database.query("ArirangSongList", null, null, null, null, null, null);
        //dsBaiHatGoc.clear();
        int soLike = 0;
        int soDislike = 0;
        String mabh ="";
        String tenbh = "";
        String casi = "";
        Music music = new Music();
        while (cursor.moveToNext()) {
            mabh = cursor.getString(0);
            tenbh = cursor.getString(1);
            casi = cursor.getString(3);
            soLike = cursor.getInt(6);
            soDislike = cursor.getInt(7);
            music.setMa(mabh);
            music.setTen(tenbh);
            music.setCaSi(casi);
            music.setSoLike(soLike);
            music.setSoDislike(soDislike);
          //  dsBaiHatGoc.add(music);
        }
        cursor.close();
            Intent intent = new Intent(MainActivity.this, XemLuotLikeActivity.class);
            intent.putExtra("mabh",mabh);
            intent.putExtra("tenbh", tenbh);
            intent.putExtra("casi", casi);
            intent.putExtra("soLike", soLike);
            intent.putExtra("soDislike", soDislike);
            startActivity(intent);
        }

Мой код в другомЗанятие:

    txtKetQua= (TextView) this.<View>findViewById(R.id.txtKetQua);
    Intent intent =getIntent();

    String mabh =intent.getStringExtra("mabh");

    String tenbh =intent.getStringExtra("tenbh");
    String casi =intent.getStringExtra("casi");

    int soLike =intent.getIntExtra("soLike", 0);
    int soDislike =intent.getIntExtra("soDislike",0);

    txtKetQua.setText(mabh + "   " + tenbh + "   " + casi + "   " + soLike+ "   " + soDislike);

Мой код в другом занятии

Мой код в основном занятии

Ответы [ 2 ]

0 голосов
/ 31 января 2019

попробуйте

    ArrayList<Music> musicList = new ArrayList<Music>();
    while (cursor.moveToNext()) {

       // first add implements Serializable to Music class
       // make constructor with respective parameters
         Music music = new Music(cursor.getString(0), cursor.getString(1), cursor.getString(3), cursor.getString(6), cursor.getString(7));

        musicList.add(music);
    }
    cursor.close();

   Intent intent = new Intent(MainActivity.this, XemLuotLikeActivity.class);
   intent.putExtra("musicList",musicList);            
   startActivity(intent);

, затем в XemLuotLikeActivity Activity oncreate ()

ArrayList<Music> musiclist = (ArrayList<Music>) intent.getSerializable("musicList");

or
musiclist = (ArrayList<Music>) getIntent().getSerializableExtra("musicList");
0 голосов
/ 31 января 2019

Каждый раз, когда к строке обращаются, она использует одну и ту же переменную, поэтому значения перезаписываются и, таким образом, только последняя строка используется для установки значений, передаваемых через намерение.

Если вам не нужно много намерений (например,добавьте положение к имени ключа), тогда было бы лучше извлечь данные из базы данных в другом упражнении.

Вы можете отправить много intentExtras (набор на строку) вместе со счетчикомколичество строк, использующих что-то вроде: -

private void xuLyXemLuotLike(View view) {
    SQLiteDatabase database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
    Cursor cursor = database.query("ArirangSongList", null, null, null, null, null, null);

    //dsBaiHatGoc.clear();
    int soLike = 0;
    int soDislike = 0;
    String mabh ="";
    String tenbh = "";
    String casi = "";
    Music music = new Music();
    Intent intent = new Intent(MainActivity.this, XemLuotLikeActivity.class);
    intent.putExtra("rowcounter",cursor.getCount()); //<<<<<<<<<< number of rows
    while (cursor.moveToNext()) {
        intent.putExtra("mabh"+String.valueOf(cursor.getPosition()),cursor.getString(0));
        intent.putExtra("tenbh"+String.valueOf(cursor.getPosition()),cursor.getString(1));
        intent.putExtra("casi"+String.valueOf(cursor.getPosition()),cursor.getString(3));
        intent.putExtra("soLike"+String.valueOf(cursor.getPosition()),cursor.getInt(6));
        intent.putExtra("soDislke"+String.valueOf(cursor.getPosition()),cursor.getInt(7));
    }
    cursor.close();
    startActivity(intent);
}
  • это будет отправлять intentExtras с ключами mabh0 mabh1 mabh2 ........

Затем вы можете получитьданные, используя что-то вроде: -

    Intent intent = getIntent();
    int rowcounter = intent.getIntExtra("rowcounter",-1);

    Music[] allthemusicpass = new Music[rowcounter];
    for (int i = 0; i < rowcounter; i++) {
        allthemusicpass[i].setMa(intent.getStringExtra("mabh"+String.valueOf(i)));
        allthemusicpass[i].setTen(intent.getStringExtra("tenbh"+String.valueOf(i)));
        allthemusicpass.setCaSi(intent.getStringExtra("casi"+String.valueOf(i)));
        allthemusicpass.setSoLike(intent.getIntExtra("soLike"+String.valueOf(i),-1));
        allthemusicpass.setSoDislike(intent.getIntExtra("soDislike"+String.valueOf(i),-1));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...