0

AysncTaskから拡張されたクラスがあります。メソッド内でdoInBackgroundCookie を更新したいので、次のようにします。

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

しかし、私java.lang.NullPointerExceptionは最初の行に入ります。

したがって、質問は次のとおりです。

  • なぜこれを引き起こしているのでしょうか?
  • 別のアクティビティで作成し、このアクティビティで使用する必要がありますか? どうやって ?なぜ ?

:

  • 私のコンテキストがnullでないことはわかっています。それを確認しました。
  • AsyncTaskでonCreateメソッドを使用できません。これをする。

スタック トレースは次のとおりです。

  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メソッドです:

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();
4

2 に答える 2

1

ApplicationアプリケーションをonCreate()コンテキストとして渡します

于 2014-05-22T21:25:45.027 に答える
0

を使用CookieSyncManagerしたことはありませんが、ドキュメントで確認できることから、既にスレッドを作成しているため、スレッド内で使用しないでください。

別のスレッドは、タイマーによって駆動され、その間に Cookie を保存します。

  • アプリケーションの起動時に呼び出す必要がcreateInstanceあります。通常はonCreate()
  • getInstance().startSync()Activity.onResume()
  • そしてgetInstance().stopSync()_Activity.onPause()

ここに例があります

この助けを願っています。

于 2014-05-22T21:16:03.530 に答える