首页 > 解决方案 > 如何使用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());
    }
}

}

标签: androidfirebase

解决方案


推荐阅读