0

MainActivityには login がありますview。でユーザー名とパスワードを確認しているときAsyncTaskに、ProgressDialog.

別の質問でリセットしない方法を尋ねたところ、でAsyncTask達成しましたがAndroidManifest.xml、向きを変えても削除されないようにユーザー名とパスワードを保存する必要がありますがonSaveInstanceStateonRestoreInstanceStateメソッドは呼び出されていません。

android:configChanges問題はinに関連しているに違いないと思いますAndroidManifest。手伝って頂けますか?

これが私のコードです:

MainActivity.java

//Method called when login Button is pressed
public void entrar(View view) {     
    /* Escondemos el teclado */
    InputMethodManager imm = (InputMethodManager)getSystemService(
                  Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editTextUsuario.getWindowToken(), 0);
    /* Comprobamos si hay conexión a Internet */
    if(myApplication.isOnline()) {
        LoadingMainTask myWebFetch = new LoadingMainTask(this);
        myWebFetch.execute();
    }
    /* Si no se dispone de conexión a Internet, mostramos un error */
    else {
        myApplication.mostrarMensaje(this, R.string.error_conexion_titulo, 
                    R.string.error_conexion_mensaje);
    }
}

private class LoadingMainTask extends AsyncTask<String, Void, Boolean> {
    private ProgressDialog dialog;
    private volatile boolean running = true;
    private MainActivity activity;
    TuplaUsuario tuplaUsuario = new TuplaUsuario();

    private LoadingMainTask(MainActivity activity) {
        this.activity = activity;
        context = activity;
        dialog = new ProgressDialog(context);
        dialog.setCancelable(true);
        dialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                cancel(true);
            }
        });
    }

    /** application context. */
    private Context context;

    @Override
    protected void onCancelled() {
        running = false;
    }

    @Override
    protected void onPreExecute() {
        this.dialog.setMessage(getString(R.string.loading));
        this.dialog.show();

    }

    @Override
    protected void onPostExecute(final Boolean success) {
        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            /* Si el login no es correcto, mostramos un error por pantalla */
            if (!tuplaUsuario.getOk()) {
                myApplication.mostrarMensaje(activity, R.string.error_datos_login_titulo, 
                        tuplaUsuario.getMensaje());
            }
            /* Entrar */
            else {
                Intent intent = new Intent(activity, TabsFacturasActivity.class);
                startActivity(intent);
            }
        } else {
            System.out.println("throw exception post");
            myApplication.throwException(activity);
        }
    }

    @Override
    protected Boolean doInBackground(final String... args) {
        while (running) {
            try{    
                String usuario = String.valueOf((editTextUsuario).getText());
                String password = String.valueOf((editTextPassword).getText());

                /* Check login */
                                }
                return true;
             } catch (Exception e){
                return false;
             }
        }
        return null;
    }
}

AndroidManifest.xml

<application
        android:allowBackup="true"
        //...
        android:configChanges="orientation" >
        <activity
            //This next two lines are what I was said to use and that works. Other answers were not useful
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/AppTheme"  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
4

2 に答える 2

0

android:configChanges に向きを追加すると、実行中のアクティビティが完全に再起動されず、そのような変更に適応できるようになりません。したがって、ユーザー名とパスワードを保存する必要がある場合は、MainActivity で次のメソッドをオーバーライドします

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT || newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        //do whatever you want
    }

    }
于 2013-08-29T11:12:28.663 に答える
0

あなたandroid:configChanges="orientation|screenSize"は自分で向きの変更を処理することをシステムに伝えています。その結果、アクティビティが再開されないためonSaveInstanceStateonRestoreInstanceState向きが変わった場合に呼び出されません。onConfigurationChanged代わりに使用してください。

于 2013-08-29T11:14:04.323 に答える