Как получить доступ к значениям hashmap из другого класса? - PullRequest
2 голосов
/ 04 января 2012

Я хотел бы получить доступ к набору значений hashmap, созданных в главном классе из другого класса. Я выполнил шаги для этого, но в подклассе я получаю только нулевое значение. Вот код

public class SoapTester extends Activity {  
private static final String TAG = "Test";  
public HashMap<String, String> map = new HashMap<String, String>();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    map.put("year", "Apple");
    map.put("make", "Mango");
    map.put("model", "Grape");
    map.put("style", "Orange");
    map.put("series", "Peach");
}

public HashMap<String, String> getHashmap() {
    Log.v(TAG, "map2: E" + map);
    return map;
}

public void setHashmap(HashMap<String, String> map) {
    this.map = map;
    getHashmap();
    Log.v(TAG, "map1: E" + map);
}
}

// Подкласс

public class Tradein extends Activity {
private static final String TAG = "Test";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tradein);
    SoapTester ex = new SoapTester();
    HashMap<String, String> hm = ex.getHashmap();
    Log.v(TAG, "hm: " + hm);//Getting Null Value here
}
}

Я что-то пропустил?

Ответы [ 5 ]

8 голосов
/ 04 января 2012

делает HashMap статическим

public static HashMap<String, String> map = new HashMap<String, String>(); 

Таким образом, мы можем изменять значения в любом действии по желанию, независимо от точного потока управления между различными действиями.

Обратите внимание, что этоТрюк можно использовать только в том случае, если вы не заботитесь о создании в приложении более одной копии одного и того же действия (класса), это проще всего реализовать

Шаг 2: Android;Реализация глобального состояния;обмениваться данными между действиями и через ваше приложение

1 голос
/ 04 января 2012

используйте this.getHashmap () вместо ex.getHashmap ()

public class Tradein extends Activity {
private static final String TAG = "Test";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tradein);
    //SoapTester ex = new SoapTester();
    HashMap<String, String> hm = this.getHashmap();
    Log.v(TAG, "hm: " + hm);//Getting Null Value here
}
}
1 голос
/ 04 января 2012

Не ответ, просто попытка.

Я ничего не знаю о реализации andriod. Но вот моя попытка.

SoapTester ex = new SoapTester();
ex.onCreate(savedInstanceState);
HashMap<String, String> hm = ex.getHashmap();
Log.v(TAG, "hm: " + hm);
0 голосов
/ 14 сентября 2016

Очень просто передать Hashmap в качестве аргумента. Вам просто нужно инициализировать его в конструкторе родительского класса.

Детский класс:

HashMap<String, String> map = new HashMap<String, String>();;
    map.put("OS", "Android");
Parent parent= new Parent();
parent.hashtest(map);

Родительский класс:

public class parent{
HashMap<String, String> map;
public Test() {
    map= new HashMap<>();
}

public void hashtest(HashMap<String, String> map){
    this.map=map;
    Log.v("I fount it here", map.get("OS"));
}
}
0 голосов
/ 04 января 2012

Вы можете заполнить карту непосредственно в классе инициализации:

public class SoapTester extends Activity {  
private static final String TAG = "Test";  
public static HashMap<String, String> map = new HashMap<String, String>() {
    {
        put("year", "Apple");
        put("make", "Mango");
        put("model", "Grape");
        put("style", "Orange");
        put("series", "Peach");
    }
};

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // No map initialization here
    }

// etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...