-2

我想要做的是通过 Intent 在 Activity 之间传递 DataModel 数组。

DataModel 类有 Bitmap 对象和 FirebaseVisionLabel 对象。我找到了很多网站来实现这一点。

很多人说DataModel类应该实现Serializable或Parceable接口来传递DataModel[]ArrayList<DataModel>

所以我尝试了,但真正的问题是 FirebaseVisionLabel 类不能序列化。另外,我无法修改该类,因为它是 firebase 库。

如何按意图传递 DataModel 数组?

观点

  1. 想通过意图传递我自己的类的数组或数组列表。
  2. 该类具有不可序列化的对象,我无法修改。
  3. 我该如何通过或处理它?
4

4 回答 4

0

FirebaseVisionLabel 没有太多属性。您将需要通过创建自己的 VisionLabelParcelable 类来序列化 Label / Confidence /...(您关心的任何内容)。

到目前为止,没有足够的用例让 ML Kit 返回 Parcelable FirebaseVisionLabel。大多数应用程序应该提取他们感兴趣的信息并在需要时传递。

于 2018-08-22T21:15:41.227 回答
0

使用下面的代码获取没有 Serialized 或 Parcelable 的 ArrayList 数据:

考虑,

Intent intent = new Intent(this, your_second_class.class);
intent.putStringArrayListExtra("<your_name_here>", your_list_here);
startActivity(intent);

然后在你的第二堂课中使用:

Intent i = getIntent();  
new_list = i.getStringArrayListExtra("<your_name_here>");

希望它会正常工作。

于 2018-08-20T08:24:29.947 回答
0

使用 Parceable。它完美无缺

public class Test implements Parcelable
{
    FirebaseVisionLabel firebaseVisionLabel;
    String testString;

    protected Test(Parcel in) {
        testString = in.readString();
    }

    public static final Creator<Test> CREATOR = new Creator<Test>() {
        @Override
        public Test createFromParcel(Parcel in) {
            return new Test(in);
        }

        @Override
        public Test[] newArray(int size) {
            return new Test[size];
        }
    };

    public FirebaseVisionLabel getFirebaseVisionLabel() {
        return firebaseVisionLabel;
    }

    public void setFirebaseVisionLabel(FirebaseVisionLabel firebaseVisionLabel) {
        this.firebaseVisionLabel = firebaseVisionLabel;
    }

    public String getTestString() {
        return testString;
    }

    public void setTestString(String testString) {
        this.testString = testString;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(testString);
    }
}

之后通过意图传递数据

   Test test = new Test();
    test.setTestString("test");
    test.setFirebaseVisionLabel(yourObject);

    Intent intent = new Intent(this, BaseActivity.class);
    intent.putExtra("key", test);
    startActivity(intent);
于 2018-08-20T08:19:19.220 回答
0

您可以使用 Application 类,该类可用于所有屏幕、活动。

因此,将数组存储在 Application 类中并在应用程序中的任何位置使用。

于 2018-08-20T08:59:47.117 回答