2016-04-15 81 views
1

我正在开发一个应用程序,它基于json。我想通过onSuccess方法将数据从一个类传递给其他类。当我请求数据时,数据将被正确接收,但是当我将该数据调用到其他类时,会发生空指针错误。 我的方法是如何将数据从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; 
    } 

我得到了在成功方法的数据,它会在日志行打印,但在返回str_result变量将返回null,我打印doInBackground()方法中的日志,它将返回空指针错误,我不知道如何?请任何人都可以帮助我如何预先打印这些数据。

+0

因为您使用的是异步http客户端。您在onSuccess启动之前从函数返回值。 – 2016-04-15 11:24:24

+0

我不知道更多关于异步HTTP客户端,所以有没有办法将数据从onSuccess()方法传递给doInBackground()方法 – Shailesh

回答

0

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

  1. 结果=空
  2. 呼叫登录()
  3. 返回结果
  4. 登录完成并调用的onSuccess()

所以你看,你返回结果之前登录方法执行完毕。

如何解决?

类接收字符串结果应该实现类似的功能: 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); 
} 
+0

我做你说什么,但它会给我一个错误就像不能创建处理程序内线程没有调用Looper .preper() – Shailesh

+1

这是完全不同的一组问题。我建议你开始阅读http://developer.android.com/about/start.html – Drag0

相关问题