0

Android クライアントに問題があります。nuxeo コンテキストには Context と AndroidHttpClient が含まれています

可能な限り閉じようとしましたが、方法しかありません。() をシャットダウンすると、後でアプリで nuxeo サーバーに質問することができなくなります

どうすれば閉じることができますか?

スタックプリント

05-20 11:46:06.945: E/AndroidHttpClient(24191): Leak found
05-20 11:46:06.945: E/AndroidHttpClient(24191): java.lang.IllegalStateException: AndroidHttpClient created and never closed
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.net.http.AndroidHttpClient.<init>(AndroidHttpClient.java:158)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.net.http.AndroidHttpClient.newInstance(AndroidHttpClient.java:144)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at org.nuxeo.ecm.automation.client.android.AndroidAutomationClient.<init>(AndroidAutomationClient.java:115>)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at org.nuxeo.android.context.NuxeoContext.getNuxeoClient(NuxeoContext.java:168)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at org.nuxeo.android.context.NuxeoContext.<init>(NuxeoContext.java:110)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at org.nuxeo.android.context.NuxeoContext.<init>(NuxeoContext.java:82)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at com.example.androidnuxeo.MainActivity.onCreate(MainActivity.java:90)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.Activity.performCreate(Activity.java:4562)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.ActivityThread.access$600(ActivityThread.java:128)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.os.Looper.loop(Looper.java:137)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at android.app.ActivityThread.main(ActivityThread.java:4514)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 11:46:06.945: E/AndroidHttpClient(24191): at java.lang.reflect.Method.invoke(Method.java:511)

コード

 NuxeoContext ctx = new NuxeoContext(getBaseApplication());

try {

    Session session = Connection.getSession();

    itemID = ((TwoLineListItem) view).getText2().getText().toString();
    itemTitle =((TwoLineListItem) view).getText1().getText().toString();

    RequeteDetail requete = new RequeteDetail();
    res = requete.execute(itemID,ctx).get();
    type = res.getType();

} catch (Exception e) {
    System.err.println(e);
    e.printStackTrace();
}

NuxeoContext :

public synchronized AndroidAutomationClient getNuxeoClient() {
    while (nuxeoClient != null && shuttingDown) {
        try {
            wait(100);
        } catch (InterruptedException e) {
            // Do nothing
        }
    }
    if (nuxeoClient == null || nuxeoClient.isShutdown()) {
        shuttingDown = false;
       nuxeoClient = new AndroidAutomationClient(
               serverConfig.getAutomationUrl(), androidContext,
                sqlStateManager, blobStore, networkStatus, serverConfig);
        Log.i(TAG, "new Nuxeo client " + nuxeoClient);
        if (Log.isLoggable(TAG, Log.DEBUG)) {
            Log.d(TAG, "Call stack: ", new Exception());
        }
    }
    return nuxeoClient;
}

Connection.getSession :

public class Connection extends AsyncTask<NuxeoContext, Void, Session> {

Context ctx;
static Session session;

protected Session doInBackground(NuxeoContext... params) {

    if(session == null || session.getClient().getBaseUrl() == null) {
        NuxeoContext nctx= params[0];
        session = nctx.getSession();    

        System.err.println("create connexion");
    }
    else {
        System.err.println("connexion already open");
    }

   return session;
}

public static Session getSession() {
    if(session == null || session.getClient() == null) {
        System.err.println("No connexion");
    }
    return session;
}
}

Nuxeo コネクタをライブラリとして統合しました。フラグメントは使用せず、アクティビティのみを使用しました。

4

1 に答える 1

0

どう言う意味ですか?

閉じないとアプリが動かない

これを呼び出しorg.nuxeo.android.context.NuxeoContext.shutdown()て nuxeoClient ( org.nuxeo.ecm.automation.client.android.AndroidAutomationClient.shutdown()) をシャットダウンし、そのAndroidHttpClient... を閉じることができますがonDestroy()、Nuxeo アクティビティから継承していない場合は、アクティビティ メソッドでのみこれを行う必要があります。
NuxeoContext は、AndroidAutomationClient とそのセッションを管理します。このような詳細を調べることは可能ですが、エラーが発生しやすくなります。

コード スニペットにインポートを追加していただけますか? とはConnection.getSession()?

Nuxeo Android コネクタをアプリケーションにどのように統合しましたか?構成または継承? Nuxeo アクティビティ、フラグメント、またはカスタム実装を使用していますか? 答えに応じて、次の 2 つの方法のいずれかを使用する必要があります。

org.nuxeo.android.context.NuxeoContextFactory.getNuxeoContext(Context)
org.nuxeo.android.context.NuxeoContext.get(getApplicationContext())

次に、これらのメソッドは、NuxeoClientまたはを取得するために推奨されSessionます。

org.nuxeo.android.context.NuxeoContext.getNuxeoClient()
org.nuxeo.android.context.NuxeoContext.getSession()
org.nuxeo.ecm.automation.client.android.AndroidAutomationClient.getSession()

私はあなたの問題を理解したと思います: 各アクティビティで新しい NuxeoContext を作成しますか? シングルトンでなければなりません。その場合は、を使用するNuxeoContextFactoryと問題が解決し、頻繁に閉じる必要がなくなります。

于 2014-05-21T10:53:15.583 に答える