android - 如何使用android意图发送对象
问题描述
我正在尝试使用意图将圣经对象发送到活动。我用 Parcelable 包装圣经对象。我在线上遇到错误(Bible bible = snapshot.getValue(Bible.class); 我正在使用 firebase 数据库将数据库中的数据与 Bible.java 匹配。我收到此错误。任何帮助将不胜感激。谢谢提前。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.donghyun.catholicbibleverse, PID: 5390
com.google.firebase.database.DatabaseException: Class com.donghyun.catholicbibleverse.Bible does not
define a no-argument constructor. If you are using ProGuard, make sure these constructors are not
stripped.
at
com.google.firebase.database.core.utilities.encoding.
CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-database@@19.2.1:569)
at
com.google.firebase.database.core.utilities.encoding
.CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-database@@19.2.1:562)
at
com.google.firebase.database.core.utilities.encoding.
CustomClassMapper.convertBean(com.google.firebase:firebase-database@@19.2.1:432)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.
deserializeToClass(com.google.firebase:firebase-database@@19.2.1:231)
at
com.google.firebase.database.core.utilities.encoding.
CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.2.1:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-
database@@19.2.1:203)
at com.donghyun.catholicbibleverse.Fragment1$1.onDataChange(Fragment1.java:62)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-
database@@19.2.1:179)
at
com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-
database@@19.2.1:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-
database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-
database@@19.2.1:55)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
I/Process: Sending signal. PID: 5390 SIG: 9
这是代码。
public class Fragment1 extends Fragment {
private RecyclerView recyclerView;
private BibleAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Bible> arrayList;
private FirebaseDatabase database;
private DatabaseReference databaseReference;
public static final String VERSE_DATA="data";
public static final int REQUEST_CODE=101;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle
savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment1, container, false);
recyclerView = rootView.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
//GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 2);
layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
arrayList = new ArrayList<>();
database = FirebaseDatabase.getInstance();
databaseReference = database.getReference("Bible");
adapter = new BibleAdapter(arrayList, getContext());
recyclerView.setAdapter(adapter);
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
arrayList.clear();
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
Bible bible = snapshot.getValue(Bible.class);
arrayList.add(bible);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("fragment1", String.valueOf(databaseError.toException()));//에러문 출력
}
});
adapter.setOnItemClickListener(new OnVerseItemClickListener() {
@Override
public void onItemClick(BibleAdapter.BibleViewHolder holder, View view, int position) {
// Toast.makeText(getContext(), "num"+adapter.getItemCount(), Toast.LENGTH_LONG).show();
Intent intent = new Intent(getContext(), Verse.class);
Bible verse = new Bible(arrayList.get(position).getImage(), arrayList.get(position).getBibleType(),
arrayList.get(position).getVerse(), arrayList.get(position).getContent(), arrayList.get(position).getKeysentance());
intent.putExtra(VERSE_DATA, verse);
startActivityForResult(intent, REQUEST_CODE);
}
});
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
public class Bible implements Parcelable {
String image;
String bibleType;
String verse;
String content;
String keysentance;
public Bible(Parcel src){
image = src.readString();
bibleType = src.readString();
verse = src.readString();
content = src.readString();
keysentance = src.readString();
}
public Bible(String image, String bibleType, String verse, String content, String keysentance) {
this.image = image;
this.bibleType = bibleType;
this.verse = verse;
this.content = content;
this.keysentance = keysentance;
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
@Override
public Object createFromParcel(Parcel source) {
return new Bible(source);
}
@Override
public Object[] newArray(int size) {
return new Bible[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(image);
dest.writeString(bibleType);
dest.writeString(verse);
dest.writeString(content);
dest.writeString(keysentance);
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getBibleType() {
return bibleType;
}
public void setBibleType(String bibleType) {
this.bibleType = bibleType;
}
public String getVerse() {
return verse;
}
public void setVerse(String verse) {
this.verse = verse;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getKeysentance() {
return keysentance;
}
public void setKeysentance(String keysentance) {
this.keysentance = keysentance;
}
}
public class Verse extends AppCompatActivity {
ImageView imageView;
TextView bibleType;
TextView verse;
TextView content;
public static final String VERSE_DATA="data";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_verse);
bibleType = findViewById(R.id.bibleType);
verse = findViewById(R.id.verse);
content = findViewById(R.id.content);
imageView = findViewById(R.id.imageView);
Intent intent = getIntent();
processIntent(intent);
}
private void processIntent(Intent intent){
if(intent!= null){
Bundle bundle = intent.getExtras();
Bible data = bundle.getParcelable(VERSE_DATA);
bibleType.setText(data.getBibleType().toString());
verse.setText(data.getVerse().toString());
content.setText(data.getContent().toString());
}
}
}
解决方案
推荐阅读
- angular - Safari 中的 Ngx-chart 高度问题
- ember.js - Ember:无法识别 camelCase 助手引用
- tensorflow - 如何在bert中设置特定的gpu?
- python - 运输错误:运输错误(503,'search_phase_execution_exception')
- java - 如何使用正则表达式提取java方法参数
- abap - CL_SALV_BS_RUNTIME_INFO 通过 RFC 返回空引用
- r - 在 foreach 循环中并行执行 autoML 时出现 H2O“网格:无法将新模型附加到具有不同训练输入的网格”错误
- javascript - 即使 api 失败,也正在执行 fetch `then()`
- c# - WPF DataGrid 性能 - 过滤器性能
- delphi - 有没有办法获取所有当前时区的时区信息