如何将数据从onSuccess传递到其他类?

时间:2016-04-15 11:21:57

标签: android android-asynctask android-async-http

我正在开发一个应用程序,它基于json。我想将数据从一个类传递给onSuccess方法中接收的其他类。当我请求数据时,数据将被正确接收,但当我将该数据调用到其他类时,将发生空指针错误。 我的方法是

        @Override
        protected Void doInBackground(Void... params1) {

            RequestParams params;
            params = new RequestParams();
            params.add("username", str_emailId);
            params.add("password", str_password);
            params.add("action", action);

            String str_result=constant.login(params);

            Log.d("Result::--",str_result);

            return null;
        }

我的登录方法是

public String login( RequestParams params1) {

        client = new AsyncHttpClient();
        client.post(Constant.check_login_user, params1, new TextHttpResponseHandler() {

            @Override
            public void onSuccess(int i, Header[] headers, String response) {

                str_result = response;
                Log.d("Str_Result: ", str_result);

           }

            @Override
            public void onFailure(int statusCode, Header[] headers, String response, Throwable e) {
                if (statusCode == 401) {
                    jsonString[0] = response;
                    Log.d("onFailure: ", jsonString[0]);
                }
            }

        });

        return str_result;
    }

我在Success方法中得到数据并且它将在日志中打印ok但是当返回str_result变量时它将返回null并且我在doInBackground()方法中打印日志它将返回空指针错误我不知道如何?请任何人都可以帮我提前知道如何打印这些数据。

2 个答案:

答案 0 :(得分:1)

您可以使用EventBus将模型发布到所有活动的片段或活动。

链接:https://github.com/greenrobot/EventBus

答案 1 :(得分:0)

您的POST方法是异步功能。为简单起见,想象它开始在后台运行它,而其余的应用程序继续做它正在做的任何事情。 POST方法完成后,它将调用onSuccess()方法或onFailure()方法,具体取决于POST方法是成功还是失败。你看,你调用POST方法并立即返回结果,即使POST方法没有完成。您可以想象您的登录方法是这样做的。

  1. result = null
  2. call login()
  3. 返回结果
  4. 登录完成并调用onSuccess()
  5. 所以你看,你在登录方法完成执行之前返回结果。

    如何解决?

    接收String结果的类应该实现如下函数: public void setResult(String result) {...}

    并且您的登录方法应该在onSuccess()方法中调用它,如下所示:

    @Override
    public void onSuccess(int i, Header[] headers, String response) {
      // Your login method finished, now you can send result to receiving object
      str_result = response;
      receivingClassObject.setResult(str_result);
    }