0

我在活动中有一个按钮。当我按下它时,它将加载另一个活动。在此活动中,我有一个自定义网格视图,每个单元格中都有描述和图像。我正在通过异步任务从远程服务器填充网格视图:

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        if (isInternetAvailable) {
            Intent intent = new Intent(menuActivity.this,
                    gridActivity.class);
            startActivity(intent);
        }
        else {
            MyAlertDialog.ShowAlertDialog(menuActivity.this,
                                          "",
                                          "No network connection",
                                          "OK");
        }
    }
});

我在这里分享 testAsyncTask()。我在 gridActivity 的 onCreate() 中调用这个函数(第二个活动)

private void testAsyncTask() {
    new AsyncTask<Object, Object, Object>() {

        @Override
        protected void onPreExecute() {

            progress_Dialog = ProgressDialog.show(a, "", "Loading");
        }

        @Override
        protected Integer doInBackground(Object... params) {
            try {
                MenuService menuService = new MenuServiceImpl();
                MenuServiceResponse pMenu = menuService.getMenu();
                itemlist = pMenu.getMenu().getMenus();
                return 0;
            }
            catch (MyServiceException e) {
                MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK");
                e.printStackTrace();
            }
            return 0;
        }

        @Override
        protected void onPostExecute(Object result) {

            if (progress_Dialog != null) {
                progress_Dialog.dismiss();
            }

            try
            {
                adapter = new GridAdapter(
                    GridActivity.this, itemlist);
                AllitemgridView.setAdapter(adapter);

            }
            catch(Exception e)
            {
                adapter = null;
                MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "Check Network Connection", "OK");
            }

        }
    }.execute();
}

我正在检查我保留按钮的第一个活动中的条件。只有当我有 Internet 连接时,我才会触发启动活动。

现在进入我的问题,如果我有 Internet 连接并且我按下按钮,startacvitiy 将触发,它会移动到第二个活动。在第二个活动的 onCreate() 中,我调用了 testAsync()。现在它将显示一个加载对话框,在后台我将从远程服务器获取数据。

现在,如果我关闭调制解调器,应用程序会冻结 5-6 秒,然后它将强制关闭。那么我该如何处理这个异常呢?

doInbackgorund() 内部的编码需要 Internet 连接,这可能是我断开 Wi-Fi 时导致崩溃的原因。我该如何处理这个崩溃?

4

1 回答 1

1

你不能在 doinbackground 方法中使用这个,因为这个方法正在做另一个线程, MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK");

您只能在 onpost 方法中使用它。

或者您可以使用对话框消息:

    @Override
    protected Integer doInBackground(Object... params) {
        try {
            MenuService menuService = new MenuServiceImpl();
            MenuServiceResponse pMenu = menuService.getMenu();
            itemlist = pMenu.getMenu().getMenus();
            return 0;
        } catch (MyServiceException e) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK");
                }
            });
            e.printStackTrace();
        }
    }
于 2012-10-11T09:09:58.567 回答