标签: parcelable

如何在Parcel的帮助下将Parcelable编组并解组为字节数组?

我想编组和解组一个实现Parcelable/来自字节数组的类.我很清楚Parcelable表示不稳定,因此不适用于实例的长期存储.但我有一个用例,我需要序列化一个对象,如果由于内部Android更改而解组失败,它不是一个showstopper.该类已经在实现该Parcelable接口.

给定一个类MyClass implements Parcelable,我如何(ab)使用Parcelable接口进行编组/解组?

android marshalling unmarshalling parcel parcelable

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

如何在Android上读取和写入Enum到包裹?

这是我的模型类:

public enum Action {
    RETRY, SETTINGS
}

private int imageId;
private String description;
private String actionName;
private Action action;

public NetworkError(int imageId, String description, String actionName, Action action ) {
    this.imageId = imageId;
    this.description = description;
    this.actionName = actionName;
    this.action = action;
}

public int getImageId() {
    return imageId;
}

public void setImageId(int imageId) {
    this.imageId = imageId;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getActionName() { …
Run Code Online (Sandbox Code Playgroud)

enums android parcel parcelable

41
推荐指数
5
解决办法
2万
查看次数

从parcelable,contentView或contentIntent中提取通知文本

所以我让我的AccessibilityService使用以下代码:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
        List<CharSequence> notificationList = event.getText();
        for (int i = 0; i < notificationList.size(); i++) {
            Toast.makeText(this.getApplicationContext(), notificationList.get(i), 1).show();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它可以很好地读出创建通知时显示的文本(1).

在此输入图像描述

唯一的问题是,我还需要在用户打开通知栏时显示的值(3).(2)对我来说并不重要,但知道如何阅读它会很好.您可能知道,所有值都可能不同.

在此输入图像描述

那么,我怎么读出来(3)?我怀疑这是不可能的,但我notificationList似乎只有一个条目(至少只显示一个吐司).

非常感谢!

/ edit:我可以使用提取通知包裹

if (!(parcel instanceof Notification)) {
            return;
        }
        final Notification notification = (Notification) parcel;
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何从/ notification或中提取通知的消息.notification.contentViewnotification.contentIntent

有任何想法吗?

/编辑:澄清这里的问题:我如何读出(3)

notifications android parcelable android-pendingintent

39
推荐指数
5
解决办法
2万
查看次数

无法在Intent中传递自定义对象:对于类型Intent,Method Put Extra是不明确的

如果我试着写

Car myCarObject=getCar();
Intent details = new Intent(Start.this, DetailsCar.class);
                details.putExtra("Car", myCarObject);
                startActivity(details);
Run Code Online (Sandbox Code Playgroud)

Eclipse向我展示了一行编译错误"方法放置额外对于类型Intent是不明确的"

  details.putExtra("Car", myCarObject);
Run Code Online (Sandbox Code Playgroud)

如果我使用代码

Car myCarObject=getCar();
ArrayList<Car> parcelableExtra = new ArrayList<Car>();
                parcelableExtra.add(myCarObject);

Intent details = new Intent(Start.this, DetailsCar.class);
                details.putExtra("Car", parcelableExtra);
                startActivity(dettagli);
Run Code Online (Sandbox Code Playgroud)

我尝试在目标Intent中加载额外的代码

ArrayList<Car> parcelableExtra = new ArrayList<Car>();
        parcelableExtra = (ArrayList<Car>) getIntent().getExtras().getParcelable("Car");
        Car c=parcelableExtra.get(0);
Run Code Online (Sandbox Code Playgroud)

我收到了这个警告

12-14 05:30:07.669: W/Bundle(19823): Key Car expected Parcelable but value was a java.util.ArrayList.  The default value <null> was returned.
12-14 05:30:07.679: W/Bundle(19823): Attempt to cast generated internal exception:
12-14 05:30:07.679: W/Bundle(19823): java.lang.ClassCastException: java.util.ArrayList
12-14 …
Run Code Online (Sandbox Code Playgroud)

android parcelable android-intent

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

将JSONObject传递给另一个活动

我正在点击一个返回JSON数据的外部API(新的dvd标题).我能够解析出JSON并将每个DVD标题和其他DVD信息列入ListView就好了.我还能够为原始数据(标题字符串)设置一个onListItemClick方法.我最终为onListItemClick方法写了类似的东西:

需要注意的是,productArray是一个类var,由另一个包含JSONObject数组的方法设置.

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    Intent i = new Intent(DvdListingActivity.this, MovieProductActivity.class);
    try {
        JSONObject jsonObj = productArray.getJSONObject(position);
        i.putExtra("mTitle", jsonObj.getJSONObject("Title").opt("val").toString());
        i.putExtra("mRelDate", jsonObj.getJSONObject("RelDate").opt("val").toString());
        i.putExtra("mDesc", jsonObj.getJSONObject("Desc").opt("val").toString());
        i.putExtra("mRating", jsonObj.getJSONObject("MPAA").getJSONObject("Rating").opt("val").toString());
        i.putExtra("mActors", jsonObj.getJSONObject("Actors").opt("val").toString());
        i.putExtra("mImage", jsonObj.getJSONObject("Image").opt("val").toString());
        startActivity(i);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       

}
Run Code Online (Sandbox Code Playgroud)

上面的代码都有效,但我认为GOTTA是一种更好的方式让我将数据传递给另一个Activity.我以为我能够传递一个包含dvd影片所有数据的JSONObject,而不是单独设置每个数据点.

我尝试了一个半星期来弄清楚如何使用Parcelable.我尝试实例化一个新的JSONObject jsonObj,它实现了Parcelable而没有运气.我一直在我的LogCat中收到错误,该错误表示该对象是不可分割的.

我已经尝试过阅读Android开发者网站和其他博客,但我无法将他们的示例应用到我需要做的事情上.

任何帮助将非常感激

android parcelable android-activity

37
推荐指数
4
解决办法
6万
查看次数

如何使用嵌套对象创建一个类Parcelable

我想让A级Parcelable.

public class A {
    public String str;
    public ArrayList<B> list;
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所提出的.但是它崩溃了NullPointerException.问题是这两个陈述:dest.writeList(list);&in.readList(list, this.getClass().getClassLoader());.我无法弄清楚从这里做什么:(

A级

public class A implements Parcelable {
    public String str;
    public ArrayList<B> list;

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

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

    private A(Parcel in) {
        str = in.readString();
        in.readList(list, this.getClass().getClassLoader());
    }

    public static final Parcelable.Creator<A> CREATOR
            = new Parcelable.Creator<A>() {
        public A createFromParcel(Parcel in) {
            return …
Run Code Online (Sandbox Code Playgroud)

android parcelable

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

迁移到新的 kotlin-parcelize

谁能解释一下如何迁移到新的 kotlin-parcelize

我试过:

  1. 在 app build.gradle 中替换apply plugin: 'kotlin-android-extensions'apply plugin: 'kotlin-parcelize'
  2. 替换import kotlinx.android.parcel.Parcelizeimport kotlinx.parcelize.Parcelize

后者导致

Class 'ParcelZonedDateTime' is not abstract and does not implement abstract member public abstract fun describeContents(): Int defined in android.os.Parcelable
Run Code Online (Sandbox Code Playgroud)

例如,在此代码上:

import androidx.annotation.Keep
import kotlinx.parcelize.Parcelize
import org.threeten.bp.ZonedDateTime

@Keep
@Parcelize
data class ParcelZonedDateTime(var value: ZonedDateTime?) :Parcelable {
    override fun toString(): String {
        return value.toString()
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,如何迁移到新的kotlin-parcelize

更新:

基于评论:是的,我使用的是 Kotlin 1.4.20(比 1.4.20-M2 更新)。Kyzer 是正确的,IDE 中的错误(不是抽象的并且没有实现抽象成员 public …

android parcelable kotlin

34
推荐指数
1
解决办法
5105
查看次数

可分辨对象中的Arraylist

到目前为止,我已经看到了许多可以说明的例子,但由于某种原因,当它变得有点复杂时,我无法让它工作.我有一个Movie对象,它实现了Parcelable.此book对象包含一些属性,例如ArrayLists.在执行ReadTypedList时,运行我的应用程序会导致NullPointerException!我真的没有想法

public class Movie implements Parcelable{
   private int id;
   private List<Review> reviews
   private List<String> authors;

   public Movie () {
      reviews = new ArrayList<Review>();
      authors = new ArrayList<String>();
   }

   public Movie (Parcel in) {
      readFromParcel(in);
   }

   /* getters and setters excluded from code here */

   public void writeToParcel(Parcel dest, int flags) {

      dest.writeInt(id);
      dest.writeList(reviews);
      dest.writeStringList(authors);
   }

   public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() {

      public MoviecreateFromParcel(Parcel source) {
         return new Movie(source);
      }

      public Movie[] newArray(int size) {
         return new Movie[size]; …
Run Code Online (Sandbox Code Playgroud)

java android arraylist typed parcelable

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

解组时ClassNotFoundException:android.support.v4.view.ViewPager $ SavedState

我在Android崩溃报告中看到以下错误:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.view.ViewPager$SavedState
at android.os.Parcel.readParcelable(Parcel.java:1971)
at android.os.Parcel.readValue(Parcel.java:1859)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2128)
at android.os.Parcel.readSparseArray(Parcel.java:1581)
at android.os.Parcel.readValue(Parcel.java:1916)
at android.os.Parcel.readMapInternal(Parcel.java:2099)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1225)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:806)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:160)
at android.support.v4.view.ViewPager.populate(ViewPager.java:895)
at android.support.v4.view.ViewPager.populate(ViewPager.java:772)
at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)
at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422)
at android.view.ViewGroup.drawChild(ViewGroup.java:3028)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.View.draw(View.java:11017)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2175)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2234)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1810)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2695)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:4977)
at java.lang.reflect.Method.invokeNative(Native Method)
at …
Run Code Online (Sandbox Code Playgroud)

android parcelable android-viewpager

33
推荐指数
4
解决办法
1万
查看次数

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万
查看次数