首页 > 解决方案 > 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,并且应用程序继续在后台运行。

请避免语法:)和帮助。卡住了很多天。

标签: androidoauth-2.0

解决方案


推荐阅读