【问题标题】:Android AsyncTask loading screen never goes awayAndroid AsyncTask 加载屏幕永远不会消失
【发布时间】:2014-02-21 16:12:59
【问题描述】:

我的问题是我正在从 Web 服务加载一些数据,我想通知用户我正在加载数据。因此,我正在使用 AsyncTask 但我的 Datagetter 方法不起作用,我不知道为什么。这是我的课:

public class HaberlerDynamic extends Activity {

    ArrayList<ArrayList> result = new ArrayList<ArrayList>();
    ListView list;
    DynamicListView haber ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.kurumsal_menu);
        list = (ListView) findViewById(R.id.list);

        new GetTask(this ,"gereksiz").execute();
    }


    class GetTask extends AsyncTask<Object, Void, Void> {
        Context context;
        ProgressDialog mDialog ;

        GetTask(Context context, String userid) {
            this.context = context;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            mDialog = new ProgressDialog(context);
            mDialog.setMessage("Yükeniyor...");
            mDialog.show();
        }

        @Override
        protected Void doInBackground(Object... params) {
            // here you can get the details from db or web and fetch it..

            Log.i("HaberlerDynamicAs","Request yapmadan once");
            try {    
                //this part does not work
                result = MethodInfoGetter.methodRequest("HaberGetir", "", "");

                //this part does not work
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }

            haber = new DynamicListView( HaberlerDynamic.this , result , "Haberler" );

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            mDialog.dismiss();
            list.setAdapter( haber );

        }
    }
}

如果我不使用 AsyncTask 并在 onCreate 中调用该部分,它会完美运行。

编辑:

方法 InfoGetter.methodRequest("HaberGetir", "", "");这个方法里面有它自己的异步方法。会有影响吗?

EDIT2:

移动方法 list.setAdapter( haber );从doInBackgroundonPostExecute 仍然没有任何改变。

【问题讨论】:

  • list.setAdapter( haber );doInbackground 更新 ui 是错误的
  • 我应该把代码放在哪里?
  • 我把这段代码“list.setAdapter(haber);”进入 onPostExecute 但它也没有工作。
  • @EsatTaha“不起作用”指定什么不起作用以及问题所在。你有例外吗?崩溃了?
  • 不,我没有任何异常或任何崩溃。但进度对话框永远不会消失。

标签: android android-asynctask


【解决方案1】:
 1. list.setAdapter(haber); -->Remove this line from doInbackground

你不能在 doInBackground 线程中设置 UI

2.setAdapter onPostExecute

 list.setAdapter(haber);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多