0

ユーザーがサービスにログインしたかどうかを確認する主なアクティビティがあります。ユーザーがログインしていない場合、新しいアクティビティが開きます。

if (userName == null) {
    Intent myIntent = new Intent(MainActivity.this, Login.class);
    MainActivity.this.startActivity(myIntent);
}

このアクティビティには、ユーザー名とパスワードのフィールドとログイン ボタンがあります。ユーザーはそこに情報を入力し、[ログイン] をクリックします。私はネットワークをすべて新しいスレッドで行います:

new Thread( new Runnable() {
    public void run() {
    try {                   
            Auth myAuth = new Auth(getApplicationContext());
    Boolean isAuth = false;
    isAuth=myAuth.getAuthToken(tUserName.getText().toString(), tPassword.getText().toString());
            Bundle b = new Bundle();
    b.putBoolean("isAuth", isAuth);
    Message msg = new Message();
    msg.setData(b);
    loginHandler.dispatchMessage(msg);
        }
        catch (InterruptedException ex) { ex.printStackTrace(); }
        catch (Exception ex) { ex.printStackTrace();}
        finally { }         }
    }).start();

これにより、メッセージがハンドラーにポストされます。

private static Handler loginHandler = new Handler () {
    @Override 
    public void handleMessage(Message msg) {
        mProgress.setVisibility(View.GONE);         

        if(msg.getData().getBoolean("isAuth")){
            // UNABLE TO CALL FINISH
        }
        else
        {
            CharSequence msg2 = "Login Failed";         
            Toast.makeText(context, msg2, Toast.LENGTH_SHORT).show();
        }
    }
};

isAuth が true の場合、ログイン アクティビティを自動的に閉じたい。

ログイン画面を実装するという私の計画は、間違った方向に進んでいる可能性があります。私に知らせてください。あなたが提案する別の方法を調べます。

4

1 に答える 1

3

finish()は静的メソッドではないため、そのクラスの特定のインスタンスに関連付けられます。静的メソッドから使​​用することはできません (定義上、クラスのインスタンスに関連付けられていません)。アクティビティへの参照を静的メソッドに取得できる場合は、呼び出す代わりに呼び出すfinish()ことができる場合があります。myActivity.finish()

おそらく、より良い解決策は、ログイン アクティビティで startActivityForResult() を呼び出すだけで、ログインが不要な場合はユーザーの操作なしでそのアクティビティが返されるようにすることです。

于 2012-08-03T20:53:53.443 に答える