SharedPreferences-静态类中的静态字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SharedPreferences-静态类中的静态字符串?相关的知识,希望对你有一定的参考价值。
对Java来说是新手,对我的理解很抱歉。我遇到了一个小障碍,我有一个用于连接服务器的静态类。我为SharedPreferences
使用了另一个类,SharedPreferences
的一些详细信息是要连接的服务器地址。
由于我已经开始在静态SharedPreferences
类中使用Connection
类,所以我遇到了一个缺陷,即我无法在静态上下文中使用非静态字段。
反正周围有吗?我可以将值设置为静态吗?还是有载入值并保持静态的值?
我将从任何活动中获取我的SharedPreferences
:
String sName = SharedPrefs.getserverName(this);
但是无论如何,我在笨拙的静态Connection
类中引用了此:
None-Static field XXXXXX cannot be referenced from a static context
(显然,我不能只在前面加上静态这个词,因为它失败了,因为“无法从静态上下文中引用”。]
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;
}
}
查询活动(调用数据库连接类)
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;
}
然后在我的活动中,我只需要将其包含在getConnection()中像这样:
con = ConnectionManager.getConnection(this);
谢谢您的时间:)
如果您从活动内部调用此代码就可以,因为this
关键字引用了您当前的活动实例。
String sName = SharedPrefs.getserverName(this);
请确保您在静态Connection类中具有对上下文对象的引用。假设您的上下文对象被context
变量引用,请执行以下操作:
String sName = SharedPrefs.getserverName(context);
请使用Singleton Design模式。这是一个很好的编程习惯。创建静态类具有上述问题。这是android中单例模式的博客https://medium.com/@programmerr47/singletons-in-android-63ddf972a7e7
以上是关于SharedPreferences-静态类中的静态字符串?的主要内容,如果未能解决你的问题,请参考以下文章