Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将包从一个活动传递到另一个活动时发生包裹器错误_Java_Android_Parcelable_Parceler - Fatal编程技术网

Java 将包从一个活动传递到另一个活动时发生包裹器错误

Java 将包从一个活动传递到另一个活动时发生包裹器错误,java,android,parcelable,parceler,Java,Android,Parcelable,Parceler,我决定使用Parceler,因为它看起来像一个很棒的图书馆,而且它得到了作者的很好的支持。我正在使用Parceler包装一个对象,并将其以捆绑方式传递给另一个活动。当我试图打开对象时,我得到了一个错误:android.os.Bundle无法转换为org.parceler.ParcelWrapper 我的第一个活动代码: User user = responseData.getUser(); Bundle bundle = new Bundle(); bundle.putParc

我决定使用Parceler,因为它看起来像一个很棒的图书馆,而且它得到了作者的很好的支持。我正在使用Parceler包装一个对象,并将其以捆绑方式传递给另一个活动。当我试图打开对象时,我得到了一个错误:
android.os.Bundle无法转换为org.parceler.ParcelWrapper

我的第一个活动代码:

 User user = responseData.getUser();
    Bundle bundle = new Bundle();
    bundle.putParcelable("User", Parcels.wrap(user));
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("User", bundle);
    startActivity(intent);
User user = Parcels.unwrap(this.getIntent().getParcelableExtra("User"));
我的第二个活动代码:

 User user = responseData.getUser();
    Bundle bundle = new Bundle();
    bundle.putParcelable("User", Parcels.wrap(user));
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("User", bundle);
    startActivity(intent);
User user = Parcels.unwrap(this.getIntent().getParcelableExtra("User"));

我怀疑这只是一个新手的错误。任何建设性的协助都将不胜感激

您只需要将包装好的对象作为
putExtra
的参数,而不是
Bundle
。以下是解决方案:

User user = responseData.getUser();
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("User", Parcels.wrap(user));
startActivity(intent);
在SecondActivity上,在其onCreate()方法中执行以下操作:

User user = (User) Parcels.unwrap(getIntent().getParcelableExtra("User"));

您只需要将包装好的对象作为
putExtra
的参数,而不是
Bundle
。以下是解决方案:

User user = responseData.getUser();
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("User", Parcels.wrap(user));
startActivity(intent);
在SecondActivity上,在其onCreate()方法中执行以下操作:

User user = (User) Parcels.unwrap(getIntent().getParcelableExtra("User"));

kotlin中,您可以按如下方式进行操作:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
在第二个活动中,您将在其中获取数据,您可以按如下方式执行:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
注意:使用此库时,您需要使用
包裹。包裹
包裹。展开

尽管如此,我还是建议如果您使用
Kotlin
您使用
@Parcelize
注释,因为它的实现非常简单,并且您的代码非常干净

如果要实施
@Parcelize
,可以按以下步骤执行:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
首先,在build.gradle文件中添加以下内容:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'  

android {
        // ... other codes

        // Add this code 
        androidExtensions {
            experimental = true
        }
    }
其次,创建具有必要属性的数据类用户:

@Parcelize
data class User(
  val userId: Int,
  val name: String,
  // more properties
) : Parcelable

kotlin中,您可以按如下方式进行操作:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
在第二个活动中,您将在其中获取数据,您可以按如下方式执行:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
注意:使用此库时,您需要使用
包裹。包裹
包裹。展开

尽管如此,我还是建议如果您使用
Kotlin
您使用
@Parcelize
注释,因为它的实现非常简单,并且您的代码非常干净

如果要实施
@Parcelize
,可以按以下步骤执行:

val user = responseData.getUser()
val bundle = Bundle()
bundle.putParcelable("User", Parcels.wrap(user))
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
intent.putExtra("User", bundle)
startActivity(intent)
val user: User = Parcels.unwrap(data?.getParcelableExtra("User"))
首先,在build.gradle文件中添加以下内容:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'  

android {
        // ... other codes

        // Add this code 
        androidExtensions {
            experimental = true
        }
    }
其次,创建具有必要属性的数据类用户:

@Parcelize
data class User(
  val userId: Int,
  val name: String,
  // more properties
) : Parcelable

要在接收端添加以展开对象:
User User=(User)Parcels.unwrap(getIntent().getParcelableExtra(“User”)
在接收端添加以展开对象:
User User=(User)Parcels.unwrap(getIntent().getParcelableExtra(“User”)