0

나는 012 휴식 시간 요청을 실행하기 위해 DefaultHttpClient 개체를 사용하는 클래스가 있습니다. 나는 다른 클래스에서 다른 요청을 실행하기 위해 동일한 HttpClient 객체를 사용하려고하고 새로운 클래스에 일련 화 된 객체를 사용하려고합니다. 하지만 실행시에 DefaultHttpClient에 대한 java.io.NotSerializableException을 전달할 때 나는 다음 활동으로로 DefaultHttpClient 객체를 전달할 수 있습니다. 당신이 다른 활동에 그것을 얻을 때 사실한 활동에서 다른 활동으로 HttpClient 개체 전달

09-03 12:51:44.891: E/AndroidRuntime(32297): FATAL EXCEPTION: main 
09-03 12:51:44.891: E/AndroidRuntime(32297): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.hcp.hcpandroid.SSLAuthenticate) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Parcel.writeSerializable(Parcel.java:1279) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Parcel.writeValue(Parcel.java:1233) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Parcel.writeMapInternal(Parcel.java:591) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Bundle.writeToParcel(Bundle.java:1619) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Parcel.writeBundle(Parcel.java:605) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.content.Intent.writeToParcel(Intent.java:6519) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1741) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1411) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.Activity.startActivityForResult(Activity.java:3351) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.Activity.startActivityForResult(Activity.java:3312) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.Activity.startActivity(Activity.java:3522) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.Activity.startActivity(Activity.java:3490) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at com.hcp.hcpandroid.MainLogIn.hcpLogIn(MainLogIn.java:67) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at com.hcp.hcpandroid.MainLogIn$1.onClick(MainLogIn.java:35) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.view.View.performClick(View.java:4128) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.view.View$PerformClick.run(View.java:17142) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Handler.handleCallback(Handler.java:615) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Looper.loop(Looper.java:213) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.app.ActivityThread.main(ActivityThread.java:4787) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.lang.reflect.Method.invoke(Method.java:511) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at dalvik.system.NativeStart.main(Native Method) 
09-03 12:51:44.891: E/AndroidRuntime(32297): Caused by: java.io.NotSerializableException: org.apache.http.impl.client.DefaultHttpClient 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 
09-03 12:51:44.891: E/AndroidRuntime(32297): at android.os.Parcel.writeSerializable(Parcel.java:1274) 
09-03 12:51:44.891: E/AndroidRuntime(32297): ... 24 more 
+0

어쩌면 당신은 HttpClient를위한 싱글 톤 패턴을 고려해야 할 것입니다. 싱글 톤을 사용하면 HttpClient의 인스턴스는 단 한 번만 유지됩니다. – traninho

답변

1

, 당신은 당신에게 DefaultHttpClient를 직렬화 성공하더라도, 당신은 다른 인스턴스를해야합니다.
오히려 두 번째 활동에서 원래 클라이언트로 명령을 보내고 응답을받는 프록시를 제안합니다.
필요한 것은이를 달성하기위한 몇 가지 IPC 메커니즘입니다. 다음을 사용하여 시도 할 수 :

  1. 서비스 당신의 활동은 핸들러로
  2. android.os 메커니즘 (AIDL하는 모습을)하지 않는 경우 활동이 동일한 프로세스
  3. 컨텐트 프로에서 실행하는 경우, 메시지 IPC 통신.

내가 할 수있는 최선의 일은 당신의 HTTP 클라이언트를 저장하는 정적 변수를 사용하는 것입니다 생각 Android's Processes and Threads guide

+0

솔루션에 감사드립니다. 나는 그것으로 볼 것이다 :) – Sajirupee

0

에서 참조하시기 바랍니다.

OkHttp (광장에서) 또는 Ion (Koush Dutta에서)을 살펴 보도록 제안합니다. 어쨌든 실제 문제는 개체가 serializable이 아니며 확실히 이해할 수 없다는 것입니다.

그래서 activies를 통해 전달할 수 없습니다. 가장 좋은 방법은 HTTP 요청을 처리하고 Http 클라이언트가 1 개 (또는 필요한 사용자 수) 만있는 백그라운드에서 서비스를 갖는 것입니다.

관련 문제