【问题标题】:intent can not putExtra object of type XMPPTCPConnection意图不能放置 XMPPTCPConnection 类型的额外对象
【发布时间】:2016-02-21 02:05:16
【问题描述】:

我阅读了这篇有趣的帖子How to pass an object from one activity to another on Android,发现我应该使用 putExtra 将对象发送到其他活动,并使用 getIntent().getSerializableExtra("name") 来接收它是必要的。但是当我使用 putExtra 时,它会强制我将 XMPPTCPConection 对象强制转换为 (java.io.Serializable)。

java android 代码:

  XMPPTCPConnection connection;
  connection=  xmppConnectio.getXMPPConnectio();
  if(connection.equals(null))
  Log.d("","is  null");
  else
  Log.d("","is not null");

  Intent intent=  new Intent(this,chat.class);
  intent.putExtra("connection", (java.io.Serializable) connection);
  startActivity(intent);

但它会引发异常

02-21 05:00:44.733    4672-4683/passargad.ehsan D/connected﹕ yes connected successfully :
02-21 05:00:44.733    4672-4672/passargad.ehsan D/﹕ is not null
02-21 05:00:44.733    4672-4672/passargad.ehsan D/AndroidRuntime﹕ Shutting down VM
02-21 05:00:44.733    4672-4672/passargad.ehsan W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x400205a0)
02-21 05:00:44.743    4672-4672/passargad.ehsan E/AndroidRuntime﹕ FATAL EXCEPTION: main
**java.lang.ClassCastException: org.jivesoftware.smack.tcp.XMPPTCPConnection**
at passargad.ehsan.MainActivity.triger(MainActivity.java:189)
at passargad.ehsan.XMPPConnectio$connectionXMPP.onProgressUpdate(XMPPConnectio.java:125)
at passargad.ehsan.XMPPConnectio$connectionXMPP.onProgressUpdate(XMPPConnectio.java:55)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432) at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4277)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

故事的有趣部分是它可以正确执行 3 次。但后来它坏了。

提前致谢!

【问题讨论】:

    标签: java android xmpp smack


    【解决方案1】:

    您必须转换为 Serializable 的事实应该已经告诉您问题所在。我在 JavaDoc 中查找了 XMPPTCPConnection,确实,它没有实现 Serializable

    您的应用程序在您尝试强制转换为Serializable 时死机,因为该类没有实现它。您引用的帖子提到“让自定义类实现Serializable”,并且由于它是自定义类,因此开发人员可以进行更改。使用库类,您没有该选项。


    您需要想出一个策略来管理连接,也许使用某种静态引用(查看使用WeakReference 以避免泄漏连接)。您还必须处理重新创建 Activity 时的情况(即设备轮换),并且在丢失对它的引用时能够重新建立连接。

    我很好奇管理这样的连接的最佳解决方案是什么。我没有直接的经验,但也许你可以仔细阅读 GitHub 上的一些 Smack 实现,看看其他开发人员是如何处理这个问题的。

    【讨论】:

    • 感谢您的评论。但是有没有其他方法可以让我将连接传递给其他活动并在 onCreate 中获取它
    • 你最好的办法是获取连接的所有参数——主机、端口、服务名称等——并将它们放入新活动的意图中,然后可以创建连接.
    • 你所说的方式意味着在每一个活动中我都应该重新连接。但我想使用已经连接的连接。我真的需要这个,我已经做了很多解决方案,比如 serealization , bundle , global,但是没有一个可以使用。
    • 我改变了我可以发送一个在这里实现了 Serializable 的类的场景是问题所在。 Parcelable encountered IOException when sending instance of an object to other activity谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多