Cookie管理器导致致命信号11

时间:2013-04-19 15:14:41

标签: java android cookiemanager

当我尝试在cookiemanager上设置cookie时,我的应用程序无声地崩溃(没有强制关闭弹出窗口)。

mHttpClient.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
HttpGet http_get = new HttpGet(url); 
HttpResponse response = mHttpClient.execute(http_get);

for(Cookie cookie : mHttpClient.getCookieStore().getCookies()) {

    Log.d(AppPreferences.TESTTAG,"cookie =  " + cookie.getName());
    if(cookie.getName().equals("SACSID") || cookie.getName().equals("ACSID"))
    {
        response.getEntity().consumeContent();
        String cookieString = cookie.getName() + "=" + cookie.getValue() + "; domain=" + cookie.getDomain();  
        CookieManager.getInstance().setCookie(cookie.getDomain(), cookieString); //**crashes here**
        return true;
    }                   
}

这是我从logcat获得的所有内容

04-19 22:51:35.277: W/dalvikvm(16704): Invalid indirect reference 0x414bb040 in decodeIndirectRef
04-19 22:51:35.277: E/dalvikvm(16704): VM aborting
04-19 22:51:35.281: A/libc(16704): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 16754 (AsyncTask #1)

这是生成的逻辑删除日志:http://textuploader.com/?p=6&id=gPpJ

它在CookieManager setCookie()行上失败(即我在该行之前和之后记录一条消息,它打印的是之前的消息但不是之后的消息)

有人遇到过这个问题吗?

3 个答案:

答案 0 :(得分:26)

在调用CookieManager之前添加CookieSyncManager.createInstance(context);

答案 1 :(得分:2)

尝试在onCreate()方法中创建WebView并将其销毁。 WebView在ContentManager和WebKit之间创建了一些“桥梁”。 有点像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_layout);
    WebView web = new WebView(this);
    web.destroy();
}

答案 2 :(得分:0)

如果您完全确定此崩溃是由上面的代码触发的,则表示存在固件错误。 Android SDK应用程序无法触发SIGSEGV。

如果在Nexus设备,模拟器或多个设备上发生这种情况,则可能是Android错误。在http://b.android.com上提交一个问题(如果似乎没有问题),请指出此问题,并可能附加该逻辑删除日志。

如果仅在某些特定设置(例如,一个设备,一个ROM mod)而不是其他设置中发生这种情况,则可能是该环境所特有的,在这种情况下,您应该尝试从设备或ROM模型制造商那里获得帮助

除此之外,请确保cookie.getDomain()正在返回一个有效值,因为它似乎是最可能的罪魁祸首。