我在一个班级中使用上下文。如何在另一个类中启动它时引用相同的上下文?
MyHttpClient.java
public class MyHttpClient extends DefaultHttpClient {
final Context contextkey;
public MyHttpClient(Context contextkeystore) {
this.contextkey = contextkeystore;
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
// Register for port 443 our SSLSocketFactory with our keystore
// to the ConnectionManager
registry.register(new Scheme("https", newSslSocketFactory(), 443));
return new SingleClientConnManager(getParams(), registry);
}
private SSLSocketFactory newSslSocketFactory() {
try {
// Get an instance of the Bouncy Castle KeyStore format
KeyStore trusted = KeyStore.getInstance("BKS");
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in = contextkey.getResources().openRawResource(R.raw.mykeystore);
try {
// Initialize the keystore with the provided trusted certificates
// Also provide the password of the keystore
trusted.load(in, "mysecret".toCharArray());
} finally {
in.close();
}
// Pass the keystore to the SSLSocketFactory. The factory is responsible
// for the verification of the server certificate.
SSLSocketFactory sf = new SSLSocketFactory(trusted);
// Hostname verification from certificate
// http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
return sf;
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
在另一个班级使用:
DefaultHttpClient client = new MyHttpClient(getApplicationContext()); ??
这里" getApplicationContext"不会工作并显示错误
答案 0 :(得分:2)
获取应用程序上下文的简单方法如下
package com.example.testactivity;
public class App extends Application {
public static Context context;
public void onCreate() {
super.onCreate();
context=getApplicationContext();
}
public static Context getcontext(){
return context;
}
}
并在清单文件中 在应用程序标记中添加该行
<application
android:name="com.example.testactivity.App"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
现在,您将在应用程序的任何位置使用应用程序的上下文
只需致电
App.getcontext();
Njoy:)
答案 1 :(得分:1)
您需要一个有效的上下文来使用SSL扩展DefaultHttpClient。
调用MyHttpClient构造函数的类似乎没有有效的Context传递给HttpClient。
您应该通过该类将上下文传递到您的客户端:
它是:
public class Main extends Activity
{
private Foo myfoo;
@Override
protected void onCreate(Bundle icicle)
{
myfoo = new Foo(this); //Or myFoo = new Foo(getApplicationContext());
}
}
public class Foo
{
private Context mycontext;
private MyHttpClient myclient;
public Foo(Context ctx)
{
mycontext = ctx;//No need to save the context if you aren't reusing it after this.
myclient = new MyHttpClient(mycontext);
}
}