在我的应用程序中,我尝试访问某些Web服务。我正在通过基于表单的身份验证并获得授权连接。如果我通过了授权,我想要打开新的Activity,但任何新的DefaultHttpClient实例都是未经授权的。
问题是:
1)如何通过活动传递这种联系
2)或者如何保持连接正确,如果我想到httpclient拦截器,我是正确的方式?如果,是的,那么第一个问题仍然存在,但传递CookieStore数据的相对性。
答案 0 :(得分:1)
你应该总是使一个处理你的Http Requests调用的类是 ConnectionManager ,这是最常见的名字。 你应该使用Singleton Design Pattern。这样就可以正确处理您的连接。
public class ConnectionManager {
private static ConnectionManager instance = null;
private DefaultHttpClient client;
private ConnectionManager() {
client = new DefaultHttpClient(...);
}
//public method that will be invoked from other classes.
public static ConnectionManager getInstance() {
if(instance == null) {
instance = new ConnectionManager();
}
return instance;
}
public void authenticate(){
// Do your auth call with the client here
}
public void postStuff(){
// Use the same client here, this way you keep using the same client for ALL of your calls.
}
}
当您需要使用ConnectionManager时,请使用:
private static ConnectionManager conn = ConnectionManager.getInstance();
conn.authenticate();
conn.postStuff();
答案 1 :(得分:0)
Subclass the Application。您需要在清单中列出它以便创建它。您将能够从任何活动中检索它。
public class ClientApplication extends Application {
Session Session = null;
public Session getSession() {
return Session;
}
public void setSession(Session session) {
Session = session;
}
}
别处
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: Start");
super.onCreate(savedInstanceState);
setContentView(R.layout.startresume);
ClientApplication app = ((ClientApplication)getApplication());