私はアプリを作成しています。ユーザー名とパスワードを使用してログインすると、サーバーに情報が要求されます。サーバーのリクエストには時間がかかります(15〜20秒)。その間、回転するバーをいくつかの単語で表示したいと思います。しかし、私はクラスの非常に多くのバリエーションを試しましたAsyncTask
、そして私はそれを機能させることができません。情報は問題なく取得されますが、応答するまで画面がフリーズします。今、私は新しいスレッドを実装していrunnable
ます。コードのどこからを呼び出す必要があるのかわかりませんAsyncTask
。
onClick
トリガーは次の機能attemptLogin()
をトリガーします。
public void onClick(View view) {
attemptLogin();
}
機能中attemptLogin()
:
// more code
showProgress(true);
new Thread(new GetServerResponseRunnable()).start();
while (wait) {}
// more code
そして、Runnableは次のとおりです。
public class GetServerResponseRunnable implements Runnable {
@Override
public void run() {
response = getInfo.getTours(mUsername, mPassword);
wait = false;
}
}
ご覧のとおり、別のクラスから別の関数を呼び出します。これは機能です:
public String getTours(String username, String password) {
String req = "GETALLDATA";
String retStr = "";
try {
url = getURL(req, username, password);
sendOutputLine(url, "");
retStr = getReturnString();
Log.d(LoginActivity.DEBUG_TAG, "getTours() return: " + retStr);
} catch (Exception e) {
Log.d(LoginActivity.DEBUG_TAG, "programm bommed client: " + e.getMessage());
}
return retStr;
}
助けが必要です。主に私がやりたいことは次のとおりです。
response = getInfo.getTours(mUsername, mPassword);
wait = false;
その間、回転するバーを表示します。
ありがとう
更新:2013年2月13日
このコードを使用しましたが、
02-13 09:07:16.142: E/AndroidRuntime(1046): java.lang.NullPointerException
行で:
this.dialog.setMessage(getResources().getString(R.string.login_progress_signing_in));
なぜですか?
public class LoginTask extends AsyncTask<Object, Void, String> {
public Context context;
public ProgressDialog dialog;
public void BaseTask(Context context) {
this.context = context;
this.dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
this.dialog.setMessage(getResources().getString(R.string.login_progress_signing_in));
this.dialog.show();
}
@Override
protected String doInBackground(Object... objects) {
String name = (String) objects[0];
String password = (String) objects[1];
String response = getInfo.getTours(name , password );
return response;
}
@Override
protected void onPostExecute(String response) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
LoginActivity.response = response;
// process response as you need
}
}