2014-05-20 3 views
0

Android 클라이언트에 문제가 있습니다. nuxeo 컨텍스트에는 컨텍스트와 AndroidHttpClient가 포함되어 있습니다.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 커넥터를 라이브러리로 통합 했으므로 조각 만 사용하고 활동은 사용하지 않습니다.

+0

나는 혼란 스럽다. 그것을 닫으려고하지만 나중에 나중에 열어두기를 원하십니까? –

+0

예, 모든 활동에서 필요합니다.하지만 앱을 닫지 않으면 작동하지 않습니다. – Pico

답변

0

무엇을 의미합니까? 나는 그것을 닫지 않는 경우

셧다운 nuxeoClient (org.nuxeo.ecm.automation.client.android.AndroidAutomationClient.shutdown()) 및 그 AndroidHttpClient을 닫습니다 나의 응용 프로그램은

당신은 org.nuxeo.android.context.NuxeoContext.shutdown()를 호출 할 수 있습니다 작동하지 않습니다 ...하지만 당신은해야한다 그 Nuxeo 활동을 상속하지 않는 경우에만 onDestroy() 활동 방법.
NuxeoContext는 AndroidAutomationClient와 해당 세션을 관리합니다. 그런 세부 사항을 내려가는 것은 여전히 ​​가능하지만 오류가 발생하기 쉽습니다.

코드 스 니펫에 가져 오기를 추가 할 수 있습니까? Connection.getSession()은 무엇입니까?

Nuxeo Android 커넥터를 응용 프로그램과 어떻게 통합 했습니까 : 구성 또는 상속? Nuxeo 활동 또는 단편 또는 사용자 정의 구현을 사용합니까?

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을 사용하여 문제를 해결하고 너무 자주 종료하지 않아도됩니다.

+0

Nuxeo를 쿼리하기 위해 nuxeoContext가 필요합니다. 그러나 명백한 이유없이 종료됩니다. – Pico

+0

물론 NuxeoContext가 필요합니다. 제안 된 솔루션을 사용해 보셨습니까? 나는 당신의 Connection 클래스에 대해 확신하지 못한다 : 유용한가? Nuxeo 커넥터의 일부를 원하거나 관리해야하는 경우 https://github.com/artmoni/gardening-manager-android/blob/master/gardening-manager-android/src/에서 살펴볼 수 있습니다. org/gots/nuxeo/NuxeoManager.java. –

+0

"스스로 셧다운합니다"라고 말할 때 이해가되지 않습니다. 귀하의 필요와 문제점은 무엇입니까? 먼저 응용 프로그램을 종료하는 방법을 요청했으나 (응용 프로그램 종료 또는 몇 가지 국경의 경우는 제외), 원하지 않는 시스템 종료에 대해 불만을 토로했습니다 (NuxeoContext와 세션을 조작하는 방식 근본 원인이 될 수 있음). –

관련 문제