Sending JSON in POST request with Retrofit2
Use these in gradle
compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'com.squareup.retrofit2:converter-scalars:2.3.0'
Use these two POJO class ........
LoginData.class
public class LoginData { private String email; private String password; public LoginData(String email, String password) { this.email = email; this.password = password; } /** * * @return * The email */ public String getEmail() { return email; } /** * * @param email * The email */ public void setEmail(String email) { this.email = email; } /** * * @return * The password */ public String getPassword() { return password; } /** * * @param password * The password */ public void setPassword(String password) { this.password = password; }}
LoginResult.class
public class LoginResult { private Boolean error; private String message; private Integer doctorid; private Boolean active; /** * * @return * The error */ public Boolean getError() { return error; } /** * * @param error * The error */ public void setError(Boolean error) { this.error = error; } /** * * @return * The message */ public String getMessage() { return message; } /** * * @param message * The message */ public void setMessage(String message) { this.message = message; } /** * * @return * The doctorid */ public Integer getDoctorid() { return doctorid; } /** * * @param doctorid * The doctorid */ public void setDoctorid(Integer doctorid) { this.doctorid = doctorid; } /** * * @return * The active */ public Boolean getActive() { return active; } /** * * @param active * The active */ public void setActive(Boolean active) { this.active = active; }}
Use API like this
public interface RetrofitInterface { @POST("User/DoctorLogin") Call<LoginResult> getStringScalar(@Body LoginData body);}
use call like this ....
Retrofit retrofit = new Retrofit.Builder() .baseUrl("Your domain URL here") .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); RetrofitInterface service = retrofit.create(RetrofitInterface .class); Call<LoginResult> call=service.getStringScalar(new LoginData(email,password)); call.enqueue(new Callback<LoginResult>() { @Override public void onResponse(Call<LoginResult> call, Response<LoginResult> response) { //response.body() have your LoginResult fields and methods (example you have to access error then try like this response.body().getError() ) } @Override public void onFailure(Call<LoginResult> call, Throwable t) { //for getting error in network put here Toast, so get the error on network } });
EDIT:-
put this inside the
success()
....
if(response.body().getError()){ Toast.makeText(getBaseContext(),response.body().getMessage(),Toast.LENGTH_SHORT).show();}else { //response.body() have your LoginResult fields and methods (example you have to access error then try like this response.body().getError() ) String msg = response.body().getMessage(); int docId = response.body().getDoctorid(); boolean error = response.body().getError(); boolean activie = response.body().getActive()(); }
Note :- Always use POJO classes , it remove the JSON data parsing in the retrofit .
This way works for me
Add this in your gradle
compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'com.squareup.retrofit2:converter-scalars:2.3.0'
Interface
public interface ApiInterface { String ENDPOINT = "http://10.157.102.22/rest/"; @Headers("Content-Type: application/json") @POST("login") Call<User> getUser(@Body String body);}
Activity
public class SampleActivity extends AppCompatActivity implements Callback<User> { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); Retrofit retrofit = new Retrofit.Builder() .baseUrl(ApiInterface.ENDPOINT) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiInterface apiInterface = retrofit.create(ApiInterface.class); // prepare call in Retrofit 2.0 try { JSONObject paramObject = new JSONObject(); paramObject.put("email", "sample@gmail.com"); paramObject.put("pass", "4384984938943"); Call<User> userCall = apiInterface.getUser(paramObject.toString()); userCall.enqueue(this); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onResponse(Call<User> call, Response<User> response) { } @Override public void onFailure(Call<User> call, Throwable t) { }}
i think you should now create a service generator class and after thatyou should use Call to call your service
PostInterface postInterface = ServiceGenerator.createService(PostInterface.class);Call<responseBody> responseCall = postInterface.getStringScalar(requestBody);
then you can use this for synchronous request and get the body of response:
responseCall.execute().body();
and for asynchronous :
responseCall.enqueue(Callback);
refer to link provided below for complete walkthrough and how to create ServiceGenerator :
https://futurestud.io/tutorials/retrofit-getting-started-and-android-client