标签: parcelable

android中使用的Parcelable和Serialization有什么区别

我想知道确切的,

  1. 我是应该使用parcelable还是serialization技术将数据从一个活动发送到另一个活动?
  2. 是否必须使用其中一个将数据从一个发送到另一个?
  3. 我应该什么时候使用它们?
  4. 以及它们与java方面的性能之间的确切差异.

提前致谢.


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}
Run Code Online (Sandbox Code Playgroud)

android serializable parcelable

32
推荐指数
3
解决办法
2万
查看次数

帮助传递ArrayList和parcelable Activity

所以我昨天一直在谷歌上搜索大部分时间,并且似乎无法绕过如何将一个arraylist传递给一个sublativity.有大量的示例和片段传递原始数据类型,但我所拥有的是类型为address的arraylist (下面是address.java).

我已经在stackoverflow和网络上发现了很多东西,但除了一个带有GeoPoint示例的东西之外没什么值得关注的.再次,它看起来像他们只是将GeoPoint对象扁平化为两个整数并将其传入.我不能这样做,因为我的地址类可能会扩展为包括整数,浮点数等等.现在,为简单起见,下面的测试应用程序只有两个字符串.我想如果我可以让parcelalbe的东西与之合作,其余的就可以了.

有人可以为非基本对象的ArrayList发布一个工作示例,或者可能在下面添加代码以使其工作吗?

更新:以下代码现在在回复/编辑后工作.谢谢!

/* helloParcel.java */        
       public class helloParcel extends Activity
{
    // holds objects of type 'address' == name and state
    private ArrayList <address> myList;

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

        Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(ocl);

        myList = new ArrayList();
        address frank   = new address ("frank", "florida");
        address mary    = new address ("mary", "maryland");
        address monty   = new address ("monty", "montana");

        myList.add (frank);
        myList.add (mary);
        myList.add …
Run Code Online (Sandbox Code Playgroud)

android parcelable android-activity

31
推荐指数
4
解决办法
5万
查看次数

传递ArrayList <?实现Parcelable> to Activity

我搜索了一些主题,但没有找到解决我问题的方法.

public class Series implements Parcelable {
private String name;
private int numOfSeason;
private int numOfEpisode;

/** Constructors and Getters/Setters have been removed to make reading easier **/

public Series(Parcel in) {
    String[] data = new String[3];
    in.readStringArray(data);
    this.name = data[0];
    this.numOfSeason = Integer.parseInt(data[1]);
    this.numOfEpisode = Integer.parseInt(data[2]);
}


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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] { this.name,
            String.valueOf(this.numOfSeason),
            String.valueOf(this.numOfEpisode) });

}

