0

I've the following POST request, that I'm testing with Advanced REST Client (Chrome Extension):

URL: http://www.mysite.test/folder1/folder2/folder3/v1/register

PARAMETERS:

  • name: myName
  • surname: mySurname
  • email: myEmail
  • password: myPassword

The result is:

{
 error: false
 message: "You are successfully registered"
}

Now, all works with Advanced REST Client, but I want to translate this for Retrofit.

I created RestClientUsers :

public class RestClientUsers {
private static final String BASE_URL = "http://www.mysite.test/folder1/folder2/folder3";
private ApiServiceUsers apiServiceUsers;

public RestClientUsers() {
    Gson gson = new GsonBuilder()
            .setDateFormat("dd'-'MM'-'yyyy'T'HH':'mm':'ss'.'SSS'Z'")
            .create();
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setEndpoint(BASE_URL)
            .setConverter(new GsonConverter(gson))
            .build();

    apiServiceUsers = restAdapter.create(ApiServiceUsers.class);

}

public ApiServiceUsers getApiServiceUsers() {
    return apiServiceUsers;
}
}

But I don't know how to procede in order to obtain a perfectly working system.

I would like to execute the request, and store error and message into 2 variables.

Can someone please help me? Thanks in advance.

helloimyourmind
  • 994
  • 4
  • 14
  • 30

1 Answers1

1

You have to create a few class like this.

public class ObjectPost {
String myName;
String mySurname;
String myEmail;
String myPassword;

public void setMyEmail(String myEmail) {
    this.myEmail = myEmail;
}

public void setMyName(String myName) {
    this.myName = myName;
}

public void setMyPassword(String myPassword) {
    this.myPassword = myPassword;
}

public void setMySurname(String mySurname) {
    this.mySurname = mySurname;
}}

///// pojo receive

public class ObjectRecieve {
Boolean error;
String message;

public Boolean isError() {
    return error;
}

public String getMessage() {
    return message;
}}

//

 public interface RestFul {
@POST("/v1/register")
void getValue(@Body ObjectPost mObject,Callback<ObjectRecieve> object);}

// Test within My MainActivity

 @Override
protected void onCreate(Bundle savedInstanceState) {
 RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint("http://www.mysite.test/folder1/folder2/folder3")
        .build();

  RestFul  restFul  = restAdapter.create(RestFul.class);

  ObjectPost  objectPost = new ObjectPost();
  objectPost.setMyName("xxxx");
  objectPost.setMySurname("xxxx");
  objectPost.setMyPassword("xxxx");
  objectPost.setMyEmail("xxxx");



  restFul.getValue(objectPost,new Callback<ObjectRecieve>() {
   @Override
        public void success(ObjectRecieve result, Response response) {
          // receive your object here.
         Log.d("TAG",""+result.getMessage())


     })
   @Override
        public void failure(RetrofitError error) {
            System.out.println("error = [" + error + "]");                
            Toast.makeText(getApplication(),
                    "Please check your internet connection.",       Toast.LENGTH_SHORT)
                    .show();


        }


}
Telember
  • 455
  • 6
  • 24
  • Hi, I've an error on restFul.getValue: Class Anonymus Class derived from Callback must either be declared abstract or implement abstract method success(T, response) in 'Callback' – helloimyourmind Jul 07 '15 at 11:39
  • oh! , my wrong change this **restFul.getValue(objectPost,new Callback()** – Telember Jul 07 '15 at 12:35
  • can you call **restFul.getValue** Method? First time my code is **restFul.getValue(objectPost,new Callback()** – Telember Jul 07 '15 at 13:14
  • Is this right? restFul.getValue(objectPost, new Callback() { Override public void success(RegistrationReceiver registrationReceiver, Response response) { Log.d("OK", ""); } Override public void failure(RetrofitError error) { System.out.println("error = [" + error + "]"); } }); – helloimyourmind Jul 07 '15 at 13:17
  • Yes, after the request, failure method is fired: ApiServiceUsers.getValue: No Retrofit annotation found. (parameter #1) – helloimyourmind Jul 07 '15 at 13:23
  • you try to add **@Body** in **void getValue( @Body ObjectPost mObject,Callback object);** . I forgot it. – Telember Jul 07 '15 at 13:33
  • I also tried with: **@Headers("Content-Type: application/x-www-form-urlencoded")** But this time **failure** is fired. – helloimyourmind Jul 07 '15 at 15:30
  • Check your parameters is correct ? try this >> *http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/* – Telember Jul 07 '15 at 15:33
  • you try to add **@Headers("Content-Type:application/json")** – Telember Jul 07 '15 at 15:49
  • I cant solve this ,but I found something, that seem to be useful [link 1](http://stackoverflow.com/questions/26945240/retrofit-bing-api-very-weird-bug-http-400-android) or [link 2](http://stackoverflow.com/questions/23127731/retrofit-post-return-bad-request-error-400) – Telember Jul 08 '15 at 00:07
  • I found something: the problem is that request is bad (error 400) because all of the parameters are missing, so using your code, I'm not passing the parameters.. – helloimyourmind Jul 08 '15 at 00:14
  • I setted a higher log level, and the problem is that the parameters are passed in the json form in the request although I use **@Headers("Content-Type:application/x-www-form-urlencoded")** – helloimyourmind Jul 08 '15 at 00:29
  • Ok I found the solution, now it works: @FormUrlEncoded @POST("/v1/register") void getValue(@Field("myName")String myName, @Field("mySurname")String mySurname, @Field("myEmail")String myEmail, @Field("myPassword")String myPassword, Callback object); – helloimyourmind Jul 08 '15 at 00:38