401在android中使用Volley库时发生授权错误
我使用Volley库是为了将我的设置活动与Android Studio上的服务器集成。我正在执行一个请求GET method,以便从服务器检索值。但是当我尝试做同样的事情时,我得到了一个凌空的错误,说明401错误 我也在POSTMAN应用程序上测试了我的url。它显示了相同的401授权错误 问题1:Android平台截取库中出现此类错误的原因是什么? 问题2:如何解决,以便在Android平台上执行截击请求。 参考代码:401在android中使用Volley库时发生授权错误,android,networking,android-volley,settings,http-status-code-401,Android,Networking,Android Volley,Settings,Http Status Code 401,我使用Volley库是为了将我的设置活动与Android Studio上的服务器集成。我正在执行一个请求GET method,以便从服务器检索值。但是当我尝试做同样的事情时,我得到了一个凌空的错误,说明401错误 我也在POSTMAN应用程序上测试了我的url。它显示了相同的401授权错误 问题1:Android平台截取库中出现此类错误的原因是什么? 问题2:如何解决,以便在Android平台上执行截击请求。 参考代码: @Override protected void onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupActionBar();
sharedPreferences = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
final String userid=sharedPreferences.getString(getString(R.string.saved_user_id),"");
Toast.makeText(this, userid, Toast.LENGTH_LONG).show();
//final String userid=NetworkHelper.get().getUserIdFromSharedPreferences();
//sharedPreferences=getSharedPreferences(getString(R.string.preference_file_key),MODE_PRIVATE);
//SharedPreferences.Editor editor=sharedPreferences.edit();
//editor.clear().apply();
//String userid=sharedPreferences.getString(getString(R.string.saved_user_id),"");
requestQueue= Volley.newRequestQueue(this);
String urlset=getString(R.string.url_server_base)+getString(R.string.url_users)+userid;
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, urlset, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try {
//JSONArray jsonArray=jsonObject.getJSONArray("settings");
// for (int i=0; i<jsonArray.length();i++)
//{
JSONObject settings=jsonObject.getJSONObject("settings");
//retrieving values from the server
int eventnotifmins=settings.getInt("eventNotificationMins");
int alldaynotiftype=settings.getInt("allDayNotificationType");
int alldaynotiftimehr=settings.getInt("allDayNotificationTimeHr");
int alldaynotiftimemin=settings.getInt("allDayNotificationTimeMin");
// Feeding the values of preferences from server in Shared preferences
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
SharedPreferences.Editor editor1=sharedPreferences.edit();
editor1.putString("list_preference_1",Integer.toString(eventnotifmins));
editor1.putString("list_preference_2",Integer.toString(alldaynotiftype));
editor1.putString("list_preference_3",Integer.toString(alldaynotiftimehr));
editor1.apply();
//sBindPreferenceSummaryToValueListener
// this.bindPreferenceSummaryToValue();
//}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volleyError.printStackTrace();
Toast.makeText(SettingsActivity.this, "Check your internet connection", Toast.LENGTH_SHORT).show();
}
});
requestQueue.add(jsonObjectRequest);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setupActionBar();
SharedReferences=GetSharedReferences(getString(R.string.preference\u file\u key)、Context.MODE\u PRIVATE);
最终字符串userid=SharedReferences.getString(getString(R.String.saved_user_id),“”);
Toast.makeText(this,userid,Toast.LENGTH_LONG).show();
//最后一个字符串userid=NetworkHelper.get().getUserIDFromSharedReferences();
//SharedReferences=GetSharedReferences(getString(R.string.preference\u file\u key),模式\u PRIVATE);
//SharedReferences.Editor=SharedReferences.edit();
//editor.clear().apply();
//String userid=SharedReferences.getString(getString(R.String.saved_user_id),“”);
requestQueue=Volley.newRequestQueue(this);
String urlset=getString(R.String.url\u server\u base)+getString(R.String.url\u users)+userid;
JsonObjectRequest JsonObjectRequest=新JsonObjectRequest(Request.Method.GET,urlset,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject JSONObject){
试一试{
//JSONArray JSONArray=jsonObject.getJSONArray(“设置”);
//对于(int i=0;i您可以通过标题覆盖getHeader()
方法添加标题,如下所示:
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, urlset, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try {
JSONObject settings=jsonObject.getJSONObject("settings");
int eventnotifmins=settings.getInt("eventNotificationMins");
int alldaynotiftype=settings.getInt("allDayNotificationType");
int alldaynotiftimehr=settings.getInt("allDayNotificationTimeHr");
int alldaynotiftimemin=settings.getInt("allDayNotificationTimeMin");
// Feeding the values of preferences from server in Shared preferences
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
SharedPreferences.Editor editor1=sharedPreferences.edit();
editor1.putString("list_preference_1",Integer.toString(eventnotifmins));
editor1.putString("list_preference_2",Integer.toString(alldaynotiftype));
editor1.putString("list_preference_3",Integer.toString(alldaynotiftimehr));
editor1.apply();
//sBindPreferenceSummaryToValueListener
// this.bindPreferenceSummaryToValue();
//}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
volleyError.printStackTrace();
Toast.makeText(SettingsActivity.this, "Check your internet connection", Toast.LENGTH_SHORT).show();
}
},
{
// This is for Authorization Headers you can add content type as per your needs
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "AWS" + " " + AWSAccessKeyId + ":" + Signature);
return params;
});
JsonObjectRequest-JsonObjectRequest=new-JsonObjectRequest(Request.Method.GET,urlset,null,new-Response.Listener()){
@凌驾
公共void onResponse(JSONObject JSONObject){
试一试{
JSONObject settings=JSONObject.getJSONObject(“设置”);
int eventnotifmins=settings.getInt(“eventNotificationMins”);
int alldaynotiftype=settings.getInt(“allDayNotificationType”);
int alldaynotiftimehr=settings.getInt(“allDayNotificationTimeHr”);
int alldaynotiftimemin=settings.getInt(“allDayNotificationTimeMin”);
//从共享首选项中的服务器提供首选项的值
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(设置Activity.this);
SharedReferences.Editor editor1=SharedReferences.edit();
editor1.putString(“list_preference_1”,Integer.toString(eventnotifmins));
editor1.putString(“list_preference_2”,Integer.toString(alldaynotiftype));
editor1.putString(“list_preference_3”,Integer.toString(alldaynotiftimehr));
editor1.apply();
//sBindPreferenceSummaryToValueListener
//this.bindPreferenceSummaryToValue();
//}
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
截击错误。printStackTrace();
Toast.makeText(SettingsActivity.this,“检查您的互联网连接”,Toast.LENGTH_SHORT.show();
}
},
{
//这是授权标题,您可以根据需要添加内容类型
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“授权”、“AWS”+“”+AWSAccessKeyId+”:“+签名);
返回参数;
});
这里是AWSAccessKeyId和签名,您可以从AWS服务器获得。
有关认证AWS
服务的更多详细信息,请访问此链接
我希望它对你有用。你使用wampserver吗?不,它是一个合适的服务器。它基本上是来自亚马逊的aws服务。@Faizmir发布你的代码你尝试了什么?你必须传递头令牌进行授权,请参考此答案@VibhorGupta跟随评论中提到的链接deepak。使用你的身份验证令牌。你的代码很好,只需添加基本身份验证。@VibhorGupta试试itOk,我会试试这个。会让你知道它是否有效。谢谢你帮我。@Saurabhandari