好的,我在整个网站上寻找了使用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.RuntimeException
和java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir()' on a null object reference
。
但是,我不应该遇到NullPointerException,因为Volley RequestQueue Javadoc清楚地表明,我只需要为newRequestQueue方法提供一个上下文即可。
有人可以帮助解决我的问题吗?谢谢!
答案 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);
}