android,auth,保持HTTP连接,在少数Activity中使用连接

时间:2011-09-28 12:08:12

标签: android http authentication

在我的应用程序中,我尝试访问某些Web服务。我正在通过基于表单的身份验证并获得授权连接。如果我通过了授权,我想要打开新的Activity,但任何新的DefaultHttpClient实例都是未经授权的。

问题是:
1)如何通过活动传递这种联系
2)或者如何保持连接正确,如果我想到httpclient拦截器,我是正确的方式?如果,是的,那么第一个问题仍然存在,但传递CookieStore数据的相对性。

2 个答案:

答案 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());