Sto postando un esempio per aiutarti con l'implementazione del retrofit.
Crea la tua risorsa come questa (MyResource.java).
Call<TKBaseResponse> testConnection(@@Url String customUrl);
inizializzazione Retrofit
private Resource getRetrofitResource(){
//Initialize retrofit.
final Retrofit = .....//your code to initialize retrofit
return retrofit.create(MyResource.class);
}
Per implementare chiamata Enqueue (chiamate asincrone retrofit) è necessario passare la vostra risposta di risorse e un gestore di risposta che è la vostra implementazione personalizzata nel metodo Enqueue. Sto postando la mia implementazione di ResponseHandler a fianco.
public abstract class ResponseHandler<T> {
private static final String TAG = ResponseHandler.class.getSimpleName();
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
private final Context context;
public ResponseHandler() {
this(null);
}
public ResponseHandler(final Context context) {
this.context = context;
}
public abstract void onResponse(final T response);
public void onError(final ErrorResponse errorResponse) {
if (context == null) {
return;
}
Log.e(TAG, "An error occurred while invoking service. Error Code: " + errorResponse.getErrorCode() + LINE_SEPARATOR + "Message: " + errorResponse.getMessage() + LINE_SEPARATOR);
final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle(R.string.title_server_error_dialog);
alertBuilder.setMessage(R.string.network_error_message);
alertBuilder.setPositiveButton(R.string.text_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
dialog.dismiss();
}
});
alertBuilder.show();
}
public void onFailure(Throwable throwable) {
if (context == null) {
return;
}
Log.e(TAG, "An error occurred while invoking service", throwable);
final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle(R.string.title_network_error_dialog);
alertBuilder.setMessage(R.string.network_error_message);
alertBuilder.setPositiveButton(R.string.text_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
dialog.dismiss();
}
});
alertBuilder.show();
}
}
Creare una risposta di handle di metodo.
protected <T> void handleResponse(Call<T> call, final ResponseHandler<T> responseHandler) {
call.enqueue(new Callback<T>() {
@Override
public void onResponse(final Call<T> call, final Response<T> response) {
if (response.isSuccess()) {
if (responseHandler != null) {
responseHandler.onResponse(response.body());
}
} else {
final ErrorResponse errorResponse = parseError(response);
if (responseHandler != null) {
responseHandler.onError(errorResponse);
}
}
}
@Override
public void onFailure(final Call<T> call, final Throwable throwable) {
if (responseHandler != null) {
responseHandler.onFailure(throwable);
}
}
});
}
Per favore fatemi sapere se avete qualche dubbio su questo.
Ora da chiamare la tua risorsa come di seguito.
final MyResource resource = getRetrofitResource();
final Call<TKBaseResponse> response = resource .testConnection("ANY_URL_OF_YOUR_CHOICE");
handleResponse(response, new ResponseHandler<TKBaseResponse>(){
public void onResponse(final TKBaseResponse response){
//Do whatever you want to do here..
}
});
si può iniziare mostrando il resto del codice di chiamata, ed i log degli errori completi –
perché u necessario creare CustomCall?basta creare qualsiasi classe di interfaccia che contenga una semplice chiamata con dovrebbe essere sufficiente per creare qualsiasi applicazione che si connetta a qualsiasi webservice, non è vero? –
faruk
Si prega di dare un'occhiata da qui https://github.com/saveendhiman/SampleApp/tree/master/app/src/main/java/com/sampleapp/api – Saveen