NPE в методе onResponse с использованием Retrofit

Я пытаюсь получить данные из метода onResponse через библиотеку Retrofit. Но теперь у меня есть ответ == 0. Мне нужно получить код моего запроса, чтобы построить логику в моем приложении. Например, если код == 200, начать новую активность что-то еще сообщение об ошибке сборки. Я пытаюсь создать правильный метод POST для службы vid.me. Эта служба имеет открытый API, метод, который мне нужен: https://docs.vid.me/#api-Auth-Create мой фрагмент:

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();

        Call<SignInResults> call = videoApi.insertUser(username_value,password_value);
        call.enqueue(new Callback<SignInResults>() {


            @Override
            public void onResponse(Call<SignInResults> call, Response<SignInResults> response) {
                SignInResults results = response.body();
                Log.d("Response ==>> ", new GsonBuilder().setPrettyPrinting().create().toJson(results));

            }

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

            }
        });
}
}

Интерфейс 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(@Field("email") String username,
                           @Field("password") String password
                           );
}

Класс SignInResult:

public class SignInResult {
    public String getAuthorization() {
        return authorization;
    }

    public void setAuthorization(String authorization) {
        this.authorization = authorization;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    @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;
}

person pr Rost    schedule 25.04.2016    source источник
comment
Можете ли вы предоставить трассировку стека исключения NPE?   -  person nnesterov    schedule 25.04.2016


Ответы (1)


Вы должны изменить этот код, чтобы правильно обрабатывать результаты

Call<SignInResults> call = videoApi.insertUser(username_value,password_value);
    call.enqueue(new Callback<SignInResults>() {

        @Override
        public void onResponse(Call<SignInResults> call, Response<SignInResults> response) {
            if(response.isSuccessful()) {
                SignInResults results = response.body();
                Log.d("Response ==>> ", new GsonBuilder().setPrettyPrinting().create().toJson(results));
            }
            else {
                // handle error
            }
        }

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

        }
    });
person vaibhav    schedule 26.04.2016