gpt4 book ai didi

java - SharedPreferences - 静态类中的静态字符串?

转载 作者:行者123 更新时间:2023-12-02 09:11:39 29 4
gpt4 key购买 nike

刚接触 Java,很抱歉我的理解不够。我遇到了一个小障碍,我有一个用于连接到服务器的静态类。我正在为 SharedPreferences 使用另一个类,SharedPreferences 的一些详细信息是要连接的服务器地址。

当我在静态 Connection 类中使用 SharedPreferences 类时,我遇到了一个缺陷,无法在静态上下文中使用非静态字段.

还有这方面的事情吗?我可以将值设置为静态吗?或者是否有办法加载这些值并使它们保持静态?

我会从任何活​​动中获取我的SharedPreferences:

String sName = SharedPrefs.getserverName(this);

但无论如何,我在我的静态 Connection 类中引用了这个,我很困惑:

None-Static field XXXXXX cannot be referenced from a static context

(显然,我不能只在前面包含“static”一词,因为它会失败,因为“无法从静态上下文中引用它”。)

SharedPreference 类:

private static SharedPreferences getPrefs(Context context) {
return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}

public static String getserverName(Context context) {
return getPrefs(context).getString("server_name", "");
}

我相信我已经正确使用了静态。

请求的连接类别:

public class ConnectionManager extends AppCompatActivity {
static StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
static String serverName = SharedPrefs.getserverName(Context);
// static String serverName ="192.168.1.105"; //TODO Ensure Database details loaded from Shared Preferences
static String serverPort ="1433";
static String databaseName ="DBANAME";
static String db = String.format("jdbc:jtds:sqlserver://%s:%s/%s", serverName, serverPort, databaseName);
static String un = "sa";
static String pass = "";
static Connection con;


public static Connection getConnection() {

try {
try {
StrictMode.setThreadPolicy(policy);
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection(db, un, pass);
} catch (SQLException ex) {
// log an exception. fro example:
System.out.println("Failed to create the database connection.");
}
} catch (ClassNotFoundException ex) {
// log an exception. for example:
System.out.println("Driver not found.");
}
return con;
}
}

查询 Activity (调用数据库连接类)

        try {

con = ConnectionManager.getConnection();
if (con == null) {
z = "Check Your Internet Access!";
Toast.makeText(StockEnquiry.this, z, Toast.LENGTH_LONG).show();
} else

已更新

在 user1506104 的帮助下我得到了这个工作。我将对 SharedPref 的调用移至 getConnection 内部并包含 Context 上下文。就像这样:

public static Connection getConnection(Context context) {
String serverName = SharedPrefs.getserverName(context);
String serverPort = SharedPrefs.getserverPort(context);
String databaseName = SharedPrefs.getdatabaseName(context);
String sPath = SharedPrefs.getserverPath(context);
String db = String.format("jdbc:jtds:sqlserver://%s:%s/%s", serverName, serverPort, databaseName);
try {
try {
StrictMode.setThreadPolicy(policy);
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection(db, un, pass);
} catch (SQLException ex) {
// log an exception. fro example:
System.out.println("Failed to create the database connection.");
}
} catch (ClassNotFoundException ex) {
// log an exception. for example:
System.out.println("Driver not found.");
}
return con;

}

然后在我的 Activity 中,我只需要将其包含在 getConnection() 中就像这样:

   con = ConnectionManager.getConnection(this);

感谢您的宝贵时间:)

最佳答案

如果您从 Activity 内部调用,则此代码没问题,因为 this 关键字引用您当前的 Activity 实例。

String sName = SharedPrefs.getserverName(this);

确保您拥有对静态 Connection 类中的上下文对象的引用。假设您的上下文对象由 context 变量引用,请执行以下操作:

String sName = SharedPrefs.getserverName(context);

关于java - SharedPreferences - 静态类中的静态字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361155/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com