简体   繁体   中英

Unable to post data on server using RXjava2 + Retrofit2

I am using Retrofit2 to connect with my API written in NodeJS.I am using MongoDB database when I am trying to post data on server it is saying

HTTP 503 service unavailable  

These are my dependencies:

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

This is my code:

BioData.class

public class BioData {

    @SerializedName("name")
    @Expose
    private String name;

    @SerializedName("age")
    @Expose
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

RetrofitClient.java

public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getInstance(){

        if(retrofit == null)
            retrofit = new Retrofit.Builder()
                    .baseUrl("https://www.example.com/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();

        return retrofit;

         private RetrofitClient(){

        }

      }
}

ApiService.java

public interface ApiService {

    @POST("retrofitUsers")
    @FormUrlEncoded
    Observable<BioData> saveData(@Field("name") String name,
                                 @Field("age") String age);

}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    EditText name,age;
    Button submit;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        name = findViewById(R.id.name);
        age = findViewById(R.id.age);
        submit = findViewById(R.id.submit);
        progressBar = findViewById(R.id.progressBar);

        submit.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

              progressBar.setVisibility(View.VISIBLE);

              String str1 = name.getText().toString();
              String str2 = age.getText().toString();

              if(str1.equals("")){

                  progressBar.setVisibility(View.INVISIBLE);
                  Toast.makeText(getApplicationContext(),"Enter name",Toast.LENGTH_SHORT).show();
              }
              else if(str2.equals("")){

                  progressBar.setVisibility(View.INVISIBLE);
                  Toast.makeText(getApplicationContext(),"Enter age",Toast.LENGTH_SHORT).show();
              }
              else{

                  postData(str1,str2);
              }

            }

        });
    }

    private void postData(String str1,String str2){


        Retrofit retrofit  = RetrofitClient.getInstance();
        ApiService mapiService = retrofit.create(ApiService.class);

         mapiService.saveData(str1,str2)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .unsubscribeOn(Schedulers.io())
                 .subscribe(new Observer<BioData>() {

                     @Override
                     public void onSubscribe(Disposable d) {

                     }

                     @Override
                     public void onNext(BioData bioData) {


                     }

                     @Override
                     public void onError(Throwable e) {

                         progressBar.setVisibility(View.INVISIBLE);
                         Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                     }

                     @Override
                     public void onComplete() {

                         progressBar.setVisibility(View.INVISIBLE);
                         Toast.makeText(getApplicationContext(), "Data inserted successfully", Toast.LENGTH_SHORT).show();
                     }
                 });
      }
}

Someone please let me know what I am doing wrong in above code.Any help would be appreciated.

THANKS

For your appended comment question, replace:

.addConverterFactory(GsonConverterFactory.create())

to

.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))

check the explanation of lenient

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM