1

2つのアクティビティがあります。1つはアプリケーションのメインページで、もう1つは登録用です。私のメインページの本文は次のようなものです。

 public void onCreate(Bundle savedInstanceState)
 {
     registerOperation();

     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     System.out.println("Already logged in");
 }
 public void registerOperation()
 {
     //checks if I did logged in already. if true start a new Intent of my Registeration page and stop the current Intent.
 }

私のテストではまだ登録していないので、registerOperationの条件は真であり、新しいアクティビティが起動していますが、数秒後にアプリが停止します。すでに登録ページを使用していましたが、別の方法で呼んでいて、すべて問題ないので、呼んでいる方法に問題があると思います。また、registerOperationを呼び出した後の出力行は、レジスタアクティビティの実行中に実行されます。

編集 特定のコードを見たい場合は私に知らせてください、そして私は投稿を更新します。

アクティビティコードを渡します。

    public void registerOperation()
    {
        SharedPreferences pref = getSharedPreferences("MyKid",MODE_PRIVATE);
        String email = pref.getString("email", null);
        String password = pref.getString("password", null);
        if(email == null && password == null)
        {
            this.stopService(this.getIntent());
            Intent register = new Intent(getBaseContext(), Register.class);
            startActivity(register);
        }
    }

logcatの編集 :

12-31 11:27:38.610:E / AndroidRuntime(28903):java.lang.RuntimeException:アクティビティを停止できません{com.example.android.location/com.example.android.location.Track}:java.lang。 NullPointerException

4

4 に答える 4

2

// これは 2 番目の質問用です

public void onCreate(Bundle savedInstanceState)
     {
         if (registerOperation()){
             System.out.println("Already logged in");
             return;
         } 

         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);


     }
     public void registerOperation()
     {
         //checks if I did logged in already. if true start a new Intent of my Registeration page and stop the current Intent.
     }

// と

public boolean registerOperation()
    {
        SharedPreferences pref = getSharedPreferences("MyKid",MODE_PRIVATE);
        String email = pref.getString("email", null);
        String password = pref.getString("password", null);
        if(email == null && password == null)
        {
            this.stopService(this.getIntent());
            Intent register = new Intent(getBaseContext(), Register.class);
            startActivity(register);
            return true;
        }
        return false;
    }
于 2012-12-31T09:32:32.943 に答える
0

アクティビティで実行中にサービスを停止しようとしています。線を取り除く

this.stopService(this.getIntent());

とにかく、他のアクティビティを呼び出す方法に問題はありません。アクティビティを参照するインテントをオプションとして指定して、サービスを停止しようとしているだけです。これはおそらく Logcat エラーです。

アクティビティを実際にシャットダウンする特別な理由がない場合は、アクティビティをそのままにして、スタックを意図したとおりに機能させてください。

これをアクティビティに追加します:

@Override
protected void onStop() {
    super.onStop();
    finish();
}

そうすれば、別のアクティビティに切り替えるときにアクティビティが適切に破棄されます。

于 2012-12-31T09:27:28.833 に答える
0

次のようなことを試してください::

onCreate() から不要なコードを削除してみてください::

 public void onCreate(Bundle savedInstanceState)
 {
  boolean a = registerOperation();

 super.onCreate(savedInstanceState);

  if(a)
    { 
       setContentView(R.layout.main);

       System.out.println("Already logged in"); }
     }
 public boolean registerOperation()

     {


    SharedPreferences pref = getSharedPreferences("MyKid",MODE_PRIVATE);
    String email = pref.getString("email", null);
    String password = pref.getString("password", null);
    if(email == null && password == null)
    {   return false; //Using these flags you can find out whether to redirect to Registration or Already Logged in Page
        this.stopService(this.getIntent());
        Intent register = new Intent(getBaseContext(), Register.class);
        startActivity(register);
    }
      return true;
     }
于 2012-12-31T09:36:47.623 に答える
0

アプリケーションが停止した理由は、onStop メソッドをオーバーライドし、その内部で初期化されていないオブジェクトを使用したためです。アプリケーションの構築方法を変更したため、それらのオブジェクトを忘れたのはそのためだと思います。

コメントとヘルプをありがとう。

于 2012-12-31T09:38:58.327 に答える