来自异步任务的Android更新视图

时间:2014-01-13 02:18:30

标签: android animation asynchronous view android-asynctask

这是一个小小的XML动画,我正试图在应用程序从服务器获取JSON时关闭。获取所有数据大约需要2秒钟,所以我试图显示一些加载动画。

我遇到的问题是,在完成所有操作并且onPostExecute()关闭之前,图像不会改变。

我是否需要将视图传递给AsyncTask,还是其他什么?

在此AsyncTask完成之后

最后一件事。如果你再次运行它会顺利运行。

XML

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/loadingtext1" android:duration="100" />
<item android:drawable="@drawable/loadingtext2" android:duration="100" />
<item android:drawable="@drawable/loadingtext3" android:duration="100" />
<item android:drawable="@drawable/loadingtext4" android:duration="100" />
</animation-list>

代码

private class LOGMEIN extends AsyncTask<String, Integer, String> {

            @Override
            protected String doInBackground(String... params) {
                CRY.CInit(DI, DU, DP);
                publishProgress(0);
                while(data != "whatineed"){
                    try {
                        Thread.sleep(450);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                completecheck = 1;
                return "complete";
            }

            @Override
            protected void onPreExecute() {
                LOADINGTEXT.setBackgroundResource(R.drawable.animation);
                AnimationDrawable LT = (AnimationDrawable) LOADINGTEXT.getBackground();
                LT.start();
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                if (result.contentEquals("complete") == true) {
                    domorework();
                } else {
                    finish();
                }
            }
}

2 个答案:

答案 0 :(得分:0)

您是否在AsyncTask中设置了onPreExecute()?

  

protected void onPreExecute(){

     

//在这里展示您的动画装载机...
  progress.show();

     

}

我在onCreate()中使用它:

初始化:公共ProgressDialog进度;

progress = new ProgressDialog(this);
progress.setCancelable(true);
progress.setInverseBackgroundForced(false);
progress.setCanceledOnTouchOutside(true);
progress.setMessage("Loading.....");

答案 1 :(得分:0)

我不知道这是否是唯一的问题,但您正在比较String中的loop错误。

while (data != "whatineed")

应该是

while (!data.equals("whatineed"))

甚至更好

while (!"whatineed".equals(data))

比较值而不是对象引用