private void readFromParcel(Parcel in) {
    name = in.readString(); …
Run Code Online (Sandbox Code Playgroud)

android arraylist parcelable

31
推荐指数
1
解决办法
5万
查看次数

Android Parcelable和Serializable

所以我知道建议在Android中使用Parcelable而不是Serializable,因为它更快.

我的问题是:使用Serializable是不可避免的吗?

如果我有一个我想要序列化的自定义对象,那么假设我有以下类定义

public class Person {
   String name;
   int Age;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

使这个parcelable很容易,因为Person类包含parcel.write*()支持的类型,即parcel.writeString和parcel.writeInt

现在,如果Person类如下:

public class PersonTwo {
   MyCustomObj customObj;
   String name;
   int Age;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

我怎么想包裹MyCustomObj对象?看来我需要再次使用serializable吗?但同样,我认为使用serializable是慢的,似乎我们别无选择,只能在这种情况下使用它.

我不明白

谁能告诉我在这种情况下我会如何包裹PersonTwo?

serialization android parcel parcelable android-intent

30
推荐指数
2
解决办法
3万
查看次数

读取和写入整数数组到parcel

在parcel的情况下,我找不到任何有关如何处理整数数组的解决方案(我想使用这两个函数dest.writeIntArray(storeId);in.readIntArray(storeId);).

这是我的代码

public class ResponseWholeAppData implements Parcelable {
    private int storeId[];

    public int[] getStoreId() {
        return storeId;
    }

    public void setStoreId(int[] storeId) {
        this.storeId = storeId;
    }

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

    public ResponseWholeAppData(){
        storeId = new int[2];
        storeId[0] = 5;
        storeId[1] = 10;
    }

    public ResponseWholeAppData(Parcel in) {

        if(in.readByte() == (byte)1) 
             in.readIntArray(storeId);  //how to do this storeId=in.readIntArray();  ?                          
        }

    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if(storeId!=null&&storeId.length>0)                   
        {
            dest.writeByte((byte)1);
            dest.writeIntArray(storeId); …
Run Code Online (Sandbox Code Playgroud)

android parcelable

29
推荐指数
1
解决办法
2万
查看次数

Android单元测试:Bundle/Parcelable

你如何对Parcelable进行单元测试?我创建了一个Parcelable类,并编写了这个单元测试

TestClass test = new TestClass();
Bundle bundle = new Bundle();
bundle.putParcelable("test", test);

TestClass testAfter = bundle.getParcelable("test");
assertEquals(testAfter.getStuff(), event1.getStuff());
Run Code Online (Sandbox Code Playgroud)

我故意试图通过返回null来测试失败createFromParcel(),但它似乎成功了.它似乎在需要之前不会被包围.我该怎么强迫Bundle来...捆绑?

android unit-testing bundle parcelable

29
推荐指数
3
解决办法
1万
查看次数

如何在android中使用Intent将对象的ArrayList从一个传递给另一个活动?

我在我的onClick()方法中的代码中有以下内容

 List<Question> mQuestionsList = QuestionBank.getQuestions();
Run Code Online (Sandbox Code Playgroud)

现在我有了这一行后的意图,如下:

  Intent resultIntent = new Intent(this, ResultActivity.class);
  resultIntent.putParcelableArrayListExtra("QuestionsExtra", (ArrayList<? extends Parcelable>) mQuestionsList);
  startActivity(resultIntent);
Run Code Online (Sandbox Code Playgroud)

我不知道如何将这个问题列表从一个活动传递到另一个活动My Question类

public class Question {
    private int[] operands;
    private int[] choices;
    private int userAnswerIndex;

    public Question(int[] operands, int[] choices) {
        this.operands = operands;
        this.choices = choices;
        this.userAnswerIndex = -1;
    }

    public int[] getChoices() {
        return choices;
    }

    public void setChoices(int[] choices) {
        this.choices = choices;
    }

    public int[] getOperands() {
        return operands;
    }

    public void setOperands(int[] operands) {
        this.operands …
Run Code Online (Sandbox Code Playgroud)

android parcelable android-intent

27
推荐指数
7
解决办法
9万
查看次数

如何修复Android中偏移YYY的Unmarshalling未知类型代码XXX?

由于Unmarshalling异常,我正在恢复应用程序崩溃.我检查了所有Seri​​alizables都没有参数的构造函数,甚至使用ObjectStream检查了所有可序列化(保存到文件并从文件加载).我如何理解导致异常的parcelable偏移的实际类类型:

Parcel android.os.Parcel@42209460: Unmarshalling unknown type code
 2131165303 at offset 3748
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2080)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105)
         at android.app.ActivityThread.access$600(ActivityThread.java:136)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:4876)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
         at com.kdgdev.xtension.core.XtensionMain.main(XtensionMain.java:91)
         at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@42209460: Unmarshalling unknown type code 2131165303
 at offset 3748
         at android.os.Parcel.readValue(Parcel.java:2032)
         at android.os.Parcel.readSparseArrayInternal(Parcel.java:2255)
         at android.os.Parcel.readSparseArray(Parcel.java:1687)
         at android.os.Parcel.readValue(Parcel.java:2022)
         at android.os.Parcel.readMapInternal(Parcel.java:2226)
         at android.os.Bundle.unparcel(Bundle.java:223)
         at android.os.Bundle.getSparseParcelableArray(Bundle.java:1232)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1690)
         at android.app.Activity.onRestoreInstanceState(Activity.java:999)
         at com.actionbarsherlock.app.SherlockFragmentActivity.onRestoreInstanceState(Unknown
 Source)
         at name.myname.android.app.ui.MainActivity.onRestoreInstanceState(Unknown
 Source)
         at android.app.Activity.performRestoreInstanceState(Activity.java:971)
         at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1130) …
Run Code Online (Sandbox Code Playgroud)

serialization android marshalling unmarshalling parcelable

27
推荐指数
3
解决办法
3万
查看次数

为什么可以将布尔数组写入parcel而不是布尔值?

在Parcel的文档中,它声明了一种方法

public final void writeBooleanArray (boolean[] val) 
Run Code Online (Sandbox Code Playgroud)

但是没有办法 writeBoolean(boolean val)

还存在:

public final void writeLong (long val)

public final void writeLongArray (long[] val)
Run Code Online (Sandbox Code Playgroud)

因此,类似的模式可用于其他原始类型.

有人可以解释为什么会这样吗?

java android ipc parcelable android-activity

25
推荐指数
1
解决办法
4779
查看次数

嵌套的parcelable对象不读

我正在尝试包含一个包含一些字符串/ int变量和一个对象变量的对象.字符串和int正在工作,但不是嵌套对象.我明白我也必须这样做,但我显然做错了=.在我的嵌套类中,该writeToParcel方法被调用(我通过Log.d()调用检查),但是createFromParcel()没有.我最终得到一个null对象.这是我的简化代码:

public class MyClass implements Parcelable {

    public MyClass() {
    }

    private Integer id;
    private String name;    
    private MyOtherClass otherClass = new MyOtherClass();

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public OtherClass getOtherClass() {
        return otherClass;
    }

    public void setOtherClass(OtherClass otherClass) {
        this.otherClass = otherClass;
    } …
Run Code Online (Sandbox Code Playgroud)

android parcelable

25
推荐指数
1
解决办法
2万
查看次数