Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android CookieManager在第一次和第二次请求后不发送cookie_Android_Cookies_Server_Android Volley_Cookiemanager - Fatal编程技术网

Android CookieManager在第一次和第二次请求后不发送cookie

Android CookieManager在第一次和第二次请求后不发送cookie,android,cookies,server,android-volley,cookiemanager,Android,Cookies,Server,Android Volley,Cookiemanager,目前正在使用CookieManager开发Android应用程序 我尝试使用for循环来执行PUT请求,但由于一些奇怪的原因,只有前两个请求成功。我向服务器人员寻求帮助,他表示其他PUT请求失败是因为它们没有附加cookie 这是我正在使用的for循环 for(int i = 0; i < userList.size(); i++) { User user = userList.get(i); String url = apiURL; S

目前正在使用CookieManager开发Android应用程序

我尝试使用for循环来执行PUT请求,但由于一些奇怪的原因,只有前两个请求成功。我向服务器人员寻求帮助,他表示其他PUT请求失败是因为它们没有附加cookie

这是我正在使用的for循环

for(int i = 0; i < userList.size(); i++) {

        User user = userList.get(i);

        String url = apiURL;
        String address = user.getEmail() == null ? "nil":user.getEmail();

        String jsonString = "{build:\"" + String.valueOf(BuildConfig.VERSION_CODE) + "\",device_id:\"" + ((MainActivity)activity).tmDevice + "\",platform:\"android\",\n" +
                "                     type:\"User\",\n" +
                "                       id:\"" + String.valueOf(user.getId()) + "\",\n" +
                "               first_name:\"" + user.getFirstName() + "\",\n" +
                "                last_name:\"" + user.getLastName() + "\",\n" +
                "                     name:\"" + user.getName() + "\",\n" +
                "                    image:{\n" +
                "                type:\"UserPhoto\",\n" +
                "                  id:\"1a035500-012f-1cc2-9d22-96a73beda35e\"\n" +
                "            },\n" +
                "                   emails:[\n" +
                "                 {\n" +
                "                       type:\"Email\",\n" +
                "                    address:" + address + "\n" +
                "                }\n" +
                "            ],\n" +
                "            phone_numbers:[]\n" +
                "        }";

        JSONObject js = null;
        try {
            js = new JSONObject(jsonString);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        final JSONObject finalJs = js;
        JsonObjectRequest jsObjRequest = new JsonObjectRequest(
                Request.Method.PUT,url, finalJs,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.i("putresponse", String.valueOf(response));
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i("puterror", String.valueOf(error));
            }

        });
        VolleySingleton.getInstance((MainActivity) activity).addToRequestQueue(jsObjRequest);

 }
甚至在PUT请求之前的GET请求也可以正常工作。。
有什么帮助吗?

经过3天的搜索和阅读,了解了CookieManager

我终于找到了一个完美的解决方案:

static CookieManager myCookies = new CookieManager(null, CookiePolicy.ACCEPT_ALL);;

