在Android中将一个对象从一个应用程序传递到另一个应用程序

3

经过大量的搜索,我无法找到一种方法来将一个对象从一个应用程序传递到另一个应用程序。虽然我知道我们可以使用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());

抱歉,我删除了我的回答,我没有完全阅读你的问题。 - AMerle
1
这个?http://stackoverflow.com/a/12407484/646806 - RobinHood
6个回答

3
我假设你负责这两个应用程序。
以下哪种情况是正确的?
- 两个应用程序都依赖于单个数据存储 - 应用程序相对独立,但用户可能想要从一个应用程序共享一些数据到另一个应用程序中
如果第一种情况是正确的,正常的方式是创建一个Android内容提供程序(如先前建议的)或服务,使用AIDL语言公开API。然后,两个应用程序将依赖于内容提供程序或服务。
有关AIDL和服务的信息,请参见此处: http://developer.android.com/reference/android/app/Service.html http://developer.android.com/guide/components/aidl.html 如果应用程序是对等的,则现有的有关意图的答案很好。任何一个应用程序都可以使用startActivity触发另一个应用程序,或者您可能希望提供一种方法,让用户选择从一个应用程序共享对象到另一个应用程序。请查看此处: http://developer.android.com/training/sharing/send.html

通过使用这个解决方案,我们可以共享那些对于两个应用程序都已知的对象(类),例如URI包裹,但问题是如何发送一个在一个应用程序中已知但在另一个应用程序中未知的对象。 - Atul Bhardwaj
如果不知道该对象属于哪个对象,你打算将传入的对象映射到哪个对象? - Tobrun
1
你能告诉我们更多关于确切的用例吗?我不明白如何在逻辑上从一个应用程序发送数据到另一个应用程序,除非第二个应用程序也理解这些数据。 - Adrian Taylor
@AdrianTaylor 我有两个由我创建的应用程序。它们互相依赖。 - Atul Bhardwaj
5
好的。因此,创建一个Android“库项目”,其中包含一个单独的类 - 您对象的定义。您的对象必须实现Parcelable,并包含一个名为CREATOR的类型为Parcelable.Creator <YourObject>的静态final变量。然后,安排两个应用程序依赖于库项目 - 它们将能够使用该类。最后,您可以使用putExtra将Parcelable类作为额外项添加到意图中。希望这可以解决问题! - Adrian Taylor
“图书馆项目”是关键部分,如果在图书馆中没有一个可包装的对象,仅仅将它们复制到应用程序中是无法工作的。 - Berkay Turancı

1

有另一种最好的方法来使用库中的这些对象和方法,即将该库作为全局库添加到您的Android项目中。您可以在该库中声明自己的类,并且另一个特性是jar文件,您可以将这些类放在jar文件中并重复使用它.... 这个链接可能对您有用.............. 如何创建自己的Android开发库以在编写的每个程序中使用?


1
一个建议是使用ContentProviders
来自参考文献:
内容提供者是Android应用程序的主要构建块之一,为应用程序提供内容。它们通过单个ContentResolver接口封装数据并将其提供给应用程序。
另一个建议是使用SharedPreferences,使用getSharedPreferences和正确的mode。但是,正如您在参考文献中所看到的,一些模式已经自API Level 17起被弃用。
希望这可以帮助您,如果不能,请在下面评论。

这可能是个解决方案。但我认为应该有其他选项来共享对象。 - Atul Bhardwaj

0
如果您需要共享相对非常小的数据,请使用易于实现的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;
    }

如果你有相当大的数据,你也可以使用内容提供者


您所建议的使用 SharedPreference 的方法在 API 级别17中已被弃用。 - Tobrun
我在开发者文档中没有看到它。你能提供给我源代码吗? - Gaurav Arora

-1

-2
在活动之间传递对象:
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将对象从一个活动传递到另一个活动,但是 - Tobrun
你认为这是我的问题吗? - Atul Bhardwaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接