gpt4 book ai didi

java - 防止 Internet 访问方法延迟 toast 弹出窗口

转载 作者:行者123 更新时间:2023-11-29 06:16:43 25 4
gpt4 key购买 nike

总体上对 Android 开发和 Java 很陌生,所以请原谅任何业余爱好者的无知和缺乏术语。

我正在开发一个 Android 应用程序,该应用程序涉及将网页作为字符串获取,使用的方法基于 http://www.spartanjava.com/2009/get-a-web-page-programatically-from-android/ 提供的代码。 .

这需要的时间很少但很明显,但效果很好。它通过按下 UI 中的按钮触发。由于应用程序在获取数据时没有响应,因此我准备了一个 toast ,目的是在它发生之前警告用户。

这基本上是正在做的事情(不是实际的代码,只是说明性的):

public void buttonPressed(View view) 
{
Toast.makeText(this, "Getting Data!", Toast.LENGTH_LONG).show();

//See the page linked above for the code in this function!
String page = getPage("http://www.google.com/");

Toast.makeText(this, "Data Retrieved!", Toast.LENGTH_LONG).show();
}

不幸的是,“正在获取数据” toast 似乎只在 getPage 方法完成后出现,出现的时间非常短,然后被“已检索数据” toast 覆盖。

如何避免这种情况,让“正在获取数据” toast 出现,然后运行 ​​getPage 方法,然后在方法终止时出现“已检索数据” toast ?

如有任何建议,我们将不胜感激。我希望解决方案涉及某种线程或同步,但甚至不知道从哪里开始寻找合适的教程...

格雷格

最佳答案

正确使用 AsyncTask 类来解决您的问题:

注意在获取页面之前/之后调用的 onPreExecuteonPostExecute 方法。

public class HomeActivity extends Activity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.home);
}
public void buttonPressed(View view) {
new MyAsyncTask(this).execute(new String[] {"http://google.com/"});
}
private class MyAsyncTask extends AsyncTask<String, Void, String> {
private Context context;
public MyAsyncTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(String... params) {
String page = getPage(params[0]);
//do any more work here that may take some time- like loading remote data from a web server, etc
return page;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(context, "Data Retrieved: " + result, Toast.LENGTH_LONG).show();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "Getting Data!", Toast.LENGTH_LONG).show();
}
}
}

关于java - 防止 Internet 访问方法延迟 toast 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828676/

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