2016-05-18 4 views
1

Я не знаю, где моя проблема. Я должен отправить сырое тело, какМодернизация: получение ошибки ** Конец ввода в строке 1 столбец 1 **

{"app_id":"abced","app_key":"abced","request":"login","username":"[email protected]","password":"1234"} 

Я использую retrofit 2.0. Я создал интерфейс, как

@FormUrlEncoded 
@POST("index.php/") 
Call<LoginResponse> getHome(@Field("app_id") String request, 
          @Field("app_key") String request1, 
          @Field("request") String request2, 
          @Field("username") String request3, 
          @Field("password") String request4); 

и вызов, как это:

Retrofit retrofitget = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     MyAPI ApiData = retrofitget.create(MyAPI.class); 
     Call<LoginResponse> GalleryGetSet = ApiData.getHome("abced","abced","login","[email protected]","1234"); 
     GalleryGetSet.enqueue(new Callback<LoginResponse>() { 
      @Override 
      public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
       Log.e(TAG, "data1" + response.body().getError()); 
      } 

      @Override 
      public void onFailure(Call<LoginResponse> call, Throwable t) { 
       Log.e(TAG, "Error2" + t.getMessage()); 
      } 
     }); 

всегда получаю сообщение об ошибке: Конец ввода в строке 1 колонки 1 Правильно ли процесс размещать исходные данные тела через переделать пост или я ошибаюсь. Уже google он, но не получил мое решение. Пожалуйста, помогите мне.

Я также попытался таким образом интерфейс

@FormUrlEncoded 
@POST("index.php") 
Call<LoginResponse> getHome1(@Field("login") String data); 

и при вызове

Retrofit retrofitget = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addConverterFactory(ScalarsConverterFactory.create()) 
       .build(); 
     MyAPI ApiData = retrofitget.create(MyAPI.class); 

     Call<LoginResponse> listGalleryGetSet = ApiData.getHome("ABCD","ABCD","login","[email protected]","1234"); 
     listGalleryGetSet.enqueue(new Callback<LoginResponse>() { 
      @Override 
      public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
       Log.e(TAG, "data1" + response.body().getError()); 
      } 

      @Override 
      public void onFailure(Call<LoginResponse> call, Throwable t) { 
       Log.e(TAG, "Error" + t.getMessage()); 
      } 
     }); 

Мой LoginResponse класс

public class LoginResponse { 

private String error; 

private Boolean vlink; 

/** 
* 
* @return 
* The error 
*/ 
public String getError() { 
    return error; 
} 

/** 
* 
* @param error 
* The error 
*/ 
public void setError(String error) { 
    this.error = error; 
} 

/** 
* 
* @return 
* The vlink 
*/ 
public Boolean getVlink() { 
    return vlink; 
} 

/** 
* 
* @param vlink 
* The vlink 
*/ 
public void setVlink(Boolean vlink) { 
    this.vlink = vlink; 
} 

}

**This is how I'm posting on postman**

зависимость

compile 'com.squareup.retrofit2:retrofit-converters:2.0.0-beta3' 
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3' 
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3' 

Заранее спасибо

+0

и какой ваш пример ответа на вход пользователя json. Если вы его обновите, я исправлю вашу проблему. –

+0

pls check it Я уже обновил свой класс LoginResponse pojo ** {"error": "Аккаунт не активирован. Пожалуйста, проверьте электронную почту для активации вашей учетной записи.", "Vlink": true} ** И это мой ответ json –

+0

, если кому-то нужна помощь, не стесняйтесь спрашивать в любое время –

ответ

2

Вместо использования

@POST("index.php") 

, пожалуйста, попробуйте использовать

@POST("/index.php") 

и пост как

Call<LoginResponse> getHome(@Body YourBodyPojo pojo); 

, конечно, это поможет вам.

+0

благодарит за вашу помощь. каким-то образом уже поймал мою ошибку –

+0

вы можете поделиться своей ошибкой, чтобы она помогла другим – pavel

1

вставить пример тела Json на этом сайте, выберите источник Json, аннотаций None: Json Schema 2 Pojo

