Java 声明的接口为空
我使用改型HTTP中间层进行API调用。因为改型是异步工作的,所以我使用一个接口返回API响应。但是声明的接口在改型的OnResponse()重写方法中显示为NULL 下面是代码块 接口Java 声明的接口为空,java,android,interface,retrofit2,Java,Android,Interface,Retrofit2,我使用改型HTTP中间层进行API调用。因为改型是异步工作的,所以我使用一个接口返回API响应。但是声明的接口在改型的OnResponse()重写方法中显示为NULL 下面是代码块 接口 public interface OnResponseListener{ void getCountryListResponse(ArrayList<String> list,int responseCode); } @Override
public interface OnResponseListener{
void getCountryListResponse(ArrayList<String> list,int responseCode);
}
@Override
public void onResponse(Call<List<Country>> call, Response<List<Country>> response) {
Log.d("Response",response.body().toString());
for (Country country: response.body())
{
Log.d("Country",country.toString());
Log.d("CommomName",country.getCommonName());
// Log.d("BLLL",country.getCommonName());
countryList.add(country.getCommonName());
}
Log.d("Entered","Vikas Entered");
// Log.d("ResonseListener",mResponseListener.toString());//Here throwing error, mResponseListener is null object
mResponseListener.getCountryListResponse(countryList,response.code());
}
我不知道为什么它是空的,即使在对象(接口)被声明之后也是如此。任何帮助都将不胜感激。您必须在其中设置值,并从您调用它的位置执行它: 创建一个方法:
public void setResponseListener(OnResponseListener mResponseListener){
this.mResponseListener = mResponseListener;
}
然后从调用这个call.enqueue()方法的位置调用它,如下所示
:
RestClientClassObject.setResponseListener(新的OnResponseListener(){
@凌驾
void getCountryListResponse(ArrayList列表,int responseCode){
//编写您想使用列表执行的代码
}
});
我有很多建议给你
- Java中的每个对象都是空的,如果您不初始化它的话。看
- 您是否会为100种响应类型创建100
接口。这就是为什么来到现场OnResponseListener
- 你为什么不做一个普通的类来为你打电话,并给出预期的响应呢
Call<BaseModel> call;
new RetroService().call(call, new RetroService.OnResponseListenerRetro<BaseModel>() {
@Override
public void onSuccess(String tag, BaseModel response) {
System.out.println(response);
}
@Override
public void onError(String tag, RetroService.ErrorType error) {
Toast.makeText(, "", Toast.LENGTH_SHORT).show();
}
});
Call<Model2> call;
new RetroService().call(call, new RetroService.OnResponseListenerRetro<Model2>() {
@Override
public void onSuccess(String tag, Model2 response) {
System.out.println(response);
}
@Override
public void onError(String tag, RetroService.ErrorType error) {
Toast.makeText(, "", Toast.LENGTH_SHORT).show();
}
});
现在您只需要创建这个类
RetroService.java
import android.support.annotation.Nullable;
import android.util.Log;
import com.arsdigitech.angpau.R;
import com.arsdigitech.angpau.appClasses.App;
import com.google.gson.JsonSyntaxException;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class RetroService {
public static final String TAG = "RetroService***";
public <T> void call(Call<T> call, OnResponseListenerRetro<T> onResponseListener) {
call.enqueue(new Callback<T>() {
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.isSuccessful()) {
onResponseListener.onSuccess("", response.body());
} else {
ErrorType errorType = ErrorType.getErrorTypeByVolleyError(response.code());
onResponseListener.onError("", errorType);
}
}
@Override
public void onFailure(Call<T> call, Throwable t) {
Log.e(TAG, t.getMessage());
if (t instanceof JsonSyntaxException) {
onResponseListener.onError("", ErrorType.ParseError);
} else {
onResponseListener.onError("", ErrorType.Error);
}
}
});
}
public enum ErrorType {
Error(R.string.error),
RequestTimeoutError(R.string.timeoutError),
NoConnectionError(R.string.noConnectionError),
AuthFailureError(R.string.authFailureError),
ServerError(R.string.serverError),
NetworkError(R.string.networkError),
BadRequestError(R.string.badRequestError),
ForbiddenError(R.string.forbiddenError),
NotFoundError(R.string.notFoundError),
UnsupportedMediaType(R.string.unsupportedMediaType),
MethodNotAllowedError(R.string.methodNotAllowedError),
ParseError(R.string.parsing_error),;
int message;
ErrorType(int message) {
this.message = message;
}
public String getMessage() {
return App.getAppRes().getString(message);
}
public static @Nullable
ErrorType getErrorTypeByVolleyError(int errorCode) {
ErrorType errorType = null;
switch (errorCode) {
case 400:
errorType = ErrorType.BadRequestError;
break;
case 401:
errorType = ErrorType.AuthFailureError;
break;
case 403:
errorType = ErrorType.ForbiddenError;
break;
case 404:
errorType = ErrorType.NotFoundError;
break;
case 408:
errorType = ErrorType.RequestTimeoutError;
break;
case 500:
case 501:
case 502:
case 503:
case 504:
case 505:
errorType = ErrorType.ServerError;
break;
default:
errorType = ErrorType.Error;
}
return errorType;
}
}
public interface OnResponseListenerRetro<T> {
void onSuccess(String tag, T response);
void onError(String tag, ErrorType error);
}
}
import android.support.annotation.Nullable;
导入android.util.Log;
导入com.arsdigitech.angpau.R;
导入com.arsdigitech.angpau.appClasses.App;
导入com.google.gson.JsonSyntaxException;
2.电话;;
2.回拨;
2.回应;;
公共服务{
公共静态最终字符串TAG=“RetroService***”;
公共无效调用(调用调用,OnResponseListenerRetro onResponseListener){
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
onResponseListener.onSuccess(“,response.body());
}否则{
ErrorType ErrorType=ErrorType.getErrorTypeByVolleyError(response.code());
onResponseListener.onError(“,errorType);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(标记,t.getMessage());
if(JsonSyntaxException的t实例){
onResponseListener.onError(“,ErrorType.ParseError”);
}否则{
onResponseListener.onError(“,ErrorType.Error);
}
}
});
}
公共枚举错误类型{
错误(R.string.Error),
RequestTimeoutError(R.string.timeoutError),
NoConnectionError(R.string.NoConnectionError),
AuthFailureError(R.string.AuthFailureError),
ServerError(R.string.ServerError),
NetworkError(R.string.NetworkError),
BadRequestError(R.string.BadRequestError),
禁止错误(R.string.ForbiddenError),
NotFoundError(R.string.NotFoundError),
UnsupportedMediaType(R.string.UnsupportedMediaType),
MethodNotAllowedError(R.string.MethodNotAllowedError),
ParseError(R.string.parsing_error),;
int消息;
错误类型(int消息){
this.message=消息;
}
公共字符串getMessage(){
返回App.getAppRes().getString(消息);
}
公共静态@Nullable
ErrorType getErrorTypeByVolleyError(内部错误代码){
ErrorType ErrorType=null;
开关(错误代码){
案例400:
errorType=errorType.BadRequestError;
打破
案例401:
errorType=errorType.AuthFailureError;
打破
案例403:
errorType=errorType.ForbiddenError;
打破
案例404:
errorType=errorType.NotFoundError;
打破
案例408:
errorType=errorType.RequestTimeoutError;
打破
案例500:
案例501:
案例502:
案例503:
案例504:
案例505:
errorType=errorType.ServerError;
打破
违约:
errorType=errorType.Error;
}
返回错误类型;
}
}
公共接口OnResponseListenerRetro{
成功时无效(字符串标记,T响应);
void onError(字符串标记,ErrorType错误);
}
}
您能在这里放置完整的onResponse方法吗?您必须初始化Listener您只创建了它的对象。你还没有注册你的界面。嗨@Piyush,如何注册界面。??我们不能像类一样初始化接口,对吗?@NehaK,什么是RestClientClassObject。??我正在对HTTP请求和响应进行改型。请发布您在其中编写了onResponse()的类,并从您调用它的位置,我将告诉您如何进行改型谢谢Khemraj。我理解这个问题。
Call<Model2> call;
new RetroService().call(call, new RetroService.OnResponseListenerRetro<Model2>() {
@Override
public void onSuccess(String tag, Model2 response) {
System.out.println(response);
}
@Override
public void onError(String tag, RetroService.ErrorType error) {
Toast.makeText(, "", Toast.LENGTH_SHORT).show();
}
});
import android.support.annotation.Nullable;
import android.util.Log;
import com.arsdigitech.angpau.R;
import com.arsdigitech.angpau.appClasses.App;
import com.google.gson.JsonSyntaxException;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class RetroService {
public static final String TAG = "RetroService***";
public <T> void call(Call<T> call, OnResponseListenerRetro<T> onResponseListener) {
call.enqueue(new Callback<T>() {
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.isSuccessful()) {
onResponseListener.onSuccess("", response.body());
} else {
ErrorType errorType = ErrorType.getErrorTypeByVolleyError(response.code());
onResponseListener.onError("", errorType);
}
}
@Override
public void onFailure(Call<T> call, Throwable t) {
Log.e(TAG, t.getMessage());
if (t instanceof JsonSyntaxException) {
onResponseListener.onError("", ErrorType.ParseError);
} else {
onResponseListener.onError("", ErrorType.Error);
}
}
});
}
public enum ErrorType {
Error(R.string.error),
RequestTimeoutError(R.string.timeoutError),
NoConnectionError(R.string.noConnectionError),
AuthFailureError(R.string.authFailureError),
ServerError(R.string.serverError),
NetworkError(R.string.networkError),
BadRequestError(R.string.badRequestError),
ForbiddenError(R.string.forbiddenError),
NotFoundError(R.string.notFoundError),
UnsupportedMediaType(R.string.unsupportedMediaType),
MethodNotAllowedError(R.string.methodNotAllowedError),
ParseError(R.string.parsing_error),;
int message;
ErrorType(int message) {
this.message = message;
}
public String getMessage() {
return App.getAppRes().getString(message);
}
public static @Nullable
ErrorType getErrorTypeByVolleyError(int errorCode) {
ErrorType errorType = null;
switch (errorCode) {
case 400:
errorType = ErrorType.BadRequestError;
break;
case 401:
errorType = ErrorType.AuthFailureError;
break;
case 403:
errorType = ErrorType.ForbiddenError;
break;
case 404:
errorType = ErrorType.NotFoundError;
break;
case 408:
errorType = ErrorType.RequestTimeoutError;
break;
case 500:
case 501:
case 502:
case 503:
case 504:
case 505:
errorType = ErrorType.ServerError;
break;
default:
errorType = ErrorType.Error;
}
return errorType;
}
}
public interface OnResponseListenerRetro<T> {
void onSuccess(String tag, T response);
void onError(String tag, ErrorType error);
}
}