0

サーバー内のデータに対してユーザー ログイン (ユーザー名 + パスワード) を検証するために、Main.java という名前の Android アプリにクラスがあります。最初は成功しました。私はそれを行うために AsyncTask スレッドを使用し、さらに Http 接続を処理するライブラリを使用して HttpPostAux.java を呼び出しました (実際、このフォーラムでライブラリのコードを見つけました)。AsyncTask の onPostExecute メソッドで、現在のアクティビティを変更するのではなく、新しいアクティビティを作成して開始し、それが機能しました。

でも今は違うことをしたい。検証済みのデータ (ユーザー名 + パスワード) を AsyncTask スレッドの SQLite テーブルに保存し、UI スレッドでそのデータを回復し、それを使用して前述のアクティビティを開きたいと考えています。挿入は発生しますが、UI スレッドからデータベースにアクセスしようとすると、テーブルが空であると表示されます。logcat を調べたところ、AsyncTask スレッドの前に UI スレッドが実行されることがわかりました。

私の質問は、AsyncTask スレッドにデータを挿入し、UI スレッド内でデータを復元する方法です。誰でもここで助けてもらえますか? 私はちょっと迷っています!

コード例をいただければ幸いです。前もって感謝します!ベネズエラからこんにちは!

4

4 に答える 4

5

UI スレッドは、アプリケーションのメイン スレッドです。を作成するAsyncTaskと、時間のかかるタスクがdoInBackground別のスレッドで (関数内で) 実行されます。doInBackground完了するonPostExecute()と、UI スレッドから呼び出されます。したがって、内部から UI スレッド task(="recover that data and use it to open the following activity") を実行するだけですonPostExecute()

于 2012-10-03T14:27:53.893 に答える
0

以前のやり方は正しいと思います。ユーザーが以前にログインしたことがあるかどうか、つまりデータベースにユーザー名/パスワードがあるかどうかを確認する一種の SplashScreen アクティビティを作成することをお勧めします。この場合は、このデータを使用してユーザーをログインさせてから、メインのアクティビティに進みます。ユーザーが以前にログインしたことがない場合は、ログイン画面を表示し、将来の使用のためにこのデータを保存して、メインのアクティビティに進みます。

于 2012-10-03T14:32:21.500 に答える
0

データベースへの挿入が完了したときに、AsyncTask から送信されたインテントをリッスンする UIThread に BroadcastReciever を実装できます。

AsyncTask から発火:

Intent intent = new Intent("DATABASE_INSERTION_DONE");
context.sendBroadcast(intent );

UiThread に登録します。

IntentFilter intentFilter = new IntentFilter("DATABASE_INSERTION_DONE");
registerReceiver(myIntentsReceiver, intentFilter);

クラス:

class MyIntentReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if ("DATABASE_INSERTION_DONE".equals(intent.getAction())) {
            //do something
        }
    }
}
于 2012-10-03T14:32:31.233 に答える