gpt4 book ai didi

java - 如何使用 Intent 将 ArrayList 传递给另一个 Activity?

转载 作者:行者123 更新时间:2023-11-30 01:42:36 25 4
gpt4 key购买 nike

Activity A中,我使用这段代码传递数组

 ArrayList<SearchResults> results = new ArrayList<SearchResults>();
Intent i=new Intent(getApplication(),B.class);
i.putExtra("results", results);
startActivity(i);

Activity B中,接收结果

ArrayList result;
result = (ArrayList<SearchResults>)getIntent().getSerializableExtra("results");
Toast.makeText(getApplicationContext(),result+"",Toast.LENGTH_LONG).show();

搜索结果

public class SearchResults {

private String weather = "";
private String date = "";
private String status = "";
private String timeIn="";
private String timeOut="";
private String project="";
private String description="";
private String progress="";

public void setWeather(String weather) {
this.weather = weather;
}

public String getWeather() {
return weather;
}

public void setDate(String date) {
this.date = date;
}

public String getDate() {
return date;
}

public void setStatus(String status) {
this.status = status;
}

public String getStatus() {
return status;
}

public void setTimeIn(String timeIn) {
this.timeIn = timeIn;
}

public String getTimeIn() {
return timeIn;
}

public void setTimeOut(String timeOut){
this.timeOut=timeOut;
}

public String getTimeOut()
{
return timeOut;
}

public void setProject(String project){
this.project=project;
}

public String getProject()
{
return project;
}

public void setProgress(String progress){
this.progress=progress;
}

public String getProgress()
{
return progress;
}

public void setDescription(String description){
this.description=description;
}

public String getDescription()
{
return description;
}

}

错误 LogCat

 Process: com.example.project.myapplication, PID: 2698
java.lang.RuntimeException: Parcel: unable to marshal value com.example.project.myapplication.bean.SearchResults@94c2757
at android.os.Parcel.writeValue(Parcel.java:1397)
at android.os.Parcel.writeList(Parcel.java:738)
at android.os.Parcel.writeValue(Parcel.java:1344)

还有这一行

 startActivity(i);

如何使用 serializable 传递 bean 对象并使 bean 类实现 serializable ?非常感谢。


在同一个 Activity 中,我希望将结果保存到数据库中。

 btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WD.insertWorkDetails(result,a); //a is pass from Activtity a too
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
Toast.makeText(getApplication(),"DONE",Toast.LENGTH_LONG).show();
}
});

工作详情

 public long insertWorkDetails(ArrayList<SearchResults> listItems, long id)
{
database=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
for(SearchResults s:listItems) {

String Project = s.getProject();
String temp = s.getDescription();
String[] ReceiveDescription = temp.split(":");
String Progress = s.getProgress();
String[] ReceiveProgress = Progress.split(":");
String TimeIn = s.getTimeIn();
String[] ReceiveTimeIn = TimeIn.split(":");
String TimeOut = s.getTimeOut();
String[] ReceiveTimeOut = TimeOut.split(":");
values.put(MyDatabaseHelper.Project,Project);
values.put(MyDatabaseHelper.WorkDescription,ReceiveDescription[1]);
values.put(MyDatabaseHelper.Percentage,ReceiveProgress[1]);
values.put(MyDatabaseHelper.TimeIn,ReceiveTimeIn[1]);
values.put(MyDatabaseHelper.TimeOut,ReceiveTimeOut[1]);
values.put("Twd_id",id);
database.insert(MyDatabaseHelper.TABLE_WORKDETAILS, null, values);
}
database.close();
return 0 ;

}

当我检查我的数据库时,没有添加 listView 项目。

最佳答案

java.lang.RuntimeException: Parcel: unable to marshal value com.example.project.myapplication.bean.SearchResults@94c2757

您正在使用 getSerializableExtra 来检索您的 ArrayList。这意味着 SearchResults 实现了 Serializable,但事实并非如此。如果您想要一个简单的修复,只需让 SearchResults 实现 Serializable 接口(interface)即可。在 SearchResults 序列化的情况下,开箱即用。或者您可以了解 Parcelable(阅读更多相关信息 here)并使用它代替 Serializable。如果您不需要将对象保存在永久存储中,ParcelableSerializable

更有效

关于java - 如何使用 Intent 将 ArrayList 传递给另一个 Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238121/

25 4 0