从非扩展类中获取SharedPreferences

时间:2016-12-21 16:17:53

标签: android sharedpreferences

我正在尝试从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;
}

}

2 个答案:

答案 0 :(得分:0)

由于getDefaultSharedPreferencesName()需要Context作为参数,因此大多数未扩展ContextActivity(包括子类)的类在传递this时都不合时宜论点。现在很清楚为什么会发生这种情况,并且知道你知道什么是合适的替换:Context或子类。在您的情况下,我尝试拨打getApplicationContext()

答案 1 :(得分:0)

您的问题出现是因为您的类是自定义的,并且不会扩展Context类。方法getDefaultSharedPreferencesContext对象作为参数。

你可以这样做: 创建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
}