android Retrofit 2 :第1行第1列路径$的输入结束

ig9co6j1  于 2022-12-31  发布在  Android
关注(0)|答案(6)|浏览(178)

我已经对这个特定的问题进行了彻底的搜索,但是在我遇到的每个问题下实现答案时,仍然得到相同的输出:

End of input at line 1 column 1 path $

我在PostMan上执行了请求,得到了预期的输出:Here is the Screenshot of the Postman Request

接口

@POST(Constant.API_REQUEST)
    Observable<ServerResponse> postToWinnersList(@Body ServerRequest serverRequest);

Api客户端

public class ApiClient {
    public static Retrofit retrofit;

    private static OkHttpClient.Builder okHttpClientBuilder;
    private static HttpLoggingInterceptor loggingInterceptor;

    public static Retrofit getApiClient(){
        if (retrofit == null){
//            create instance of Httpclient
            okHttpClientBuilder = new OkHttpClient.Builder();
            loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

            if(BuildConfig.DEBUG){
                okHttpClientBuilder.addInterceptor(loggingInterceptor);
            }
//            instance of retrofit
            retrofit = new Retrofit.Builder().baseUrl(Constant.BASE_URL).
                    addCallAdapterFactory(RxJava2CallAdapterFactory.create()).
                    addConverterFactory(GsonConverterFactory.create())
                    .client(okHttpClientBuilder.build())
                    .build();
        }
        return retrofit;
    }
}

改装/RxJava请求代码:

Observable<ServerResponse> response = apiInterface.postToWinnersList(serverRequest);
                response.observeOn(AndroidSchedulers.mainThread())
                        .subscribeOn(Schedulers.io())
                        .subscribeWith(new DisposableObserver<ServerResponse>() {
                            @Override
                            public void onNext(ServerResponse serverResponse) {
                                AVLoadingIndicatorView1.setVisibility(View.GONE);
                                txtSubmitWinner.setVisibility(View.VISIBLE);
                            }

                            @Override
                            public void onError(Throwable e) {
                                AVLoadingIndicatorView1.setVisibility(View.GONE);
                                txtSubmitWinner.setVisibility(View.VISIBLE);
                                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void onComplete() {
                                showShortMsg(getString(R.string.submit_success));
                            }
                        });

请帮忙,先谢了。

u5rb5r59

u5rb5r591#

当您期望响应中包含一个对象,但API只返回结果代码(200,...)时,您可能会遇到此错误。- 检查API是否真的返回了ServerResponse。-如果您真的不需要它返回任何内容,请使用Observable<Response<Void>>而不是Observable<ServerResponse>

7uhlpewt

7uhlpewt2#

只有当json响应有问题时才会出现该错误,请再次检查以确保错误响应和正确响应的格式都正确。
使用postman输入错误的凭据,然后查看输出结果。

lhcgjxsq

lhcgjxsq3#

不确定,但我认为在Constant.API_REQUEST中您没有附加“/"。请让我知道它是否正确。
例如@POST("index.php") // wrong

@POST("/index.php") //correct way
vxqlmq5t

vxqlmq5t4#

当答案为空时会发生此错误。若要更正此错误,请确保在返回的请求中将包含空。
例如,与Kotlin的接口

@POST("endPoint/")
fun relatarProblema(@Body serverRequest: ServerRequest ): Call<Void>

不要忘记重写API调用中的返回类型。
示例whitKotlin

call.enqueue (object: Callback <Void> {
override fun onResponse(call: Call<Void>, response: Response<Void>) {

        }

        override fun onFailure(call: Call<Void>, t: Throwable) {

        }

})

ctrmrzij

ctrmrzij5#

当我使用协程的时候,帮助我的是基本上不从方法返回任何东西:

@GET
@Headers("X-Requested-With:XMLHttpRequest")
suspend fun methodCall(
    @Url url: String
)
vatpfxk5

vatpfxk56#

昨天我也遇到了同样的异常,发现我使用的是LogOutResponse数据类作为API的预期响应,但后来我发现API不返回任何与该数据类对应的JSON响应,实际上,它在主体中不返回任何内容,只返回结果代码(200,300,400等)。

@POST("logout")
    suspend fun logout(): LogOutResponse

@POST("logout")
suspend fun logout(): Response<Unit>

早期的改进尝试在第1行解析JSON响应,但该行没有JSON,这就是抛出异常的原因。
修改后,代码运行良好,因为Response是一个默认的改进类,其内部的Unit类型是void类型,这意味着我们不期望返回任何内容(响应中没有JSON主体)。

相关问题