Тогда я п ваш Api:

@POST("index.php") 
public Call<LoginResponse> getHome(@Body YourBodyPojo pojo); 

Затем вызова: класс

OkHttpClient okClient = new OkHttpClient.Builder() 
      .connectTimeout(5,TimeUnit.SECONDS) 
      .build(); 


    Gson gson = new GsonBuilder() 
      .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
      .create(); 

    Retrofit client = new Retrofit.Builder() 
      .baseUrl(baseUrl) 
      .addConverterFactory(GsonConverterFactory.create(gson)) 
      .client(okClient) 
      .build(); 

    MyAPI apiData = retrofitget.create(MyAPI.class); 

    LoginRequest loginRequest=new LoginRequest(); 
    loginRequest.setUserName("abc"); 
    loginRequest.setPassword("123"); 
    Call<LoginResponse> listGalleryGetSet = apiData.getHome(loginRequest); 
    listGalleryGetSet.enqueue(new Callback<LoginResponse>() { 
     @Override 
     public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
      Log.e(TAG, "data1" + response.body().getError()); 
     } 

     @Override 
     public void onFailure(Call<LoginResponse> call, Throwable t) { 
      Log.e(TAG, "Error" + t.getMessage()); 
     } 
    }); 

Ответ: класс

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 


public class YourResponse{ 

@SerializedName("error") 
@Expose 
private String error; 
@SerializedName("vlink") 
@Expose 
private Boolean vlink; 

/** 
* 
* @return 
* The error 
*/ 
public String getError() { 
    return error; 
} 

/** 
* 
* @param error 
* The error 
*/ 
public void setError(String error) { 
    this.error = error; 
} 

/** 
* 
* @return 
* The vlink 
*/ 
public Boolean getVlink() { 
    return vlink; 
} 

/** 
* 
* @param vlink 
* The vlink 
*/ 
public void setVlink(Boolean vlink) { 
    this.vlink = vlink; 
} 

} 

тела:

package com.example; 


public class YourBodyClass{ 

private String appId; 
private String appKey; 
private String request; 
private String username; 
private String password; 

/** 
* 
* @return 
* The appId 
*/ 
public String getAppId() { 
    return appId; 
} 

/** 
* 
* @param appId 
* The app_id 
*/ 
public void setAppId(String appId) { 
    this.appId = appId; 
} 

/** 
* 
* @return 
* The appKey 
*/ 
public String getAppKey() { 
    return appKey; 
} 

/** 
* 
* @param appKey 
* The app_key 
*/ 
public void setAppKey(String appKey) { 
    this.appKey = appKey; 
} 

/** 
* 
* @return 
* The request 
*/ 
public String getRequest() { 
    return request; 
} 

/** 
* 
* @param request 
* The request 
*/ 
public void setRequest(String request) { 
    this.request = request; 
} 

/** 
* 
* @return 
* The username 
*/ 
public String getUsername() { 
    return username; 
} 

/** 
* 
* @param username 
* The username 
*/ 
public void setUsername(String username) { 
    this.username = username; 
} 

/** 
* 
* @return 
* The password 
*/ 
public String getPassword() { 
    return password; 
} 

/** 
* 
* @param password 
* The password 
*/ 
public void setPassword(String password) { 
    this.password = password; 
} 

} 
+0

Спасибо за ответ ур. Я сделал это, но я получаю ошибку ** Невозможно создать @ Body Converter для класса LoginRequest (мой класс pojo) **. Я удаляю первую строку @ FormUrlEncoded bcoz, я получал ошибку ** @ Параметры тела не могут использоваться с формой или многочастной кодировкой. ** Можете ли вы рассказать мне, как передать данные входа (json)? –

+0

, пожалуйста, проверьте его, я разместил мой класс LoginResponse выше, и мой класс LoginRequest такой же, как вы сказали ** класс pojo с аннотацией nonce ** Call getHome1 (@Body LoginRequest pojo); –

+0

Да, я использую ** GsonConvertorFactory ** и аннотацию изменения, но та же ошибка - тр ** Невозможно создать конвертер @Body для класса LoginRequest ... –