http 通信を制御し、http セッションを追跡するクラスがあります。私が直面している問題は、いくつかのアクティビティからこのクラスを使用したいということです。
これまでに見つけた唯一のオプションは、メイン ビューで静的にすることですが、アプリがセカンダリ ビューで長時間座っていると、静的クラスが null になります。パーセル化も試みましたが、CookieStore または httpContext を渡すことができません。これは、ビューに入ったりビューから出たりするたびに、サーバーに対して再認証する必要があり、多くの不要なトラフィックが発生することを意味します。
Parcelable を介してオブジェクトを渡すにはどうすればよいですか、またはすべてのアクティビティが表示できる永続クラスを作成できる別のタイプのクラス拡張がありますか?
public class JSON implements Parcelable {
private String URL;
private String HOSTNAME;
private Context f_context;
private DefaultHttpClient httpClient;
private CookieStore cookieStore;
private HttpContext httpContext;
protected boolean Authenticated = false;
protected long Authenticate_timeout = 0;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
Bundle b = new Bundle();
b.putString("URL",URL);
b.putString("HOSTNAME", HOSTNAME);
b.putBoolean("Authenticated", Authenticated);
b.putLong("Authenticate_timeout", Authenticate_timeout);
out.writeBundle(b);
Object[] o = new Object[4];
o[0] = httpClient;
o[1] = cookieStore;
o[2] = httpContext;
o[3] = f_context;
out.writeArray(o);
}
public static final Parcelable.Creator<JSON> CREATOR = new Parcelable.Creator<JSON>() {
public JSON createFromParcel(Parcel in) {
return new JSON(in);
}
public JSON[] newArray(int size) {
return new JSON[size];
}
};
private JSON(Parcel in) {
Object[] o = in.readArray(null);
httpClient = (DefaultHttpClient) o[0];
cookieStore = (CookieStore) o[1];
httpContext = (HttpContext) o[2];
f_context = (Context) o[3];
Bundle b = in.readBundle();
URL = b.getString("URL");
HOSTNAME = b.getString("HOSTNAME");
Authenticated = b.getBoolean("Authenticated");
Authenticate_timeout = b.getLong("Authenticate_timeout");
}
public JSON(Context context) {
f_context = context;
updateSettings();
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams
.setConnectionTimeout(myParams, Consts.http_timeout);
HttpConnectionParams.setSoTimeout(myParams, Consts.http_timeout);
httpClient = new DefaultHttpClient(myParams);
cookieStore = new BasicCookieStore();
httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}