Java方法返回null,尽管它不为null

时间:2016-11-10 15:02:26

标签: java android methods null

我有一个名为webservice的类,它包含一个变量内容和一个名为getURL的方法,它将URL作为参数获取并获取数据并将其作为字符串返回。如下:

class WebService {
    String content;
    String getUrl(String url, final Context mContext) {
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(url, new TextHttpResponseHandler() {


            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                Toast.makeText(mContext, "Sorry, Something Went Wrong While Connecting To Net :(", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                content = responseString;
                Log.i("RESPONSE STRING", responseString);
                Log.i("COntent STRING", content);

            }
        });
        Log.i("BEFORE RETURN",""+ content);
        return content;


    }
}

问题是方法返回null。 在onSuccess中,我查看"内容"并且值与responseString完全相同,但在返回之前的日志中它变为null。 你能告诉我为什么会这样吗? 感谢。

1 个答案:

答案 0 :(得分:1)

顾名思义asynchronous Task asynchronousclass WebService { public void getUrl(String url, final Context mContext, WebServiceCallback cb) { AsyncHttpClient client = new AsyncHttpClient(); client.get(url, new TextHttpResponseHandler() { @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { cb.onFailure(); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { cb.onSuccess(responseString); } }); } public interface WebServiceCallback{ void onFailure(); void onSuccess(String url); } } 。这意味着它将在完成后完成。其他所有事情都将照常进行,并不关心这项任务 - 除非你想从中获取一些东西。

您可以通过网络上的各种库实现这一目标,也可以通过回调自行完成。

e.g。

WebService service = new WebService();
service.getUrl("www.test.com", yourContext, new WebServiceCallback(){

    @Override
    public void onFailure(){}

    @Override
    public void onSuccess(String url){
        yourAlreadyDeclaredString = url;
        // do smth with it 
    }
});

你称之为

TextHttpResponseHandler

您也可以跳过此自定义回调并传递for (i in p.mat.all[c("t", "p", "r")]) { ... } ,但这取决于您的设计。