1

重複の可能性:
アプリケーションから Web ブラウザーをロードするときのシリアライズ可能なクラッシュ エラー

インターフェイスのボタンをクリックしてアプリケーションから Web ブラウザーを開こうとすると、クラッシュを引き起こすコードの下

MainTest.java

package com.heeere.androiddnssd.discovery;

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;

public class MainTest extends Activity {

    private Discovery discovery; 

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

    @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);
        Button b = (Button)this.findViewById(R.id.button);
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
                startActivity(browserIntent);
            }
        });
    }

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

Discovery.java

package com.heeere.androiddnssd.discovery;

import java.io.Serializable;

public class Discovery implements Serializable {


    private static final long serialVersionUID = 637576886455091135L;
    private MainTest maintest;
    //android.os.Handler handler = new android.os.Handler();

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

}

ここで、Discovery のコンストラクターから MainTest Class 型を削除すると、バグは消えます。それがクラッシュの原因です。

Discovery のコンストラクターから MainTest クラス タイプを削除せずにこの問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

この問題は、関連するオブジェクトを作成するときにメイン アクティビティをシリアライズ可能なクラスに渡すことが原因です。この場合、オブジェクトを作成するときにMainTestオブジェクトにオブジェクトを渡します。Discovery解決策: すべての Discovery データ (シリアライズ可能にするデータ) を含む別のシリアライズ可能クラスを作成します。

于 2012-09-17T10:48:39.560 に答える