Dan
Dan

Reputation: 43

How to set up retrofit for my application?

I am just learning about Retrofit and Android development. What I would like to do is send a fairly complex JSON object to a server from a website and be able to retrieve it using Retrofit as a Java Object for my Android Application.

So basically something like this,

Website JSON --Ajax Call--> Server --Retrofit--> Android Application (Java Object / Collection)

Which server would be the best to set this up? Also are there any good references on how to accomplish this?

Thank you

Upvotes: 0

Views: 910

Answers (2)

Arnold Codes
Arnold Codes

Reputation: 11

With retrofit and android, you only need a couple of things

A java model

public class User {
    private String name;
    private String password;

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
//Getters and setters
//...
}

A retrofit interface

public interface APIService {
    @FormUrlEncoded
    @Headers("Accept: application/json")
    @POST("register")
    Call<AuthRegister> createUser(
            @Field("name") String name,
            @Field("password") String password
    );
}

A callback for retrofit

public class AuthRegister {
    @SerializedName("message")
    @Expose
    private String message;
    @SerializedName("errors")
    @Expose
    private Errors errors;

  public String getMessage() {
        return message;
    }
  public Errors getErrors() {
        return errors;
    }
}

A network client

public class NetworkClient {
    public static Retrofit retrofit;
    /*
    This public static method will return Retrofit client
    anywhere in the appplication
    */
    public static Retrofit getRetrofitClient() {
        //If condition to ensure we don't create multiple retrofit instances in a single application
        if (retrofit == null) {
            //Defining the Retrofit using Builder
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.level(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder()
//                    .addInterceptor(interceptor)
                    .connectTimeout(30, TimeUnit.MINUTES)
                    .build();

            retrofit = new Retrofit.Builder()
                    .baseUrl(Config.BASE_URL) //This is the only mandatory call on Builder object.
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create()) // Convertor library used to convert response into POJO
                    .build();
        }
        return retrofit;
    }
}

The call inside the activity you are to display the response or save the data

private void saveUser(String name, String password){
       Retrofit retrofit = NetworkClient.getRetrofitClient();
                        APIService service = retrofit.create(APIService.class);

                        Call<AuthRegister> call = service.createUser(name, password);
                        call.enqueue(new Callback<AuthRegister>() {
                            @Override
                            public void onResponse(Call<AuthRegister> call, Response<AuthLogin> response) {
                                if (response.code() == 200) {
                                    if (response.body().getMessage() != null) {
                                        Toast.makeText(mContext, "Success", Toast.LENGTH_SHORT).show();
                                    } else {
                                        Toast.makeText(mContext, "Could not save user", Toast.LENGTH_LONG).show();
                                    }
                                } else {
                                    Toast.makeText(mContext, "Could not save user", Toast.LENGTH_LONG).show();
                                }
                            }

                            @Override
                            public void onFailure(Call<AuthRegister> call, Throwable t) {
                                new PrefManager(mContext).clearUser();
                                Log.e(TAG, t.toString());
                                Toast.makeText(mContext, "Could not save user", Toast.LENGTH_SHORT).show();
                            }
                        });
}

Upvotes: 1

Swapnil Meshram
Swapnil Meshram

Reputation: 128

You can use any server as you need. Any complex JSON can be handled by retrofit library. Check the Following link Retrofit android example web services

Upvotes: 0

Related Questions