我正在尝试从SharedPreferences获取我的sql服务器信息但是似乎无法让它在我的connectioclass中运行如果我在een扩展类中也会这样做它会工作但是对于这段代码我不想要扩展类:< / p>
我使用Normaly:
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences sharedPreferences =
所以我尝试了:
Context context = this;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
和
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
但没有工作
这是我的代码:
public class ConnectionClass{
PreferenceManager.getDefaultSharedPreferences(this);
String servername = sharedPreferences.getString("SQLSERVER", "");
String databasenaam = sharedPreferences.getString("SQLDATABASE", "");
String serverusernaam = sharedPreferences.getString("SQLUSERNAAM", "");
String serverpassword = sharedPreferences.getString("SQLPASSWORD", "");
String ip = servername;
String classs = "net.sourceforge.jtds.jdbc.Driver";
String db = databasenaam ;
String un = serverusernaam;
String password = serverpassword ;
@SuppressLint("NewApi")
public Connection CONN() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
Connection conn = null;
String ConnURL = null;
try {
Class.forName(classs);
ConnURL = "jdbc:jtds:sqlserver://" + ip + ";"
+ "databaseName=" + db + ";user=" + un + ";password="
+ password + ";";
conn = DriverManager.getConnection(ConnURL);
} catch (SQLException se) {
Log.e("ERRO", se.getMessage());
} catch (ClassNotFoundException e) {
Log.e("ERRO", e.getMessage());
} catch (Exception e) {
Log.e("ERRO", e.getMessage());
}
return conn;
}
}
答案 0 :(得分:0)
由于getDefaultSharedPreferencesName()
需要Context
作为参数,因此大多数未扩展Context
或Activity
(包括子类)的类在传递this
时都不合时宜论点。现在很清楚为什么会发生这种情况,并且知道你知道什么是合适的替换:Context
或子类。在您的情况下,我尝试拨打getApplicationContext()
答案 1 :(得分:0)
您的问题出现是因为您的类是自定义的,并且不会扩展Context
类。方法getDefaultSharedPreferences
将Context
对象作为参数。
你可以这样做:
创建ConnectionClass
对象的那一刻将您正在调用的Activity
的上下文传递给构造函数。
ConnectionClass c = new ConnectionClass(this); // this is instance of calling Activity
然后从构造函数内的SharedPreferences初始化您选择的字段。
public ConnectionClass(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
servername = sharedPreferences.getString("SQLSERVER", "");
// ... and so on
}