Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java方法返回null,尽管它不是null_Java_Android_Methods_Null - Fatal编程技术网

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

Java方法返回null,尽管它不是null,java,android,methods,null,Java,Android,Methods,Null,我有一个名为webservice的类,它派生了一个变量内容和一个名为getURL的方法,该方法获取URL作为参数,获取数据并将其作为字符串返回。详情如下: class WebService { String content; String getUrl(String url, final Context mContext) { AsyncHttpClient client = new AsyncHttpClient(); client.get(ur

我有一个名为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中,我检查“content”,其值与responseString完全相同,但在返回之前它在日志中变为null。 你能告诉我为什么会这样吗?
谢谢。

一个
异步任务,顾名思义,将是
异步的
。这意味着它将在完成时完成。其他的一切都会照常进行,不要在意那项任务——除非你想从中得到什么

您可以通过web上的各种库实现这一点,也可以通过回调自己实现这一点

e、 g

class 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);
  }
}
你这样叫它

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 
    }
});

您也可以跳过此自定义回调并传递
文本HttpResponseHandler
,但这取决于您的设计。

因为您假设在
返回内容之前调用
onSuccess
你应该用谷歌搜索“async”的意思。@Blackbelt那么这不是真的吗?如果是的话,它应该是
sync
而不是
async
@Codebender只要你在内部类和方法中声明它们,你就需要完成它们。已经在课堂上宣布了。谢谢你的解释。所以在异步方法中我不应该使用return,因为它通常在onSuccess或onFailure之前调用return语句。是这样吗?@PouyaHeydari是的。