【问题标题】:ProgressBar Spinner for Async Task异步任务的 ProgressBar Spinner
【发布时间】:2013-07-02 18:42:51
【问题描述】:

这是我的简单 AsyncTask:

class MyTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {

        String page = null;
        try {
            page = new Communicator().executeHttpGet(params[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;
    }

如何添加一个进度条来显示一个简单的微调器?每次我尝试代码中断或参数放错位置时。

编辑:

class MyTask extends AsyncTask<String, Void, String> {

    ProgressDialog myPd_ring = null;

    @Override
    protected void onPreExecute() {


        myPd_ring.show();

    }
    @Override
    protected String doInBackground(String... params) {

        String page = null;
        try {
            page = new Communicator().executeHttpGet(params[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;

    }

    @Override
    protected void onPostExecute(String result) {
        myPd_ring.dismiss();        
        super.onPostExecute(result);
    }

}

试过了还是不行!事实上,应用程序现在甚至没有响应标准输入! 谢谢!

【问题讨论】:

    标签: android android-progressbar


    【解决方案1】:
    @Override
            protected void onPreExecute() {
    
                myPd_ring  = new ProgressDialog (YourActivityName.this);
                myPd_ring.setMessage("Forza Roma");
                myPd_ring.show();
    
            }
    

    还将您的班级更改为

    class MyTask extends AsyncTask<String, Integer, String>
    

    onPostExecute 函数上,您应该首先像这样调用超级函数:

     @Override
        protected void onPostExecute(String result) {        
            super.onPostExecute(result);
            myPd_ring.dismiss();
    }
    

    此外,对于您的业务逻辑,您应该在 onPostExecute 而不是 doInBackground 中调用 new AsyncTask

    【讨论】:

    • @WilliamKinnan 显示构造函数 ProgressDialog() 未定义
    • 你需要导入android.app.ProgressDialog
    • @Anurupa_Dey 我只是忘了告诉你构造函数应该将 YourActivityName.this 作为参数,请检查更新
    • @WilliamKinaan 请解释一下:(对不起,我只是个初学者!
    • 检查我的更新,ProgressDialog 类有一个属性,它是你正在处理的上下文,你可以通过输入yourActivityName.this 来获取上下文,假设你的活动名称是Player 所以构造函数将是new ProgressDialgo(Player.this);
    【解决方案2】:

    覆盖方法onPreExecute()

    在该方法中创建一个 ProgressDialog 并显示它。 您可以在您也应该覆盖的方法onPostExecute() 中关闭 ProgressDialog。查看更多关于 AsyncTask here

    但使用 AsyncTasks 时要小心,它有一些隐藏的陷阱。查看this article 了解它。

    【讨论】:

    • 试过这个:class MyTask extends AsyncTask&lt;String, Void, String&gt; { ProgressDialog myPd_ring = null; @Override protected void onPreExecute() { myPd_ring.show(); } @Override protected String doInBackground(String... params) { String page = null; try { page = new Communicator().executeHttpGet(params[0]); } catch (Exception e) { e.printStackTrace(); } return page; } @Override protected void onPostExecute(String result) { myPd_ring.dismiss(); super.onPostExecute(result); } } 不起作用并破坏了代码:(
    • 当然,myPd_ring 仍然为空,您尝试显示它。在 myPd_ring.show() 之前添加 myPd_ring = new ProgressDialog() (或类似的东西)
    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多