无法通过intent将数组列表从一个活动传递到另一个活动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过intent将数组列表从一个活动传递到另一个活动相关的知识,希望对你有一定的参考价值。

我有一个String ArrayList,我需要传递给另一个活动。我正在使用意图做同样的事情。但是,在目标活动中获取ArrayList时,它是空的。我通过bundle和putStringArrayList尝试过这个

第一项活动

final ArrayList<String> subtaskArray=new ArrayList<>();
final ArrayList<String> subtaskStatusArray=new ArrayList<>();
final DatabaseReference subNode=parentNode.child("subtask");
holder.noteCard.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View view) 
        subNode.addValueEventListener(new ValueEventListener () 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for (DataSnapshot d: dataSnapshot.getChildren())
                
                    subtaskDesc = d.child("SubtaskDescription").getValue().toString();
                    subtaskStatus = d.child("done").getValue().toString();
                    subtaskArray.add(subtaskDesc);
                    subtaskStatusArray.add(subtaskStatus);
                
            
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );
        Intent intent = new Intent(Main2Activity.this, Checklist.class);
//intent.putStringArrayListExtra("subtaskDesc",subtaskArray);
//intent.putStringArrayListExtra("subtaskStatus",subtaskStatusArray);                                       Bundle b=new Bundle();
        b.putStringArrayList("subtaskDesc", subtaskArray);
        intent.putExtras(b);
        intent.putExtra("noteid", noteid);
        intent.putExtra("Checklist_title", title);
        intent.putExtra("flag", true);
        startActivity(intent);
    
);

检索第二个活动:

try
    noteid=getIntent().getStringExtra("noteid");
    displayflag=getIntent().getBooleanExtra("flag",false);
    //fetchList=  getIntent().getStringArrayListExtra("subtaskDesc");
    Bundle b=this.getIntent().getExtras();
    fetchList = b.getStringArrayList("subtaskDesc");
    Toast.makeText(this,""+fetchList.size(),Toast.LENGTH_SHORT).show();

catch (Exception e)
    e.printStackTrace();

toast将数组列表的大小显示为0。

答案

首先,您需要将代码重构为此 -

  protected void onCreate(@Nullable Bundle savedInstanceState, int resId) 
            super.onCreate(savedInstanceState);
            //here you need to addValeEventListener, like this
subNode.addValueEventListener(new ValueEventListener () 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for (DataSnapshot d: dataSnapshot.getChildren())
                
                    subtaskDesc = d.child("SubtaskDescription").getValue().toString();
                    subtaskStatus = d.child("done").getValue().toString();
                    subtaskArray.add(subtaskDesc);
                    subtaskStatusArray.add(subtaskStatus);
                
            
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );
     

然后,setOnClickListener

holder.noteCard.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View view) 
        Intent intent = new Intent(Main2Activity.this, Checklist.class);
//intent.putStringArrayListExtra("subtaskDesc",subtaskArray);
//intent.putStringArrayListExtra("subtaskStatus",subtaskStatusArray);                                       Bundle b=new Bundle();
        b.putStringArrayList("subtaskDesc", subtaskArray);
        intent.putExtras(b);
        intent.putExtra("noteid", noteid);
        intent.putExtra("Checklist_title", title);
        intent.putExtra("flag", true);
        startActivity(intent);
    
);

以上是关于无法通过intent将数组列表从一个活动传递到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章

如何将 LatLng 的数组列表从一个活动传递到另一个活动

将 Serializables 数组从一个活动传递到另一个活动时发生 Class Cast Exception

将Serializable数组从一个活动传递到另一个活动时的类Cast Exception

通过DrawerNavigator中的StackNavigator将数据从一页传递到另一页

将活动之间的数据从列表视图传递到另一个活动

通过 Intent 传递自定义对象列表