【问题标题】:Passing an object from one application to another in android在android中将对象从一个应用程序传递到另一个应用程序
【发布时间】:2013-01-16 13:32:52
【问题描述】:

经过大量的谷歌搜索,我找不到任何方法将对象从一个应用程序传递到另一个应用程序。虽然我知道我们可以使用 Parcel 将对象从一个活动传递到另一个活动,但是如何在应用程序之间做到这一点? 我的对象是这个

public class MyObject
{
    private String name;
    public String getName()
    {
        return this.name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
}

那么如何像我们在活动之间传递对象一样这样做

intent.putExtra("key",new MyOject());

【问题讨论】:

标签: android serialization ipc parcelable aidl


【解决方案1】:

一个建议可能是使用ContentProviders

来自参考:

内容提供程序是 Android 应用程序的主要构建块之一,为应用程序提供内容。它们封装数据并通过单个 ContentResolver 接口将其提供给应用程序。

另一个建议是使用 SharedPreferences,getSharedPreferences 和正确的 mode。但正如您在参考资料中看到的,某些模式自 API 级别 17 以来已被弃用。

希望对您有所帮助,如果没有在下面发表评论

【讨论】:

  • 这可能是一个解决方案。但我认为应该有其他选项来共享对象。
【解决方案2】:

很遗憾,如果对象不是 Parcelable,则您无法在应用程序之间按原样共享对象。

但是您可以在服务和 AIDL 的帮助下做到这一点:http://developer.android.com/guide/components/aidl.html

【讨论】:

    【解决方案3】:

    传递对象 b/w 活动:

    public class MyObject  implements Parcelable{
    
        private String name;
        public String getName()
        {
        return this.name;
        }
        public void setName(String name)
        {
         this.name=name;
        }
    
        public MyObject() {
    
        }
    
        // Parcelling part
        public MyObject(Parcel in){
            this.name = in.readString();
        }
    
    
        @Override
        public int describeContents() {
            return 0;
        }
    
    
        @Override
        public void writeToParcel(Parcel dest, int arg1) {
            dest.writeString(this.name);
        }
    
    
    
        public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
            public MyObject createFromParcel(Parcel in) {
                return new MyObject(in); 
            }
    
            public MyObject[] newArray(int size) {
                return new MyObject[size];
            }
        };
    }
    
    
    //set Intent
    Intent i= new Intent();
    MyObject  o;
    i.putExtra("obj", o);
    
    
    
    //getIntent
    Bundle data = getIntent().getExtras();
    MyObject obj = data.getParcelable("obj");
    

    【讨论】:

    • 引用问题:虽然我知道我们可以使用 Parcel 将对象从一个活动传递到另一个活动..
    • 你认为这是我的问题吗?
    【解决方案4】:

    我假设你负责这两个应用程序。

    以下哪种情况是正确的?

    • 两个应用程序都依赖于一个数据存储
    • 应用程序相当独立,但用户可能希望从一个应用程序共享一些数据到另一个应用程序

    如果第一种情况属实,通常的方法是创建一个 Android 内容提供程序(如前所述)或一个服务,它使用 AIDL 语言公开一个 API。两个应用程序都将依赖于内容提供者或服务。

    有关 AIDL 和服务的信息,请参见此处: http://developer.android.com/reference/android/app/Service.html http://developer.android.com/guide/components/aidl.html

    但是,如果应用程序是对等的,那么有关 Intent 的现有答案是好的。一个应用程序可以简单地使用startActivity 触发另一个应用程序,或者您可能希望为用户提供一种选择从一个到另一个共享对象的方式。看这个: http://developer.android.com/training/sharing/send.html

    【讨论】:

    • developer.android.com/training/sharing/send.html, 通过使用这个解决方案,我们只能共享那些应用程序都知道的对象(类)(例如 URI 包),但问题是发送一个已知的对象应用但不在其他
    • 如果对象未知,你要将传入的对象映射到哪个对象?
    • 您能告诉我们更多关于确切用例的信息吗?我看不出从一个应用程序向另一个应用程序发送一些数据在逻辑上是如何可能的,除非第二个应用程序也理解这些数据。
    • @AdrianTaylor 我有两个由我创建的应用程序。两者相互依赖。
    • 好的。因此,创建一个 Android“库项目”,其中包含一个类 - 对象的定义。您的对象必须实现 Parcelable,并包含一个名为 CREATOR 的静态最终变量,类型为 Parcelable.Creator。然后,安排这两个应用程序依赖于库项目——它们将能够使用该类。最后,您可以使用 putExtra 将 Parcelable 类作为附加项添加到 Intent 中。希望这能解决问题!
    【解决方案5】:

    如果您必须共享相对非常小的数据,请使用易于实现的Shared Preferences

    public static void addData(Context context, String data) {
        SharedPreferences sharedPref = context.getSharedPreferences(app_name, 0);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("Name", data);
        editor.commit();
        }
    
    public static String getData(Context context) {
        SharedPreferences sharedPref = context.getSharedPreferences(app_name, 0);
        String fontSize = sharedPref.getString("Name", "default");
        return fontSize;
        }
    

    或者,如果您有相当大的数据,您也可以使用Content Provider

    【讨论】:

    • 在 API 级别 17 中不推荐使用您所建议的 SharedPreference。
    • 我在开发者的文档中没有看到它。可以提供一下源码吗?
    【解决方案6】:

    还有另一种最佳方式在全局库中使用这些对象和方法并将该库添加到您的 android 项目中。您可以在该库中声明自己的类,另一个功能是 jar 文件,您可以在其中放置类jar 文件,你可以重新使用它.... 此链接可能对您有用..................How to create your own library for Android development to be used in every program you write?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      相关资源
      最近更新 更多