2016-04-26 7 views
0

Im пытается получить данные из запроса POST для создания логики в моем приложении.получить данные из запроса POST

Например, если код == 200 начнет основную операцию, иначе постройте сообщение об ошибке.

Но, когда я пытаюсь получить эти данные из значения ответа (метод onResponse параметра), у меня есть NPE, а в стековой трассе я вижу, что response.body() = null.

В трассировке стека я также вижу, что запрос правильный и получить код == 200, статус = ОК. Из Почтальон я вижу, что этот запрос получает мне данные:

{ 
    "status": true, 
    "auth": { 
     "token": "f1071c34857e456b8ceb996de3459ab3", 
     "expires": "2017-04-26 10:01:21", 
     "user_id": "11272862" 
    }, 
    "user": { 
     "user_id": "11272862", 
     "username": "prozrostyslav", 
     "full_url": "https://vid.me/prozrostyslav", 
     "avatar": null, 
     "avatar_url": "https://d2ha22j8ys3e0o.cloudfront.net/images/default-avatars/13.png?602-2-2-4-9", 
     "cover": null, 
     "cover_url": "https://d2ha22j8ys3e0o.cloudfront.net/images/default-covers/03.jpg?602-2-2-4-9", 
     "displayname": null, 
     "follower_count": 0, 
     "likes_count": "0", 
     "video_count": 0, 
     "video_views": "0", 
     "videos_scores": 0, 
     "comments_scores": 0, 
     "bio": null 
    } 
} 

, но я не могу получить его в мое приложение :( API интерфейса:

public interface VideoApi { 

    @GET("/videos/featured") 
    Call<Videos> getFeaturedVideo(); 

    @GET("/videos/new") 
    Call<Videos> getNewVideo(); 

@Headers("Content-Type:application/x-www-form-urlencoded") 
    @FormUrlEncoded 
    @POST("/auth/create") 
    Call<SignInResults>insertUser(@Header("Authorization") String authorization,@Field("username") String username, 
          @Field("password") String password 
          ); 
} 

Фрагмент :(Ошибка в методе onResponse при попытке получить значение i)

public class FeedFragment extends Fragment { 
    EditText username; 
    EditText password; 
    Button btnLogin; 

    public List<SignInResult> signInResult; 
    String username_value,password_value; 
    public static final String ROOT_URL = "https://api.vid.me/"; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_feed, container, false); 
     username = (EditText) rootView.findViewById(R.id.user_name_field); 
     password = (EditText) rootView.findViewById(R.id.password_field); 
     btnLogin = (Button) rootView.findViewById(R.id.button_login); 
     btnLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Authorize(); 
      } 
     }); 
     return rootView; 
    } 

    public void Authorize() { 
     Retrofit retrofitAdapter = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(ROOT_URL) 
       .build(); 
     final VideoApi videoApi = retrofitAdapter.create(VideoApi.class); 

     username_value = username.getText().toString(); 
     password_value = password.getText().toString(); 
String basicauth = "Basic "+ Base64.encodeToString(String.format("%s:%s",username_value,password_value).getBytes(),Base64.NO_WRAP); 
     Call<SignInResults> call = videoApi.insertUser(basicauth,username_value,password_value); 
     call.enqueue(new Callback<SignInResults>() { 


      @Override 
      public void onResponse(Call<SignInResults> call, Response<SignInResults> response) { 
       String i = response.body().signInResult.getUser_id(); 
      Log.d("Response ==>> ", i); 

      } 

      @Override 
      public void onFailure(Call<SignInResults> call, Throwable t) { 

      } 
     }); 
} 
} 

SignInResult:

public class SignInResult { 


    @SerializedName("authorization") 
    @Expose 
    private String authorization; 
    @SerializedName("code") 
    @Expose 
    private String code; 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    @SerializedName("username") 
    @Expose 
    private String username; 

    public String getUser_id() { 
     return user_id; 
    } 

    public void setUser_id(String user_id) { 
     this.user_id = user_id; 
    } 

    @SerializedName("user_id") 
    @Expose 
    private String user_id; 
} 

SignInResults:

public class SignInResults { 
public SignInResult signInResult; 

    public List<SignInResult> getSignInResults() { 
     return signInResults; 
    } 

    List<SignInResult> signInResults; 
} 

ответ

1

Как я могу видеть, что Вы используете переоснащения. Давайте добавим еще несколько журналов, чтобы модифицировать ответ, запросить и посмотреть, что там.

Если вы запрашиваете браузер-браузер, браузер может добавить дополнительный персонал , такой как crftokens, некоторая информация из файлов cookie, но модификация не делает этого.

Мой пример модифицированной конфигурации. Примечание: это для версии 1.9 .. но не должно быть много изменений ни в одном.

 mRestAdapter = new RestAdapter.Builder() 
      .setEndpoint(SERVER_URL) 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .setConverter(gsonConverter) 
      .setLog(new RestAdapter.Log() { 
       @Override 
       public void log(String message) { 
        Log.d("Retrofit", message); 
       } 
      }) 
Смежные вопросы