有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android:获取错误“无法解析GetSharedReferences(java.lang.String,int)”

我试图访问非活动类中的SharedReferences,但我总是遇到这个错误cannot resolve getSharedPreferences(java.lang.String, int)。但是当我在正常活动类中使用GetSharedReferences时,我没有得到这个错误

有人知道怎么解决这个问题吗

这是我的密码:

public class ConnectionClass {

SharedPreferences pref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
String ip = pref.getString("serverIP", "");

// String ip = "";
// String ip = server_IP;
String classDriver = "net.sourceforge.jtds.jdbc.Driver";
String db = "passoDB";
String un = "sa";
String password = "dhen1234";

@SuppressLint("NewApi")
public Connection CONN(Context context) {

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    Connection conn = null;
    String ConnURL = null;
    try {
        Class.forName(classDriver);
        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;
}
}

共 (3) 个答案

  1. # 1 楼答案

    你必须把它写进你的方法中

    @SuppressLint("NewApi")
    public Connection CONN(Context context) {
    SharedPreferences pref = context.getSharedPreferences("MyPrefs",Context.MODE_PRIVATE);
    
    }
    

    或者你也可以把它写进Constructor

  2. # 2 楼答案

    你需要在一个Context中,或者有一个包含Context的变量来调用这个方法

    public class ConnectionClass {
        Context context;
        SharedPreferences pref;
        public ConnectionClass(Context context) {
            this.context = context;
            pref = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
        }
    
  3. # 3 楼答案

    是的,正如simon所说,访问共享首选项需要上下文,所以为了使代码正常工作,我将添加这一行

        public class ConnectionClass {
    
    
    String classDriver = "net.sourceforge.jtds.jdbc.Driver";
    String db = "passoDB";
    String un = "sa";
    String password = "dhen1234";
    
    
     String ip = "";
    
    
     public ConnectionClass(Context context){
            SharedPreferences prefs = context.getSharedPreferences("MyPrefs", context.MODE_PRIVATE);
            ip = prefs.getString("serverIP", "");
    
     }
    
    
    @SuppressLint("NewApi")
    public Connection CONN(Context context) {
    
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Connection conn = null;
        String ConnURL = null;
        try {
            Class.forName(classDriver);
            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;
    }
    }
    

    我没有正确地缩进,希望能有所帮助

    在调用类时,您应该这样调用:

    ConnectionClass connectionClass = new ConnectionClass(YourActivity.this);//if in activity
    
    ConnectionClass connectionClass = new ConnectionClass(getActivity());//if in fragment