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

标签 java android delay toast

总体上对 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/

相关文章:

android - SharedPreferences 是否存储在数据库中?

设计excel文件的java android错误

java - 从集合 {1, 3, 100} 中生成随机数

java - 如何在单元测试中可靠地对 JPA 实体的更新进行单元测试

javascript - 如何在 Android WebView 中启用 jQuery 点击事件

php - 如何处理 PayPal IPN 延迟

c# - 延迟 API 操作

android - 如何在移动 web 应用程序中去除 onclick 延迟并保持快速滚动

java - 将域模式下的JBoss 7 服务器添加到Eclipse

java - 推荐模板引擎,减少动态内容冗余(Spring Boot)