【问题标题】:POST with Android Retrofit return null带有 Android Retrofit 的 POST 返回 null
【发布时间】:2019-11-29 19:34:30
【问题描述】:

我想向我的网络服务发送请求, 基于我的 json 我有示例类。当一个发送请求注意返回时。

   public void sendPost(String icon_url, String id) {
    mAPIService.savePost(icon_url, id).enqueue(new Callback<Example>() {
        @Override
        public void onResponse(Call<Example> call, Response<Example> response) {

            if(response.isSuccessful()) {
                showResponse(response.body().toString());
                Log.i("mhs", "post submitted to API." + response.body().toString());
            }
        }

        @Override
        public void onFailure(Call<Example> call, Throwable t) {
            Log.e("mhs1", "Unable to submit post to API.");
        }
    });
}


@POST("/TranslateLongText")
@Headers("Content-Type: application/json")
@FormUrlEncoded
Call<Example> savePost(
        @Field("fromText") String fromText,
        @Field("targetLanguage") String targetLanguage);

在点击我的按钮时,我只是调用:

      submitBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {



                sendPost("قارسی", "en");

        }
    });

【问题讨论】:

  • 也许为你的改造调用设置@FormUrlEncoded就足够了,你可以删除@Headers("Content-Type: application/json")
  • @BanMarkovic 我省略了这个,但没有任何改变
  • 可能问题出在您的字符串“قارسی”中,可能服务器无法处理这种格式。您是否尝试过使用常规的 UTF-8 字符串?

标签: android retrofit retrofit2


【解决方案1】:
public abstract class BaseRetrofit {

public final static String WebApiAndSignalrUrl = "http://0.0.0.0:81/";

private static volatile LoginController loginController;

private static volatile MobilController mobilController;

public static synchronized LoginController getLoginController() {
    if (loginController == null) {
        loginController = createRetrofit().create(LoginController.class);
    }
    return loginController;
}

public static synchronized MobilController getMobilController() {
    if (mobilController == null) {
        mobilController = createRetrofit().create(MobilController.class);
    }
    return mobilController;
}

private static Retrofit createRetrofit() {
    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(s -> Log.e("Request", s));
    loggingInterceptor.level(HttpLoggingInterceptor.Level.BASIC);



    OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
            .connectTimeout(60, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .writeTimeout(60, TimeUnit.SECONDS))
            .addNetworkInterceptor(loggingInterceptor)
            .build();

    return new Retrofit.Builder()
            .baseUrl(WebApiAndSignalrUrl)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();
}

}

@Headers({"User-Agent: AndroidClient"})
@POST("Mobil/InsertDbErrorTracer")
Observable<String> InsertDbErrorTracer(@Header("Authorization") String Token, @Body List<DbErrorTracer> dbErrorTracers);



 public String uploadLogServer(List<DbErrorTracer> dbErrorTracers) {
    return BaseRetrofit
            .getMobilController()
            .InsertDbErrorTracer(getWebapiToken(), dbErrorTracers)
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .blockingFirst();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2017-03-23
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多