0

私の目標は、特定のdb 2値、idおよびpassに挿入することです。そのデータを要求する登録ページと、アクションを完了するためのボタンがあります。それで、ボタンリスナーで私は何をすべきですか?多くの人がスレッドの代わりにAsyncTask(私は使用するかどうかはわかりません)を使用するように私に言いました。このクラスは2つのパラメーターIDを取得して渡す必要があることを覚えておいてください..そして私が知る限り、スレッドはrunメソッドを呼び出すstart()メソッドを使用した後に開始し、runメソッドにはパラメーターがありません..どうすればそれらを渡すことができますか2つのパラメータ?とにかく私は非常に混乱しています。もう1つのことは、catchブロックで何らかのエラーが発生した場合、次のような特定の文字列にエラーを配置することです。String error = exceptionInstance.toString(); 次に、登録ページからその文字列を取得して、エラーを出力できます。

myThreadInstance.start(); textViewInstance.setText(myThreadInstance.getError());

それはある種のマラソンです..私は混乱しています!!!!!!!

4

1 に答える 1

1

私によると、使いやすく、スレッドの実行が完了したときにUiを更新するための個別のロジックを作成するための追加のコードを実行することなく、バックグラウンドスレッドをより適切に制御できるため、代わりにAsyncTaskThreadを使用します。進行単位を計算して、操作にかかる時間をユーザーに知らせます。やることなど

最初の質問は、どのように送信してボタンをクリックするかです。この場合、コンストラクターを次のように使用します。usernamepasswordAsyncTaskAsyncTask

LoginOperation loginopertion=new LoginOperation(strusername, strpassword);
loginopertion.execute("");

2番目の回答は、タスクが完了したときにUiを受け取り、更新する方法です。たとえば、実行が完了したときにUiを更新するためusernameに使用します。passwordAsyncTaskonPostExecuteAsyncTaskdoInBackground

public class LoginOperation extends AsyncTask<String, Void, String> {
    String strusername,strpassword;

    public LoginOperation(String strusername, String strpassword){
        this.strusername=strusername;
        this.strpassword=strpassword;
    }
    @Override
    protected void onPreExecute() {
        //show progressbar here 
    }
    @Override
    protected String doInBackground(String... params) {
        string result="";
        try
        {
            result=="success or fail";
            //do your network opertion here
        }
        catch(SQLException e)
        {
            result="ERROR";
        }
        return result;
    }      

    @Override
    protected void onPostExecute(String resultmsg) {    
        // show error here and update UI
        //or other opertion if login success
        textViewInstance.setText(resultmsg);
    }

}

AsyncTaskメソッドの詳細については、を参照してください。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-12-20T18:57:02.500 に答える