当前位置: 首页 > 面试题库 >

通过意图传递对象的ArrayList-Java(Android)

艾宏远
2023-03-14
问题内容

我试图通过意图传递对象的ArrayList,但无法使其工作。这是我所拥有的:

public class QuestionView extends Activity {

    //variables and other methods...

    public void endQuiz() {
        Intent intent = new Intent(QuestionView.this, Results.class);
        intent.putExtra("correctAnswers", correctAnswers);
        intent.putExtra("wrongAnswers", wrongAnswers);
        intent.putParcelableArrayListExtra("queries", queries);
        startActivity(intent);
    }
}

在这里收到意向:

public class Results extends Activity {

    int cAnswers;
    int wAnswers;
    ArrayList<Question> qs;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.resultsmain);

        cAnswers = getIntent().getIntExtra("correctAnswers", -1);
        wAnswers = getIntent().getIntExtra("wrongAnswers", -1);

        qs = getIntent().getParcelableArrayListExtra("queries");

                    //more code...
    }
}

我们已经收到了两个int值,correctAnswer和faultAnswers,我可以使用它们。ArrrayList没有通过。endQuiz()方法中没有错误,但’qs
= getIntent()。getParcelableArrayListExtra(“ queries”);’ 抛出错误并说“绑定不匹配”。

任何帮助对此表示赞赏!

问题类别:

public class Question {
    String a1;
    String a2;
    String a3;
    String a4;
    int correctAnswer;
    String query;
    int selectedAnswer;
    boolean correctness;

    public Question() {
    }

    public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query, int selectedAnswer, boolean correctness) {
        this.a1 = a1;
        this.a2 = a2;
        this.a3 = a3;
        this.a4 = a4;
        this.correctAnswer = correctAnswer;
        this.query = query;
        this.selectedAnswer = selectedAnswer;
        this.correctness = correctness;
    }
    }

问题答案:

您必须更改您的Question类才能实际实现Parcelable。起初,Parcelable界面可能会令人困惑……但是挂在那里。

您应该关注两种Parcelable方法

  • writeToParcel() 它将您的类转换为Parcel对象。
  • Question(Parcel in) 这会将Parcel对象转换回类的可用实例。

您可以安全地剪切并粘贴我标记的其他Parcelable信息。

为了简单起见,我将只使用您的Question类的一部分:

public class Question implements Parcelable {
    String a1;
    String a2;
    ...

    public Question(String a1, String a1) {
        this.a1 = a1;
        this.a2 = a2;
    }

    // Your existing methods go here. (There is no need for me to re-write them.)

    // The following methods that are required for using Parcelable
    private Question(Parcel in) {
        // This order must match the order in writeToParcel()
        a1 = in.readString();
        a2 = in.readString();
        // Continue doing this for the rest of your member data
    }

    public void writeToParcel(Parcel out, int flags) {
        // Again this order must match the Question(Parcel) constructor
        out.writeString(a1);
        out.writeString(a2);
        // Again continue doing this for the rest of your member data
    }

    // Just cut and paste this for now
    public int describeContents() {
        return 0;
    }

    // Just cut and paste this for now
    public static final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>() {
        public Question createFromParcel(Parcel in) {
            return new Question(in);
        }

        public Question[] newArray(int size) {
            return new Question[size];
        }
    };
}

现在,更改您queries在Intent Extras中的投入方式。

intent.putParcelableArrayListExtra("queries", queries);

读取Parcelable数组的方式非常完美。



 类似资料:
  • 问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。

  • 问题内容: 我已经使用可序列化实现了我的课程,但仍然无法正常工作。 这是我的课: 这就是我想通过的。 但是仍然没有用。我不知道如何使用,所以我改用它。 问题答案: 尝试使用传递可序列化的列表: 并在SomeClass活动中将其获取为:

  • 我已经用序列化实现了我的类,但它仍然不起作用。 这是我的类: 这就是我想要传递的。 但还是没用。我不知道怎么用Parcelable,所以用这个代替。

  • 我试图通过在自定义对象上实现序列化将这个简单的对象从主要活动传递到主要活动。它会导致错误。我提到了类似的堆栈溢出问题。没有任何帮助。 主2活动 错误信息: 07-30 13:58:58.352 26489-26489/? E/AndroidRuntime:致命异常:主进程:gct.venkatesh.com。杂乱无章的,PID:26489 java.lang.RuntimeException:无法

  • 问题内容: 基于此问题 递增变量名称? 我有一个数组列表“ peopleHolder”,其中包含各种“人”对象。我想基于for循环自动创建“人”对象。我做了以下 我想从人员类中调用方法。例如person.setAge; 如何通过arraylist调用此类方法?我想为每个对象设置值的方法。 问题答案: 如果要在列表中的所有对象上调用某种方法,则需要首先对其进行迭代,然后在每个元素中调用方法。可以说您

  • 问题内容: 我想知道是否有可能使用jQuery AJAX函数将数组传递给php函数。我有以下作为我的JavaScript 当我尝试执行以下操作时 我在PHP中将其作为“数组”接收。如何正确发送对象,以便PHP函数可以使用它? 问题答案: 从第二个ajax中,您可以根据属性名称访问数据,例如: 是在php中以关联数组转换的js对象