当我尝试在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()行上失败(即我在该行之前和之后记录一条消息,它打印的是之前的消息但不是之后的消息)
有人遇到过这个问题吗?
答案 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()
正在返回一个有效值,因为它似乎是最可能的罪魁祸首。