gpt4 book ai didi

java - 如果加载超过一定时间则关闭 AsyncTask(android)

转载 作者:行者123 更新时间:2023-12-01 11:22:08 24 4
gpt4 key购买 nike

抱歉我的英语不好。我想做的是,如果加载 AsyncTask 继续超过一定时间(在我的情况下,超过 1 秒),所有内容都会被取消,并向用户显示一条消息“请检查互联网”,我显示一条消息,但 ProgressDialog继续运行。

    SendRequestAutorization sendAvtoriz = new SendRequestAutorization ();

//code

try {
sendAvtoriz.execute(
new String[]{login.getText().toString(), password.getText().toString()}).get(1, TimeUnit.SECONDS);
} catch(Exception e) {
Log.e("Avtorization", e.toString());
Toast.makeText(getApplicationContext(), "Please check the Internet", Toast.LENGTH_SHORT).show();
sendAvtoriz.cancel(true);
}


//code
private class SendRequestAutorization extends AsyncTask<String, String, String> {
ProgressDialog pDialog;

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Avtorization.this);
pDialog.setMessage("Authorization");
pDialog.setCancelable(false);
pDialog.show();
}

protected String doInBackground(String... params) {
//code
return null;
}

protected void onPostExecute(String result) {
super.onPostExecute(result);
pDialog.dismiss();
}

我还好吗?我需要另一个 Off ProgressDialog,是吗?

UDP:

理想情况下,这就是我想要做的:在应用程序中单击按钮“avtorization”会显示动画加载(AsyncTask 工作),如果加载超过 5 秒,我会显示消息“请检查互联网”,否则我会进入我的个人资料。现在我有:在单击按钮“avtorization”中,如果我有互联网,5秒没有任何显示,显示快速加载动画并输入配置文件,如果我没有互联网,单击“avtorization”,5秒没有显示任何内容,然后显示“请检查互联网”

现在是我的代码:

private Button logInn;
private SendRequestAutorization sendAvtoriz;
ProgressDialog pDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p_avtorization);

logInn = (Button) findViewById(R.id.createAccount);
sendAvtoriz = new SendRequestAutorization();


logInn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

pDialog = new ProgressDialog(Avtorization.this);
pDialog.setMessage("Authorization");
pDialog.setCancelable(false);
pDialog.show();


try {
sendAvtoriz.execute(
new String[]{login.getText().toString(), password.getText().toString()}).get(5, TimeUnit.SECONDS);
} catch(Exception e) {
Log.e("Avtorization", e.toString());
Toast.makeText(getApplicationContext(), "Please check the Internet", Toast.LENGTH_SHORT).show();
sendAvtoriz.cancel(true);
pDialog.dismiss();
}
}

}

//code
private class SendRequestAutorization extends AsyncTask<String, String, String> {


protected String doInBackground(String... params) {
//code
return null;
}

protected void onPostExecute(String result) {
super.onPostExecute(result);
pDialog.dismiss();
}

最佳答案

您可以通过超时从 AsyncTask 获取结果,查看方法 get(long timeout, TimeUnit unit)

此方法会阻塞 UI 线程,因此在这种情况下最好不要调用 get() 方法,而是创建 TimerTask,如果 AsyncTask 仍在工作,它将在 5 秒后取消它。

还看: ProgressDialog not shown when AsyncTask.get() called

关于java - 如果加载超过一定时间则关闭 AsyncTask(android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102852/

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