我正在使用volley发送Web服务请求,并且齐射响应是SERVER ERROR(此站点需要启用java脚本)。我尝试过POST和GET方法。 经过一番搜索,我发现了这两个问题。 Volley Server error (Requires javascript?) Android Development but there is no answer to solve this issue in 2 months
Disable Javascript on volley StringRequest but there is no answer to solve this issue in 6 months
找不到更多问题和解决方案。任何人都可以告诉这个问题的确切问题和解决方案。 这是我的代码
public void postRequest(final JSONObject jsonParams,final Handler handler){
StringRequest stringRequest = new StringRequest(Request.Method.POST, AppConstants.ADMIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Message message = handler.obtainMessage();
message.obj = response;
handler.sendMessage(message);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Message message = handler.obtainMessage();
message.obj = error.toString();
Log.d("error",error.toString());
handler.sendMessage(message);
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
Iterator<String> iter = jsonParams.keys();
while (iter.hasNext()) {
try {
String key = iter.next();
String value = jsonParams.get(key)+"";
params.put(key,value);
} catch (JSONException e) {
// Something went wrong!
Message message = handler.obtainMessage();
message.obj = e.getMessage();
handler.sendMessage(message);
}
}
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers = new HashMap<String, String>();
return headers;
}
};
MyVolley.getInstance(context).getRequestQueue().add(stringRequest);
}
和网络服务代码
<?php if(true) { echo 'request arrived'; } ?>
答案 0 :(得分:1)
解决方案:-
webview
(如果您是
期待Json的回应)。 onPageFinished
内部覆盖setWebwiewclient()
。String cookies = CookieManager.getInstance().getCookie(url);
key="cookie"
代码参考:-
WebView webViewRequest=new WebView("your app context");
webViewRequest.getSettings().setJavaScriptEnabled(true);
webViewRequest.setWebViewClient(new WebViewClient());
webViewRequest.getSettings().setLoadWithOverviewMode(true);
webViewRequest.getSettings().setUseWideViewPort(true);
webViewRequest.getSettings().setSupportZoom(false);
webViewRequest.getSettings().setBuiltInZoomControls(false);
webViewRequest.getSettings().setDisplayZoomControls(false);
webViewRequest.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webViewRequest.requestFocusFromTouch();
webViewRequest.getSettings().setAppCacheEnabled(false);
webViewRequest.setScrollbarFadingEnabled(false);
webViewRequest.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
cookies = CookieManager.getInstance().getCookie(url);//here you will get cookie
Log.d(TAG, "onPageFinished: "+cookies);
StringRequest Request = new StringRequest(url, new
Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "onResponse: "+response.toString());
// your data from server
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> map = new HashMap<>();
map.put("Cookie", cookies);
return map;
}
};
Mysingleton.getMinstance(DashboardActivity.context).addToRequestQue(Request);
}
});
webViewRequest.loadUrl("your url here");
}
答案 1 :(得分:0)
我最近遇到了这个错误!您的代码完全没问题,但问题出在您的网站主机上。 (它是byexost)? 它有一个机器人探测器运行,不会让你的Android凌空请求进入。不幸的是,这不能被禁用/关闭。 尝试更改您的网络托管服务。 希望这有帮助☺
答案 2 :(得分:0)
this回答中提出了一个很好的解决方法。
在Volley中,您可以覆盖fun merge ([], l2) = l2
| merge (l1, []) = l1
| merge (l1 as x :: xs, l2 as y :: ys) =
if x < y
then x :: merge (xs, l2)
else y :: merge (l1, ys)
方法以使用您的HTTP请求发送Cookie。
代码:
getHeaders()