我正在创建一个应用程序,当您使用用户名和密码登录时,它会向服务器请求信息。 服务器的请求需要一定的时间(15-20秒),同时我想显示一个单词很少的旋转栏。 但我尝试了AsyncTask
这个类的很多变体,我无法让它工作。它得到的信息没问题,但冻结屏幕直到响应。 现在我只是有一个新线程实施runnable
。我不知道从代码的哪个位置我需要拨打AsyncTask
。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
}
}
谢谢,但我该怎么称呼这个班?只是创建它的新实例?我如何传递用户名和密码? – Mike 2013-02-12 22:55:23
更新了我的答案,有关更多详细信息,请参阅http://developer.android.com/reference/android/os/AsyncTask.html – 2013-02-13 06:24:45
我更新了代码,您可以查看一下吗?我正在从'attemptLogin()'中调用新的LoginTask。可以吗?或者我需要从onClick? – Mike 2013-02-13 14:10:42