gpt4 book ai didi

java - 异步任务流程

转载 作者:行者123 更新时间:2023-12-01 14:51:07 25 4
gpt4 key购买 nike

我正在创建一个应用程序,当您使用用户名和密码登录时,它会从服务器请求信息。服务器的请求需要时间(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

可运行的是:

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年13月2日

我使用了这段代码,但我得到了

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
}
}

最佳答案

我认为你需要这样的东西

public class LoginTask extends AsyncTask<Object, Void, String> {

public Context context;
public ProgressDialog dialog;


public BaseTask(Context context) {
this.context = context;
this.dialog = new ProgressDialog(context);
}

@Override
protected void onPreExecute() {
this.dialog.setMessage(context.getResources().getString(R.string.loading));
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();

// process response as you need
}
}

调用此方法

public void onClick(View view) {
new LoginTask(YourActivity.this).execute(name, password);
}

关于java - 异步任务流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com