2012-09-13 31 views
1

我正在开发一个应用程序。从我的应用程序加载web broser时出现可序列化的崩溃错误

本申请含有2类

  • 它实现序列化

    发现类

  • 延伸活动

在主类我请涉及的机器人的网络浏览器的主要类点击应用程序界面中的按钮。这种行为会导致崩溃。

波纹管是代码:

MainTest.java

package com.heeere.androiddnssd.discovery; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainTest extends Activity { 

    android.net.wifi.WifiManager.MulticastLock lock; 
    private Discovery discovery; 
    private TextView textView; 

    /** Called when the activity is first created. */ 

    @SuppressLint("NewApi") @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState == null) 
      discovery = new Discovery(this); 
     else 
      discovery = (Discovery) savedInstanceState.getSerializable("discovery"); 
     setContentView(R.layout.main); 
     textView = (TextView)this.findViewById(R.id.text); 
     Button b = (Button)this.findViewById(R.id.button); 
     b.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       //discovery.setUp(); 
       Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); 
       startActivity(browserIntent); 
      } 
     }); 

     android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE); 
     lock = wifi.createMulticastLock("mylockthereturn"); 
     lock.setReferenceCounted(true); 
     lock.acquire(); 

    } 

    @Override 
    protected void onSaveInstanceState(final Bundle outState) { 
     outState.putSerializable("discovery", discovery); 
     super.onSaveInstanceState(outState); 
    } 

    public void updateView() { 
     String msg = discovery.getMsg(); 
     textView.setText(msg); 
    } 


    @SuppressLint("NewApi") @Override 
    protected void onStop() { 
     discovery.stop(); 
     lock.release(); 
     super.onStop(); 
    } 


} 

Discovery.java

package com.heeere.androiddnssd.discovery; 

import java.io.IOException; 
import java.io.Serializable; 

import javax.jmdns.JmDNS; 
import javax.jmdns.ServiceEvent; 
import javax.jmdns.ServiceListener; 

public class Discovery implements Serializable { 


    private static final long serialVersionUID = 637576886455091135L; 
    private String type = "_ikunet._tcp.local."; 
    private String msg=""; 
    private JmDNS jmdns = null; 
    private ServiceListener listener = null; 
    private MainTest maintest; 
    android.os.Handler handler = new android.os.Handler(); 

    public Discovery (MainTest maintest) { 
     this.maintest = maintest; 
     setUp(); 
    } 

    public void setUp() { 

     try { 
      jmdns = JmDNS.create(); 
      jmdns.addServiceListener(type, listener = new ServiceListener() { 

       public void serviceResolved(ServiceEvent ev) { 
        msg = msg + ev.getInfo().getName()+ "\n"; 
        update(); 
       } 

       public void serviceRemoved(ServiceEvent ev) { 
       } 

       public void serviceAdded(ServiceEvent event) { 
        jmdns.requestServiceInfo(event.getType(), event.getName(), 1); 
       } 
      }); 
     } catch (IOException e) { 
      //e.printStackTrace(); 
      return; 
     } 
    } 

    public String getMsg() { 
     return msg; 
    } 

    private void update() { 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       maintest.updateView(); 
      } 
     }, 1); 
    } 


    public void stop() { 
     if (jmdns != null) { 
      if (listener != null) { 
       jmdns.removeServiceListener(type, listener); 
       listener = null; 
      } 
      jmdns.unregisterAllServices(); 
      try { 
       jmdns.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      jmdns = null; 
     } 
    } 

} 

logcat的

09-13 15:08:30.507: E/AndroidRuntime(15775): Uncaught handler: thread main exiting due to uncaught exception 
09-13 15:08:30.517: E/AndroidRuntime(15775): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.heeere.androiddnssd.discovery.Discovery) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Parcel.writeSerializable(Parcel.java:1131) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Parcel.writeValue(Parcel.java:1085) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Parcel.writeMapInternal(Parcel.java:469) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Bundle.writeToParcel(Bundle.java:1445) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Parcel.writeBundle(Parcel.java:483) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.app.ActivityManagerProxy.activityPaused(ActivityManagerNative.java:1427) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3106) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.app.ActivityThread.access$2400(ActivityThread.java:119) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Looper.loop(Looper.java:123) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.app.ActivityThread.main(ActivityThread.java:4363) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.lang.reflect.Method.invokeNative(Native Method) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.lang.reflect.Method.invoke(Method.java:521) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at dalvik.system.NativeStart.main(Native Method) 
09-13 15:08:30.517: E/AndroidRuntime(15775): Caused by: java.io.NotSerializableException: android.os.Handler 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1547) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:420) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1251) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660) 
09-13 15:08:30.517: E/AndroidRuntime(15775): at android.os.Parcel.writeSerializable(Parcel.java:1126) 
09-13 15:08:30.517: E/AndroidRuntime(15775): ... 16 more 

回答

1

问题是由于创建其相关对象时,主要活动传递给序列化类。在我们的例子中,在创建它时将MainTest对象传递给Discovery对象。 解决方案:创建另一个包含所有发现数据(可串行化数据)的可序列化类。

-1

错误是相当清楚的:Caused by: java.io.NotSerializableException: android.os.Handler

图如何采取处理出来:android.os.Handler handler = new android.os.Handler();

+0

您应该创建另一个只包含数据的类,而不需要额外的逻辑。 – dmon

+0

我新安装在android和java中。有可能是更具体的或给我一个例子 – MOHAMED

+0

崩溃原因不是处理程序。请参阅此链接看到rel问题:http://stackoverflow.com/questions/12411012/crash-due-to-passing-context-to-a-serializable-class – MOHAMED

相关问题