0

sqlserver からユーザー名とパスワードを取得する単純なログイン アプリケーションを 1 つ作成しました。正常に動作します...

ログイン プロセス中に ayntask を使用して 1 つの進行状況バーを表示する必要があります... しかし、ayntask でパラメーターを使用することに気づいていません... 誰かが私のメソッドを asyntask の doInbackground に配置する方法と、どのパラメーターを使用する必要があるか教えてください。 ...

私のコードは;.....

public void save(){
    initilize();
    ResultSet rs = null;
    String mylog=id.getText().toString();
    String mypass=pass.getText().toString();
    try{
    Statement statement=connect.createStatement();
    rs=statement.executeQuery("LOGIN '"+mylog+"', '"+mypass+"'");
    }catch(Exception e){
        e.printStackTrace();
    }

    if(mylog.equals("")||mypass.equals("")){

        Toast.makeText(getApplicationContext(), "empty fields", Toast.LENGTH_SHORT).show();

    } else
        try {
            if(rs.next()){

                Intent i=new Intent(getApplicationContext(),Act2.class);
                startActivity(i);
            }
            else if(rs.next()==false){

                Toast.makeText(getApplicationContext(), "incorrect login", Toast.LENGTH_SHORT).show();
                id.setText("");
                pass.setText("");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

同じメソッド save() が ayntask の doInbackground() 内に保持される可能性がある場合...

4

2 に答える 2

0

おそらく、タイマーを使用して、ログインの準備ができているかどうかを確認できます。そうでない限り、進行状況バーを表示します。準備ができたら、バーを閉じて、新しいアクティビティなどを開始できます。タイマー実行は u UI スレッドで実行できます。よろしく:)

于 2013-08-10T08:35:29.337 に答える
0

迅速なリファクタリングを行う (これは現状では非常に悪い習慣であり、コーディングであることに注意してください。よりメンテナンスしやすくし、重複を避けるために、このコードをリファクタリングする必要があります):

public class MyAsyncTask extends AsyncTask<> {

プライベート アクティビティ アクティビティ; ブール値の結果; プライベート文字列 myLog; プライベート文字列 myPass; プライベート接続接続;

public MyAsyncTask(Activity activity, Connection connect) {
    this.activity = activity;
    this.connect = connect;
}

@Override
protected void onPreExecute() {
    //show your progress dialog
}

@Override
protected Object doInBackground(Object[] objects) {

    ResultSet rs = null;
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                initilize();
                mylog=id.getText().toString();
                mypass=pass.getText().toString();
            }
        });

        try{
            Statement statement=connect.createStatement();
            rs=statement.executeQuery("LOGIN '"+mylog+"', '"+mypass+"'");
        }catch(Exception e){
            e.printStackTrace();
        }

        if(mylog.equals("")||mypass.equals("")){
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(activity.getApplicationContext(), "empty fields", Toast.LENGTH_SHORT).show();
                }
            });


        } else
            try {
                if(rs.next()){
                result = true;

                }
                else if(rs.next()==false){

                    activity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(activity.getApplicationContext(), "incorrect login", Toast.LENGTH_SHORT).show();
                            id.setText("");
                            pass.setText("");
                        }
                    });

                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    return null;
}

@Override
protected void onPostExecute(Object o) {
    //hide your progress dialog
    if(result == Boolean.TRUE){
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Intent i=new Intent(activity.getApplicationContext(),Act2.class);
                activity.startActivity(i);
            }
        });

    }

}
}

次に、アクティビティでこれを行います:

MyAsyncTask a = new MyAsyncTask(this, connect); //im guessing "connect" is your Connection object
a.execute();

私が言ったように、コードが機能するようにこの高速リファクタリングを行いましたが、ベストプラクティスと適切な実装はここでは考慮されていません.

于 2013-08-10T07:36:38.930 に答える