Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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_Json_Android Studio_Gson - Fatal编程技术网

Java 如何将包含任意类型的对象发送到另一个活动?

Java 如何将包含任意类型的对象发送到另一个活动?,java,android,json,android-studio,gson,Java,Android,Json,Android Studio,Gson,我对Android编程相当陌生,我也遇到过这个问题 Intent i = new Intent(mActivity, DetailsActivity.class); Bundle b = new Bundle(); BusinessEntity business = businesses.get(position); SimpleBusiness simpleBusiness = new SimpleBusiness(busine

我对Android编程相当陌生,我也遇到过这个问题

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
我有一个对象正试图发送到一个新活动中,它是此类的一个实例:

public final class BusinessEntity extends com.google.api.client.json.GenericJson {

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
private Contact contact;

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
@com.google.api.client.json.JsonString
private java.lang.Long id;

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
private java.lang.String imageUrl;

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
private Person owner;

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
private java.util.List<java.lang.String> tag;

/**
 * The value may be {@code null}.
 */
@com.google.api.client.util.Key
private java.lang.String type;
        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
这是我在第二节课上学到的:

Bundle b = getIntent().getExtras();
String json = b.getString("business");

Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(json).getAsJsonArray();

Contact contact = gson.fromJson(array.get(0), Contact.class);
Long id = gson.fromJson(array.get(1), Long.class);
String imageURL = gson.fromJson(array.get(2), String.class);
Person person = gson.fromJson(array.get(3), Person.class);
List<String> tag = gson.fromJson(array.get(4), List.class);
        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
以及实施:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
在DetailsActivity类中:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
        Intent i = getIntent();
        Bundle b = i.getExtras();
        business = (SimpleBusiness)b.get("business");
谢谢你们的帮助。如果没有你们给我的建议,我可能会花更长的时间

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
--------------------------------------------编辑2--------------------------------------------

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
切换到使用EventBus直接传递BusinessEntity对象。简单多了。

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
传递对象:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
Intent i = new Intent(mActivity, DetailsActivity.class);
BusinessEntity business = businesses.get(position);
de.greenrobot.event.EventBus.getDefault().postSticky(business);
startActivity(i);
检索对象: @凌驾

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.busEntity = (BusinessEntity) EventBus.getDefault().removeStickyEvent(BusinessEntity.class);
    setContentView(R.layout.activity_details);
}

如果您能够修改BusinessEntity,那么让它实现
Serializable
。然后,您可以将该业务作为额外业务:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
//To put the object as an extra
...
BusinessEntity business = businesses(get(position));
Intent intent = new Intent(mActivity, DetailsActivity.class);
intent.putExtra("business", business); // Where business is now a `Serializable`
...

//To retrieve the object (in your second class). 
//TODO -- Include check to see if intent has the extra first
BusinessEntity retrievedBusiness = (BusinessEntity) intent.getSerializableExtra("business")

您应该使用可包裹的对象

您可以通过
Serializable
接口执行此操作。只需让您的
BusinessEntity
实现可序列化,如下所示:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
public final class BusinessEntity extends com.google.api.client.json.GenericJson implements Serializable {
     //your code here
     ...
     ...
}
然后创建您的意图并添加额外的内容:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
Intent i = new Intent(mActivity, DetailsActivity.class);
i.putExtra("BusinessEntity", yourBuisnessEntityObject);
startActivity(i);
最后,在您的详细活动中:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
BusinessEntity business = (BusinessEntity) getIntent().getSerializableExtra("BusinessEntity");
瞧!您拥有详细的BusinessEntity对象活动

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
编辑:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);
回到您的代码,我认为问题在于您放置了一个JsonObject额外对象,而不是JsonArray。你应该做与你第一次发布的相同的事情,但有一个更正:

        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);

JsonObject object=parser.parse(json.getAsJsonObject()然后通过键将其解析为JsonObject。

EventBus使您的生活变得更加轻松,请参阅我对这个问题的回答中的示例和链接:本质上,不需要进行任何序列化或任何操作,只需将对象放在EventBus上,然后在代码中的任何位置(在另一个活动、片段、服务等中)再次获取它即可

它不是一个
JsonArray
我想,它一定是一个
JsonObject
是这样吗?无论你做什么,都不要将它设置为静态引用:(EventBus让您的生活变得更加轻松,请参阅我回答这个问题时的示例和链接:本质上,不需要进行任何序列化或任何操作,只需将对象放在EventBus上,然后在代码中的任何位置(在另一个活动、片段、服务等中)再次获取它即可。)@cYrixmorten哇,这正是我需要的。谢谢。很高兴我能帮上忙;)这是我见过的最简单但功能极其强大的工具之一。可能还想研究一下ButterKnife,用于视图注入,Dagger用于整个类的依赖项注入(Dagger一开始有点复杂,但非常简洁)例如,如果我需要GPS位置,我需要在代码中编写
@InjectLocationsModule LocationsModule
。所有这些工具都可以大大减少代码行数,并使其更易于维护。我得到一个java.lang.ClassCastException:java.util.HashMap无法转换为classpath.BusinessEntity是否传递了业务(HashMap)代替业务(业务实体)?不只是BusinessEntity businessI将尝试此操作,但这意味着我需要编辑所有3个类,BusinessEntity、Contact和Person,以实现ParcelableFine,请给出对您有效的答案,以便对其他人有所帮助。我得到一个java.lang.ClassCastException:java.util.HashMap无法转换为类路径。BusinessEntity@swanhella其中我ine?
BusinessEntity business=(BusinessEntity)getIntent().getSerializableExtra(“BusinessEntity”);
如何将一个businessObject放入intent?您能提供该对象吗?
intent i=newintent(mActivity,DetailsActivity.class);
BusinessEntity BusinessEntity business=businesses.get(position);
i.puttera(“BusinessEntity”,business);
startActivity(i);
        Intent i = new Intent(mActivity, DetailsActivity.class);
        Bundle b = new Bundle();

        BusinessEntity business = businesses.get(position);
        SimpleBusiness simpleBusiness = new SimpleBusiness(business);
        i.putExtra("business", simpleBusiness);
        //i.putExtras(b);
        startActivity(i);