final public static void saveCookies(HttpURLConnection connection , Context context) {
    Map<String, List<String>> headerFields = connection.getHeaderFields();

    List<String> cookiesHeader = null;
    try {
        cookiesHeader = headerFields.get("Set-Cookie");
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (cookiesHeader != null && myCookies != null) {
        for (String cookie : cookiesHeader) {
            try {
                cookie = cookie.replace("\"", "");
                myCookies.getCookieStore().add(connection.getURL().toURI(), HttpCookie.parse(cookie).get(0));
                String new_cookie = TextUtils.join(";", myCookies.getCookieStore().getCookies());

                PreferenceManager.getDefaultSharedPreferences(context).edit().putString("cookie", new_cookie).commit();

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

final public static void loadCookies(HttpURLConnection connection , Context context) {
    if (myCookies != null && myCookies.getCookieStore().getCookies().size() > 0) {
        connection.setRequestProperty("Cookie", TextUtils.join(";", myCookies.getCookieStore().getCookies()));
    }
    else {
        String new_cookie = PreferenceManager.getDefaultSharedPreferences(context).getString("cookie" , "");
        connection.setRequestProperty("Cookie", new_cookie );
    }
}
static CookieManager mycokies=new CookieManager(null,CookiePolicy.ACCEPT_ALL);;
最终公共静态void saveCookies(HttpURLConnection连接,上下文){
Map headerFields=connection.getHeaderFields();
List cookiesHeader=null;
试一试{
cookiesHeader=headerFields.get(“设置Cookie”);
}捕获(例外e){
e、 printStackTrace();
}
if(cookiesHeader!=null&&myCookies!=null){
for(字符串cookie:cookiesHeader){
试一试{
cookie=cookie.replace(“\”,”);
mycokies.getCookieStore().add(connection.getURL().toURI(),HttpCookie.parse(cookie.get(0));
字符串new_cookie=TextUtils.join(“;”,mycokies.getCookieStore().getCookies());
PreferenceManager.getDefaultSharedReferences(context).edit().putString(“cookie”,new_cookie).commit();
}捕获(例外情况除外){
例如printStackTrace();
}
}
}
}
最终公共静态void loadCookies(HttpURLConnection连接,上下文){
if(myCookies!=null&&myCookies.getCookieStore().getCookies().size()>0){
connection.setRequestProperty(“Cookie”,TextUtils.join(“;”,mycokies.getCookieStore().getCookies());
}
否则{
String new_cookie=PreferenceManager.GetDefaultSharedReferences(context.getString(“cookie”),“”);
setRequestProperty(“Cookie”,新的_Cookie);
}
}

经过3天的搜索和阅读,了解了CookieManager

我终于找到了一个完美的解决方案:

static CookieManager myCookies = new CookieManager(null, CookiePolicy.ACCEPT_ALL);;

final public static void saveCookies(HttpURLConnection connection , Context context) {
    Map<String, List<String>> headerFields = connection.getHeaderFields();

    List<String> cookiesHeader = null;
    try {
        cookiesHeader = headerFields.get("Set-Cookie");
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (cookiesHeader != null && myCookies != null) {
        for (String cookie : cookiesHeader) {
            try {
                cookie = cookie.replace("\"", "");
                myCookies.getCookieStore().add(connection.getURL().toURI(), HttpCookie.parse(cookie).get(0));
                String new_cookie = TextUtils.join(";", myCookies.getCookieStore().getCookies());

                PreferenceManager.getDefaultSharedPreferences(context).edit().putString("cookie", new_cookie).commit();

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

final public static void loadCookies(HttpURLConnection connection , Context context) {
    if (myCookies != null && myCookies.getCookieStore().getCookies().size() > 0) {
        connection.setRequestProperty("Cookie", TextUtils.join(";", myCookies.getCookieStore().getCookies()));
    }
    else {
        String new_cookie = PreferenceManager.getDefaultSharedPreferences(context).getString("cookie" , "");
        connection.setRequestProperty("Cookie", new_cookie );
    }
}
static CookieManager mycokies=new CookieManager(null,CookiePolicy.ACCEPT_ALL);;
最终公共静态void saveCookies(HttpURLConnection连接,上下文){
Map headerFields=connection.getHeaderFields();
List cookiesHeader=null;
试一试{
cookiesHeader=headerFields.get(“设置Cookie”);
}捕获(例外e){
e、 printStackTrace();
}
if(cookiesHeader!=null&&myCookies!=null){
for(字符串cookie:cookiesHeader){
试一试{
cookie=cookie.replace(“\”,”);
mycokies.getCookieStore().add(connection.getURL().toURI(),HttpCookie.parse(cookie.get(0));
字符串new_cookie=TextUtils.join(“;”,mycokies.getCookieStore().getCookies());
PreferenceManager.getDefaultSharedReferences(context).edit().putString(“cookie”,new_cookie).commit();
}捕获(例外情况除外){
例如printStackTrace();
}
}
}
}
最终公共静态void loadCookies(HttpURLConnection连接,上下文){
if(myCookies!=null&&myCookies.getCookieStore().getCookies().size()>0){
connection.setRequestProperty(“Cookie”,TextUtils.join(“;”,mycokies.getCookieStore().getCookies());
}
否则{
String new_cookie=PreferenceManager.GetDefaultSharedReferences(context.getString(“cookie”),“”);
setRequestProperty(“Cookie”,新的_Cookie);
}
}