Отправить запрос POST в android с телом String

Хорошо, я просмотрел весь веб-сайт в поисках возможного решения для отправки запроса POST с помощью Android, но, похоже, я не понимаю использование здесь Volley или метода, который запускал асинхронный поток для выполнения запроса.

private RequestQueue signupRequestQ = Volley.newRequestQueue(this);

@Override
public void onClick(View view) {
    String postUrl = "https://mypost.url";
    signupRequestQ.start();

    switch (view.getId()) {
        case R.id.signupBtn:
            if (((EditText) findViewById(R.id.passwordSignup)).getText().toString().length() < 6) {
                Dialog.showInvalidInputFieldsDialog(this,"Password must be longer than 5 characters").show();
            } else {
                try {

                    StringRequest strRequest = new StringRequest(Request.Method.POST, postUrl,
                            response -> {
                                System.out.println(response);
                            },
                            error -> {
                                System.out.println("What the funk");
                            }) {
                        @Override
                        protected Map<String, String> getParams() {
                            LinkedHashMap<String, String> postForm = new LinkedHashMap<String, String>();
                            postForm.put("test", "var");
                            return postForm;
                        }
                    };

                    signupRequestQ.add(strRequest);
                } catch (ParseException e) {
                    System.out.println("Something went wrong");
                }

            }

    }

По какой-то причине этот код вызывает сбой моего приложения с java.lang.RuntimeException и java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir()' on a null object reference.

Однако я не должен сталкиваться с исключением NullPointerException, поскольку в javadoc Volley RequestQueue четко указано, что мне нужно было только предоставить контекст для метода newRequestQueue, что я и сделал.

Может ли кто-нибудь помочь с моей проблемой? Спасибо!

Сбой не вызван вашим кодом. Вы вызываете метод «getCacheDir ()» из нулевого контекста где-то еще. Если вам нужна помощь, опубликуйте код, в котором вызывается getCacheDir ().

Bubu 26.06.2018 13:55

Я вообще не называл getCacheDir() в коде. Всплывающая подсказка в Android Studio сообщила мне, что конструктор для очереди запросов взял только Context.

xiurobert 26.06.2018 14:32

Возможный дубликат Что такое исключение NullPointerException и как его исправить?

Selvin 26.06.2018 14:48

Вы находитесь в верхней части Activity, когда вызываете Volley.newRequestQueue (this)?

Bubu 26.06.2018 15:07

@Bubu Я сделал это прямо на вершине класса

xiurobert 27.06.2018 14:32

@ Сельвин, нет, проблема не в этом. Я использовал документацию Volley, и они не указали, что я должен предоставить каталог кеша, мне нужно было только предоставить контекст, что я и сделал. Не дубликат.

xiurobert 27.06.2018 14:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что вы создаете экземпляр RequestQueue с нулевым контекстом в верхней части Activity:

private RequestQueue signupRequestQ = Volley.newRequestQueue(this); // "this" is null here

Попробуйте создать RequestQueue в методе onCreate() вашей Activity, например:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    signupRequestQ = Volley.newRequestQueue(this);
}

Другие вопросы по теме