2016-12-21 3 views
-1

Я пытаюсь получить информацию о сервере sql из SharedPreferences, но не могу заставить его работать во мне connectioclass, если бы я сделал то же самое в расширенном классе EEN, это сработает, но для этого кода я не буду нужен расширенный класс:Получить SharedPreferences из не расширенного класса

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; 
} 

} 
+1

вы можете попробовать это http://stackoverflow.com/questions/40894989/sharedpreferences-in-non-activity-class-nullpointerexception/40895108#40895108 –

+1

передать контекст из вызывающей активности –

+0

Или просто извлечь идентификатор пользователя и пароль из SharedPreferences в основной деятельности, а затем передайте их методу «не расширенный класс», который извлекает данные. –

ответ

0

Поскольку getDefaultSharedPreferencesName() потребности Context в качестве аргумента, большинство классов не распространяющие Context ни Activity (вкл. subclasses) не повезло, минуя this в качестве аргумента. Теперь будет ясно, почему это происходит и зная, что вы знаете, что будет подходящей заменой: Context или подклассы. В вашем случае я попытаюсь позвонить getApplicationContext()

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 
} 
+0

@ user2433624, пожалуйста, отметьте ответ и повысьте, если это вам помогло –

Смежные вопросы