Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用改装将数据发布到服务器时出错_Android_Retrofit - Fatal编程技术网

Android 使用改装将数据发布到服务器时出错

Android 使用改装将数据发布到服务器时出错,android,retrofit,Android,Retrofit,我正在尝试使用改型将数据从我的应用程序发送到服务器。我正在向接口发送json格式的数据。此webservice与postman一起工作,但在应用程序中使用时会出现以下错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $ 在调试过程中,我可以看到我的数据是正确的json格式,如下所

我正在尝试使用改型将数据从我的应用程序发送到服务器。我正在向接口发送json格式的数据。此webservice与postman一起工作,但在应用程序中使用时会出现以下错误

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $
在调试过程中,我可以看到我的数据是正确的json格式,如下所示

{
"login_id":39,
"contact_no":"91775668"}
 JSONObject object=new JSONObject();
 try {

    Call<OTPResponse>call=userService.getOTP(key,new PostData(email,password));
    call.enqueue(new Callback<OTPResponse>() {
        @Override
        public void onResponse(Call<OTPResponse> call, Response<OTPResponse> response) {
        } else { }
下面是我向服务器发送数据的方法

  JSONObject object=new JSONObject();
    try {

        object.put("login_id",loginID);
        object.put("contact_no",mobileNumber);

        Call<OTPResponse>call=userService.getOTP(key,object.toString());
        call.enqueue(new Callback<OTPResponse>() {
            @Override
            public void onResponse(Call<OTPResponse> call, Response<OTPResponse> response) {

                }else {


                }

解决方案:

而不是在
@正文
中写入字符串:

Call<OTPResponse>getOTP(@Header("API-KEY")String key,@Body String otpdetails);

现在试试。

您需要使用以下代码更改api调用

public class PostData {

private String id;
private String phone;

public PostData(String id, String phone) {
    this.id= id;
    this.phone = phone;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone= phone;
}

}
接口方法

@Headers("Content-Type:application/json")
@POST(OTP_URL)
Call<OTPResponse>getOTP(@Header("API-KEY")String key,
@Body PostData body);
@Headers(“内容类型:application/json”)
@POST(OTP_URL)
CallgetOTP(@Header(“API-KEY”)字符串键,
@正文(数据正文);
并更改您的请求,如下所示

{
"login_id":39,
"contact_no":"91775668"}
 JSONObject object=new JSONObject();
 try {

    Call<OTPResponse>call=userService.getOTP(key,new PostData(email,password));
    call.enqueue(new Callback<OTPResponse>() {
        @Override
        public void onResponse(Call<OTPResponse> call, Response<OTPResponse> response) {
        } else { }
JSONObject object=new JSONObject();
试一试{
Callcall=userService.getOTP(key,newpostdata(email,password));
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
}else{}
执行此操作

Call<OTPResponse>getOTP(@Header("API-KEY")String key,@Body("login_id") String loginId, @Body("contact_no") String contactNo);

编辑:
@FormUrlEncoded
而不是
@URLFormEncoded

在这一行中,您正在转换字符串形式的json。请更改json中的getOtp()函数第二个参数和用户

Call<OTPResponse>call=userService.getOTP(key,object);
Callcall=userService.getOTP(键,对象);
不是


Callcall=userService.getOTP(key,object.toString());

看起来您的响应与预期不匹配。应用程序需要一个api可能返回数组的对象。发布您的OTPResponse和响应json。添加了OTPResponse和响应json。请检查您从何处获得此异常检查
对象.toString()的值是多少
看起来您只发送字符串,而不是预期的json。public void onFailure()在call.enqueue中,如果
不起作用,请尝试
对于使用的mapi,这两种方法仍然给出相同的错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:BEGIN\u对象应为字符串,但在第2行第1列路径处为字符串$@NewBee:如果您在项目中使用gson,请尝试更新的答案。请查看我的更新它给出了错误:(47,64)错误:找不到符号方法值(),这意味着服务器端存在错误
@Headers("Content-Type:application/json")
@POST(OTP_URL)
Call<OTPResponse>getOTP(@Header("API-KEY")String key,
@Body PostData body);
 JSONObject object=new JSONObject();
 try {

    Call<OTPResponse>call=userService.getOTP(key,new PostData(email,password));
    call.enqueue(new Callback<OTPResponse>() {
        @Override
        public void onResponse(Call<OTPResponse> call, Response<OTPResponse> response) {
        } else { }
Call<OTPResponse>getOTP(@Header("API-KEY")String key,@Body("login_id") String loginId, @Body("contact_no") String contactNo);
@FormUrlEncoded
@POST(OTP_URL)
Call<OTPResponse>getOTP(@Header("API-KEY")String key,@Body("login_id") String loginId, @Body("contact_no") String contactNo);
Call<OTPResponse>call=userService.getOTP(key,object);