2016-01-11 6 views
-1

После получения переменной от другой активности с помощью метода у меня есть проблема с ее использованием для дальнейшего кодирования.Переменная не имеет значения

Я получаю переменную так:

public void setBank(String bank){ 
     selectedBank=bank; 
     System.out.println(bank); 
    } 

с проверкой Println, что я получил и «спасение» его в переменную selectedBank, которую я объявил в начале класса, как этот public String selectedBank="";

Целый код:

public class MyDatabase extends SQLiteAssetHelper { 
    private static final String DB_NAME = "bankomati_db.sqlite"; 
    private static final int DB_VERSION = 1; 
    public String selectedBank=""; 

    public MyDatabase(Context context){ 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    public void setBank(String bank){ 
     selectedBank=bank; 
     System.out.println(bank); 
    } 
//other methods 
    } 

Это не работает, когда я проверяю выбранный банк каким-то другим методом, это juts "".

Как я могу «сохранить» переменную из метода setBank, чтобы я мог использовать ее в других методах.

EDIT: Это мой метод, когда мне нужна моя переменная (selectedBank).

public List<String> getBankomatLocation(){ 


    SQLiteDatabase db = getReadableDatabase(); 

    //String [] sqlSelect={"0 _id", "Banka", "Naslov", "Posta", "Kraj"}; 
    String [] sqlSelect={"0 _id", "Naslov"}; 
    String sqlTables = "Bankomati_db"; 
    System.out.println("selectedBank:" + selectedBank); 
    String [] args ={selectedBank}; 

    List<String> bankomati = new ArrayList<String>(); 

    Cursor c = db.query(false, sqlTables, sqlSelect, "Banka=?", args, null, null, null, null, null); 
    //Cursor c = db.query(false, sqlTables, sqlSelect, null, null, null, null, null, null, null); 

    if (c.moveToFirst()){ 
     do{ 
      bankomati.add(c.getString(1)); 
     }while (c.moveToNext()); 
    } 

    c.close(); 
    db.close(); 

    return bankomati; 

} 

Возможно ли, когда метод getReadableDatabase называется, он также устанавливает переменную в ""?

+0

Убедитесь, что вы используете конкретный объект типа MyDatabase, и вы должны вызвать метод setbank, прежде чем проверять значение выбранного банка другими способами. – SoulRayder

+0

Можете ли вы отправить код, в котором вы действительно используете этот класс? То, что у вас похоже, должно работать, поэтому я предполагаю, что вы используете его неправильно (или есть конфликт). – James

+0

Вы должны убедиться, что (a) вы смотрите на один и тот же экземпляр, (b) он не был воссоздан самим Android на основе событий жизненного цикла приложения и т. Д. –

ответ

-2

Вы должны убедиться, что используете this. чтобы убедиться, что значение, которое вы измените, останется в классе. Позже сделайте запрос на значение позже после вызова метода setBank(). Я позволил попробовать ваш код без класса реализации, и это сработало с моей стороны.

В этом коде, который я пытаюсь, я добавил метод конструктора public MyDatabase(String selectedBank), чтобы проверить его в основной функции. Вот код, который я пытаюсь сделать.

public class MyDatabase { 
    private static final String DB_NAME = "bankomati_db.sqlite"; 
    private static final int DB_VERSION = 1; 
    public String selectedBank = ""; 

    public MyDatabase(String selectedBank){ 
     //this.selectedBank = selectedBank; 

    } 

    public void setBank(String bank){ 
     this.selectedBank = bank; 
     System.out.println(bank); 
    } 
    //other methods 

    //This is to test the values of the variable 'selectedBank'  
    public static void main(String[] args){ 
     //Create new object MyDatabase to test the value of the "selectedBank" 
     MyDatabase d = new MyDatabase(""); 

     //print the name of the bank in the method 
     d.setBank("My Bank"); 

     //I can access the name of the bank after calling the method 
     System.out.println(d.selectedBank); 
    } 
} 
+0

Не беспокойтесь о конструкторе. Я поставил его, чтобы проверить код и увидеть результат. самое главное - изменить это. выбранный банк = банк; – danielbakyono

+1

'Вы должны убедиться, что используете« это ». ключевое слово, чтобы убедиться, что значение, которое вы измените, останется в классе. 'nonsense – njzk2

+0

Вам не нужно использовать ключевое слово' this' для доступа к переменным класса, вам нужно сделать это только тогда, когда вы хотите установить переменную класса к локальной переменной с тем же именем. Это (на мой взгляд) лучшая практика всегда использовать 'this', хотя –

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