从Async类调用一个活动类

时间:2015-03-20 08:29:14

标签: android

我试图从我用于webservice的Async类调用一个新的活动类,我无法删除意图提示删除if循环的错误,我是android的新手我不知道是否我正在做的正确。我只需要在webservice调用后将输出数据传递给activity来调用一个活动类。

 private class AsyncCallWS extends AsyncTask < String, Void, Void > {
    @Override
    protected Void doInBackground(String...params) {
        //Invoke webservice
        vaildUserId = WebService.invokeAuthenticateUserWS(loginUserName, loginPassword, "AuthenticateUser");
        if (vaildUserId >= 0) {
            System.out.println("userId---" + vaildUserId);
            List < GetReminder > reminderList = WebService.invokeHelloWorldWS("GetReminder");
            if (reminderList.size() > 0) {
                for (int i = 0; i < reminderList.size(); i++) {
                    System.out.println("displayText---" + reminderList.get(i).getRemMessage() + "ff" + reminderList.size()); * * reminderIntent = new Intent(this, ReminderActivity.class); * * startActivity(reminderIntent);
                }
            } else {
                //no invoice found
            }

        }
        return null;
    }

3 个答案:

答案 0 :(得分:2)

你可以看一下:

执行异步任务时,任务将经历4个步骤:

  • onPreExecute(),在执行任务之前在UI线程上调用。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。

  • doInBackground(Params ...),在onPreExecute()完成执行后立即在后台线程上调用。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数将传递给此步骤。计算结果必须由此步骤返回,并将传递回最后一步。此步骤还可以使用publishProgress(Progress ...)发布一个或多个进度单元。这些值发布在UI线程的onProgressUpdate(Progress ...)步骤中。

  • onProgressUpdate(Progress ...),在调用publishProgress(Progress ...)后在UI线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时显示用户界面中的任何形式的进度。例如,它可用于为进度条设置动画或在文本字段中显示日志。

  • onPostExecute(Result),在后台计算完成后在UI线程上调用。后台计算的结果作为参数传递给此步骤。


code:

protected void onPostExecute(Void result) 
{
    // TODO Auto-generated method stub
    super.onPostExecute(result);

    ***************Passing the data:************

    Intent reminderIntent=new Intent(this, ReminderActivity.class);
    Bundle bundle = new Bundle();
    bundle.putParcelable("data", sharedBookingObject);
    reminderIntent.putExtras(bundle);
    startActivity(reminderIntent);
    finish();
}

检索数据:

Bundle bundle = getIntent().getExtras();
sharedBookingObject = bundle.getParcelable("data");

finish()并且调用Intent不能在活动之外发生。在&#39; AsyncTask&#39;

onPostExecute()中使用此意图

答案 1 :(得分:1)

您无法从后台线程更新UI。

您应该移动代码以启动从doInBackground()onPostExecute()

的活动

答案 2 :(得分:0)

使用runOnUiThread方法在主(UI)线程中调用startActivity,如下所示:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
          startActivity(reminderIntent);
    }
});