Передайте строку Arraylist, используя намерение в течение 2 действий - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть 3 действия, действие 1 извлекает данные из базы данных, действие 2 - экран spla sh, и действие 3 показывает данные. Я хочу передать данные из действия 1 в действие 3, используя намерение. но это не работает. Если я не использую упражнение 2, оно работает, но я также хочу использовать упражнение 2.

Упражнение 1, извлечение данных из базы данных

matchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDbref = FirebaseDatabase.getInstance().getReference();
            mkomref = mDbref.child("Students");
            string = matchKriteria.getText().toString();
            Query query = mkomp.orderByChild("Komp").equalTo(string);
            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        if(nameList.size()>0)
                            nameList.clear();

                        for (DataSnapshot data : dataSnapshot.getChildren()) {
                            nameList.add(data.child("Name").getValue(String.class));
                        }
                        Intent intent = new Intent(FirstActivity.this, LoadingActivity.class);
                        intent.putExtra("value",nameList);
                        startActivity(intent);
                    }
                }

Упражнение 2 spla sh screen

public class LoadingActivity extends AppCompatActivity {

public static int SPLASH_TIME_OUT= 5000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading);


new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent =new Intent(LoadingActivity.this, ResultActivity.class);
        startActivity(intent);
        finish();

    }
},SPLASH_TIME_OUT);

Задание 3 показывает результат

public class ResultActivity extends AppCompatActivity {


private ArrayList<String> nameList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bedrift_match_resultat);
    Intent intent = getIntent();

    if (intent != null)
        nameList = intent.getStringArrayListExtra("value");

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    if (nameList.size() > 0) {
        CustomAdapter adapter = new CustomAdapter(this, nameList);
        recyclerView.setAdapter(adapter);
    }
}

}

1 Ответ

0 голосов
/ 11 апреля 2020

я думаю, что это не сработало, потому что в своей загрузочной активности вы не извлекали данные из FirstActivity и не отправляли их в ResultActivity. Итак, ваш список имен в ResultActivity равен нулю

Вы можете попробовать это:

public class LoadingActivity extends AppCompatActivity {

public static int SPLASH_TIME_OUT= 5000;
private ArrayList<String> nameList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading);
    if (getIntent() != null) {
        namelist.addAll(getIntent().getStringArrayListExtra("value");
    }


new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent =new Intent(LoadingActivity.this, ResultActivity.class);
        intent.putExtra("value",nameList);
        startActivity(intent);
        finish();

    }
},SPLASH_TIME_OUT);
...