如何在活动之间传递我自己的类的对象

时间:2015-01-16 10:50:40

标签: android

我想将对象传递给新活动 来自MainActivity

NetworkHandler nH=new NetworkHandler();

nH是我自己创建的类,我希望将此对象发送到新活动

5 个答案:

答案 0 :(得分:1)

两个可能的答案

  1. 你不能:因为你无法将对象从一个活动传递到另一个活动(除非它是Parcelable)在android

  2. 您可以:您可以使用shared preferences将原始数据从一个活动传递到另一个活动或者您可以使用单个实例(单个)类来设置/获取{{1从一个地方到另一个地方。

答案 1 :(得分:0)

开始新活动时,您的意图可以携带数据:

public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
}

问题是,该意图只能携带原始的SerializableParcelable数据类型。如果您有非可序列化的对象,例如网络套接字,则无法通过Intent附加功能发送它们。在这种情况下,您可能希望启动Service保存复杂数据(套接字,资源处理程序等)并在新活动中绑定到该服务。

查看这些资源:

答案 2 :(得分:0)

如果它与网络有关,那么它应该是自己的线程。

但是我可能会在我的应用的application中处理它,这样它就可以用于所有活动。

答案 3 :(得分:0)

您可以创建一个扩展Application类的类,并在其中创建该对象的单例。这样,您就可以在所有活动中访问此对象。

public class GlobalClass extends Application {

    NetworkHandler nH = null;

        public NetworkHandler getNetworkHandler() {
        if (nH == null) {
            nH = new NetworkHandler();
        }
        return nH;
    }
}
在您的AndroidManifest.xml中

提及您的类名称

<application
    android:name=".GlobalClass " >

您可以使用以下代码在任何类中访问此对象。

GlobalClass gObj = (GlobalClass) this.getApplication();

NetworkHandler nH = gObj.getNetworkHandler()

答案 4 :(得分:0)

如果NetworkHandler是Serializable,您可以序列化对象并将其传递给另一个Activity

class NetworkHandler implements Serializable{
....
}

以这种方式将其传递给另一个活动

   Bundle bundleObject = new Bundle();
                            Intent i = new Intent(this,SecondActivity.class);
    bundleObject.putSerializable(KEY, (Serializable) new NetworkHandler ());
    i.putExtras(bundleObject);
    startActivity(i);

在第二项活动onCreate get objet

Bundle bundleObject = getIntent().getExtras();
NetworkHandler  nh = (NetworkHandler) 
                            bundleObject.getSerializable
                                (KEY);

您还可以将Parcelable接口实现为NetworkHandler。