android - 404 oAuth 令牌 API
问题描述
Ghost错误,请在标记为重复之前阅读。我面临着非常奇怪的问题,
我有互联网连接接收器
private void connectionChange(Context foContext, Intent foIntent) {
boolean lbIsNetworkAvaibale = false;
ConnectivityManager cm = (ConnectivityManager) foContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo currentNetworkInfo = cm.getActiveNetworkInfo();
if (currentNetworkInfo != null)
if (currentNetworkInfo.isAvailable())
lbIsNetworkAvaibale = currentNetworkInfo.isConnected();
Log.i(TAG, "Network Available is: " + lbIsNetworkAvaibale);
if (!lbIsNetworkAvaibale) {
NetworkInfo otherNetworkInfo = (NetworkInfo) foIntent
.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
if (otherNetworkInfo != null)
if (otherNetworkInfo.isAvailable())
lbIsNetworkAvaibale = otherNetworkInfo.isConnected();
}
Log.i(TAG, "Network Available New is: " + lbIsNetworkAvaibale);
if (lbIsNetworkAvaibale) {
// Calling the method and from that method call token api using volley will give you code below.
} else {
// stop all service and alarms
}
}
排球码
public static int callVolleyPostRequest(final boolean fbIsRefreshToken, final Context foContext, final RefreshTokenResponses loRefreshTokenResponses) {
String lsRequestURL = "http://my.domain/auth/token";
final SharedPreferenceManager loSharedPreferenceManager = new SharedPreferenceManager(foContext);
StringRequest jsonObjReq = new StringRequest(com.android.volley.Request.Method.POST, lsRequestURL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i(TAG, "Volley Response : " + response);
if (!TextUtils.isEmpty(response)) {
try {
JSONObject loJsonResponse = new JSONObject(response);
if ((loJsonResponse.length() <= 0)) {
loRefreshTokenResponses.onResponse(400);
return;
} else {
//storing token in preference
loRefreshTokenResponses.onResponse(200);
}
} catch (Exception e) {
Log.logException(TAG, e);
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error == null || error.networkResponse == null) {
Log.i(TAG, "Volley Error null");
return;
}
String body = "";
//get status code here
int liStatusCode = error.networkResponse.statusCode;
loRefreshTokenResponses.onResponse(liStatusCode);
//get response body and parse with appropriate encoding
try {
body = new String(error.networkResponse.data, "UTF-8");
} catch (UnsupportedEncodingException e) {
// exception
}
Log.i(TAG, "Error: " + error.getMessage());
Log.i(TAG, "Error body : " + body);
Log.i(TAG, "Volley Error code : " + liStatusCode);
}
}) {
@Override
public String getUrl() {
String lsUrl = super.getUrl();
Log.i(TAG, "Volley token request URL : " + lsUrl);
return lsUrl;
}
@Override
public byte[] getBody() {
try {
Log.i(TAG, "fbIsRefreshToken : " + fbIsRefreshToken);
HashMap<String, String> loStringRequest = new HashMap<String, String>();
try {
if (!fbIsRefreshToken) {
loStringRequest.put(Constants.TOKEN.USERNAME.toString(), TextUtils.isEmpty(loSharedPreferenceManager.getUserName()) ? "" : loSharedPreferenceManager.getUserName());
loStringRequest.put(Constants.TOKEN.PASSWORD.toString(), TextUtils.isEmpty(loSharedPreferenceManager.getPassword()) ? "" : loSharedPreferenceManager.getPassword());
loStringRequest.put(Constants.TOKEN.GRANT_TYPE.toString(), Constants.TOKEN.PASSWORD.toString());
int liLoginType = loSharedPreferenceManager.getLoginType() == 0 ? 1 : loSharedPreferenceManager.getLoginType();
loStringRequest.put(Constants.TOKEN.LOGINTYPE.toString(), "" + liLoginType);
} else {
loStringRequest.put(Constants.TOKEN.REFRESH_TOKEN.toString(), TextUtils.isEmpty(loSharedPreferenceManager.getRefreshToken()) ? "" : loSharedPreferenceManager.getRefreshToken());
loStringRequest.put(Constants.TOKEN.GRANT_TYPE.toString(), Constants.TOKEN.REFRESH_TOKEN.toString());
}
} catch (Exception e) {
Log.logException(TAG, e);
Log.i(TAG, "Exception getToken ");
}
Log.i(TAG, "Volley token build param : " + getPostData(loStringRequest));
return getPostData(loStringRequest).getBytes();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
};
// Adding request to request queue
AppGlobal.getInstance().addToRequestQueue(jsonObjReq, "Token");
return 0;
}
错误日志
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/auth/token</code> was not found on this server. <ins>That’s all we know.</ins>
HTML 说
现在奇怪的是,当我测试应用程序所有工作正常(即使我在 2g 网络中测试 100 次连接和断开互联网)后 5 到 10 小时以某种方式互联网连接更改 2 3 次,然后尝试令牌请求开始 404 错误都调用(使用刷新令牌获取访问令牌并使用 unm pass 获取新令牌)。这将继续,当我从设置中强制停止应用程序并再次打开应用程序时,它将开始正常工作:(。
我怀疑问题出在后端,但正如我所说,当我强制重启应用程序时它会工作。并且后端代码运行良好。
仅供参考:-我首先使用了 Asynctask,但遇到了错误,所以用 volley 替换,身份验证机制是 oAuth 2.0,而不是 Google,并且应用程序继续在后台运行。
请避免语法:)和帮助。卡住了很多天。
解决方案
推荐阅读
- sql - 为什么在使用 COUNT 时必须为子查询命名?
- mysql - 存储多媒体帖子时的最佳实践 SQL DB
- haskell - 如何修复 Haskell 中的“非法类型签名”错误
- android - 如何根据用户的角色将用户重定向到android中的不同活动
- tensorflow - TensorFlow 上的 NN 没有训练
- javascript - 无法读取 html 元素数据属性
- javascript - 我可以使用浅渲染访问道具吗?
- javascript - 是否可以使用 Electron Kiosk 禁用 Windows 10 操作中心
- python - OpenCV - 从问卷中检测复选框的手写标记
- matlab - dSPACE MicroAutoBox-PWM 生成