在Android中使用String正文发送POST请求

时间:2018-06-26 11:39:59

标签: java android post android-volley

好的,我在整个网站上寻找了使用android发送POST请求的可能解决方案,但我似乎不了解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.RuntimeExceptionjava.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir()' on a null object reference

但是,我不应该遇到NullPointerException,因为Volley RequestQueue Javadoc清楚地表明,我只需要为newRequestQueue方法提供一个上下文即可。

有人可以帮助解决我的问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为您在Activity顶部使用空上下文实例化了RequestQueue:

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

尝试在Activity的onCreate()方法中创建您的RequestQueue,例如:

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