首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointerException in CookieSyncManager.createInstance in AsyncTask

NullPointerException in CookieSyncManager.createInstance in AsyncTask
EN

Stack Overflow用户
提问于 2014-05-22 17:00:42
回答 2查看 640关注 0票数 0

我有一个从AysncTask扩展的类。在doInBackground方法中,我想更新cookie,所以我有:

代码语言:javascript
复制
CookieSyncManager.createInstance(context);      // <<<<<<<<<<<<<<<<<<
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(cookie.getDomain(), cookieString); 
CookieSyncManager.getInstance().sync();

但我得到了java.lang.NullPointerException的第一行。

因此,问题是:

  • 为什么会导致这种情况?
  • 我是否需要在另一个活动中创建它,并且只在这个活动中使用它?怎么做?为什么?

Notes

  • 我知道我的上下文不是空的,我检查过了。
  • 我不能在onCreate上使用AsyncTask方法。要做到这一点。

下面是堆栈跟踪

代码语言:javascript
复制
  java.lang.NullPointerException
    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
    at android.webkit.JniUtil.setContext(JniUtil.java:53)
    at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:89)
    at com.t.m.library.HttpRequest.doInBackground(HttpRequest.java:129)
    at com.t.m.library.HttpRequest.doInBackground(HttpRequest.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)

这是我的doInBackground方法:

代码语言:javascript
复制
request = new HttpGet(this.url);
request.addHeader("Accept", "application/json");
request.addHeader("Authorization", this.basicAuthentication);
HttpParams httpParams = new BasicHttpParams();
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
HttpClient httpclient = null;
httpclient = new DefaultHttpClient(httpParams);

HttpResponse response = httpclient.execute(request);


// The content from the requested URL along with headers, etc.
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity, "UTF-8");

CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(cookie.getDomain(), cookieString); 
CookieSyncManager.getInstance().sync();
EN

回答 2

Stack Overflow用户

发布于 2014-05-22 21:25:45

我在ApplicationonCreate()中调用它,将应用程序作为上下文传递。

票数 1
EN

Stack Overflow用户

发布于 2014-05-22 21:16:03

我从未使用过CookieSyncManager,但从文档中可以看出,您不应该在线程中使用它,因为它已经创建了一个线程:

一个单独的线程保存由计时器驱动的cookie。

  • 当应用程序启动时,您应该调用createInstance,通常在onCreate()
  • getInstance().startSync() In Activity.onResume()
  • getInstance().stopSync() in Activity.onPause()

这里你有一个例子

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23813034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档