【发布时间】:2019-06-04 03:51:49
【问题描述】:
我正在使用 Retrofit2 连接我用 NodeJS 编写的 API。当我尝试在服务器上发布数据时,我正在使用 MongoDB 数据库
HTTP 503 service unavailable
这些是我的依赖项:
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'
这是我的代码:
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();
}
});
}
}
请让我知道我在上面的代码中做错了什么。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
错误是来自服务器的 503..
-
什么意思。
-
你应该寻找服务器问题
-
谢谢,我得到了修复,这是一些服务器错误。但现在我得到了这样的东西。使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON
-
你可以验证你的json here
标签: android retrofit2 rx-java2