【问题标题】:Sending Parameters to onPostExecute in AsyncTask在 AsyncTask 中向 onPostExecute 发送参数
【发布时间】:2016-10-28 14:27:08
【问题描述】:

onPostExecute 将使用 2 个参数, 来自 doInBackground 的 GCMID 和调用 AsyncTask 的主函数中的 UserID

我尝试更改 AsyncTask 声明中的参数,但出现错误“尝试使用不兼容的返回类型”

String UserID = "Admin";
new GCM().execute(null,null,null);

    private class GCM extends AsyncTask<String, String, String> {

        @Override
        protected String[]  doInBackground(String... params) {
            String gcmRegID = GHelper.GCMRegister("123456");
            return gcmRegID;
        }


        @Override
        protected void onPostExecute(String RegID) {
            UTask ut = new UTask();

            // ****** I managed to send RegID
            // ****** I can not send UserID !! How to send it?

            ut.execute(UserID, RegID);
        }
    }

【问题讨论】:

  • 为什么你的 AsyncTask 执行时有 3 个空参数?

标签: java android android-asynctask parameter-passing


【解决方案1】:

改变,

@Override
        protected String[]  doInBackground(String... params) {
            String gcmRegID = GHelper.GCMRegister("123456");
            return gcmRegID;
        }

@Override
        protected String doInBackground(String... params) {
            String gcmRegID = GHelper.GCMRegister("123456");
            return gcmRegID;
        }

你的返回类型是 String[] 并且你在 doInBackground() 中返回一个字符串。

【讨论】:

    【解决方案2】:

    您可以通过 GCM 构造函数发送 UserId。

    private class GCM extends AsyncTask<String, String, String>{
      private String userId;
      public GCM(String UserId){
         this.userId=UserId;
      }
    

    在'onPostExecute()'中你可以这样使用它:

        @Override
        protected void onPostExecute(String RegID) {
            UTask ut = new UTask();
            ut.execute(this.userId, RegID);
        }
    

    然后像这样使用它

    new GCM(UserId).execute();
    

    【讨论】:

      【解决方案3】:

      试试这个:

      String UserID = "Admin";
      new GCM().execute(null,null,null);
      

      还有

      private class GCM extends AsyncTask<String, String, String[]> {
      
          @Override
          protected String[]  doInBackground(String... params) {
              String regId = somethingToGetRegId();
              String userId = somethingToGetUserId();
              return new String[]{regId, userId};
          }
      
      
          @Override
          protected void onPostExecute(String[] values) {
              UTask ut = new UTask();
      
              String regId = values[0];
              String userId = values[1];
              ut.execute(UserID, RegID);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-06-05
        • 2012-03-15
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-07
        • 2012-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多