-1

私はAndroid向けのプログラミングに比較的慣れていないため、(おそらく単純な)問題に悩まされています。私は何時間もいじってみましたが、どこにも行きません...

私のコードは次のとおりです。デバイスが回転してアクティビティが再開されると、アプリが停止します。onSaveInstanceState および onRestoreInstanceState メソッドを使用しましたが、役に立ちません! 誰か見てください:

public class DebugActivity extends Activity implements GPSCallback{
private GPSManager gpsM=null;
private ConvertSpeed conS =null;
private double speed = 0.0;

    @Override
    public void onCreate(Bundle savedInstanceState){
        if(savedInstanceState != null){
            speed = savedInstanceState.getDouble("speed");
        }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_debug);
        gpsM = new GPSManager();
        gpsM.startListening(getApplicationContext());
        gpsM.setGPSCallback(this);
        conS = new ConvertSpeed();
    }
    @Override
    public void onSaveInstanceState(Bundle outState){
        outState.putDouble("speed",speed);
        super.onSaveInstanceState(outState);
    }
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
        speed = savedInstanceState.getDouble("speed");
    }
@Override
    public void onDestroy(){
        gpsM.stopListening();
        gpsM.setGPSCallback(null);
        gpsM = null;
    }
    @Override
    public void onGPSUpdate(Location location) {
        location.getLatitude();
        location.getLongitude();
        speed = location.getSpeed();
        String speedString = "" + conS.convertSpeed(speed,2);
        TextView debug1 = ((TextView)findViewById(R.id.tvSpeed));
        debug1.setText(speedString);
    }
}

デバッグ:

このonCreateメソッドでは、アクティビティが初めて実行されます。

if(savedInstanceState != null){
speed = savedInstanceState.getDouble("speed");

それは示しoutState = nullspeed = 0.0

画面が回転し、onSaveInstanceStateメソッドが表示outState = Bundle[{speed=0.0}]され、2 秒後に到達せずにクラッシュonRestoreInstanceStateonCreateます。

4

2 に答える 2

0

onCreateこれをに置き換えます

@Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_debug);

        if(savedInstanceState != null){
            speed = savedInstanceState.getDouble("speed");
        }

        gpsM = new GPSManager();
        gpsM.startListening(getApplicationContext());
        gpsM.setGPSCallback(this);
        conS = new ConvertSpeed();
    }

そしてonSaveInstanceState_

 @Override
    public void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        outState.putDouble("speed",speed);
    }

これを削除onRestoreInstanceState

 @Override
    public void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
        speed = savedInstanceState.getDouble("speed");
    }

あなたがそれをした後、それはうまくいくでしょう

于 2013-11-01T23:11:23.983 に答える