无法覆盖JsonHttpResponseHandler中的onSuccess()方法

时间:2015-11-11 08:18:46

标签: java android rest asynchttpclient

我正在http://www.raywenderlich.com/78578/android-tutorial-for-beginners-part-3

学习休息服务

遇到

 AsyncHttpClient client = new AsyncHttpClient();
        client.get(QUERY_URL + urlString,
        new JsonHttpResponseHandler() {

            @Override
public void onSuccess(JSONObject jsonObject) {
// Display a "Toast" message
// to announce your success
Toast.makeText(getApplicationContext(), "Success!",   Toast.LENGTH_LONG).show();

// 8. For now, just log results
Log.d("omg android", jsonObject.toString());
}      
@Override

public void onFailure(int statusCode, Throwable throwable, JSONObject  error) {
// Display a "Toast" message 
// to announce the failure
Toast.makeText(getApplicationContext(), "Error: " + statusCode + " " +    throwable.getMessage(), Toast.LENGTH_LONG).show();

// Log error message
// to help solve any problems
Log.e("omg android", statusCode + " " + throwable.getMessage());
}
        });

我的gradle sync任务成功。但我无法弄清楚为什么onSuccess方法被启发为(Method不会覆盖超类)

即使我已将onSuccess()参数更改为

 public void onSuccess(int statusCode, org.apache.http.Header[] headers, JSONObject jsonObject)

我也遵循以下链接中提供的所有解决方案

method does not override or implement a method from a supertype - for Override

AndroidAsyncHttp Error

http://answered.site/-heres-my-mainactivityjava-the-part-of-the-code-it-occurs-in-the-querybooks/2950406/

即使我也尝试过使用接口。我正在使用异步http 1.4.9 所以我将gradle脚本更改为

dependencies {

    ...

    // there may or may not be a support library above these
    compile 'com.loopj.android:android-async-http:1.4.9'
    compile 'com.squareup.picasso:picasso:2.5.2'
}

我已经尝试了stackoverflow和github中可用的所有解决方案。但是我仍然无法清除该错误,它显示我onSuccess()和onFailure()方法不会覆盖超类

3 个答案:

答案 0 :(得分:6)

检查导入

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;

import org.json.JSONObject;

**import cz.msebera.android.httpclient.Header;**

并试试这个

client.get("sdsd", new JsonHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
        super.onSuccess(statusCode, headers, response);

    }

    @Override
    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
        super.onFailure(statusCode, headers, throwable, errorResponse);
    }
});

您正在使用错误的标头并覆盖不存在的方法。我想可能是那些旧的版本可用。

答案 1 :(得分:1)

onSuccess函数调用

的开头
super.onSuccess();

这将解决您的错误。当您重写方法时,通常也会调用原始方法(超类的方法)。

onFailure

相同
super.onFailure();

您可以查看此link以查看每个回调函数的参数。

正如 @hegazy 已经提到的那样,你对函数使用了错误的标题,你所遵循的教程很可能已经过时了。使用正确的标题检查所有可能功能的链接。在super调用中,您可以传递相同的变量。

答案 2 :(得分:0)

只需使用正确的标题

尝试:

@Override
public void  onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, JSONObject response) {
   // called when response HTTP status is "200 OK"
}

@Override
public void onFailure(int statusCode,cz.msebera.android.httpclient.Header[] headers, Throwable e, JSONObject response) {

}