Сохранение текста кнопки в JSON

421
17 мая 2017, 06:21

Есть несколько однотипных кнопок Button в приложении, изначально они прописывались обычным способом:

Button exec1Set1 = (Button) findViewById(R.id.exec1Set1);
exec1Set1.setOnClickListener(onClickListener);

Внутри обработчика события onClickListener текст с данных кнопок сохраняется в виде JSON для последующего сохранения в БД:

JSONObject ex1 = new JSONObject();
try {
    ex1.put("set1",exec1Set1.getText().toString());
    ex1.put("set2",exec1Set2.getText().toString());
}

Для оптимизации решил создавать кнопки динамически как в одном из примеров на SO - пример на GitHub. Теперь никак не пойму как мне для этих кнопок также упаковывать текст в JSON. Пробовал делать через цикл:

int i = (int) v.getTag();
while( i < 3 ){ 
    ex1.put( "set" + i,((Button) v).getText().toString() );                    
    i++;
}

но он получается не срабатывает вообще - значения в JSON ( в данном случае с предполагаемыми именами "set0", "set1" и "set2") не добавляются.

UPD:

Кнопки создаются следующим образом:

private List<Button> buttons;
private static final int[] BUTTON_IDS = {
        R.id.exec1Set1,
        R.id.exec1Set2,
        R.id.exec1Set3,
        R.id.exec2Set1,
        R.id.exec2Set2,
        R.id.exec2Set3,
        R.id.exec3Set1,
        R.id.exec3Set2,
        R.id.exec3Set3,
        R.id.btnSave
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_board_view);
    buttons = new ArrayList<Button>(BUTTON_IDS.length);
    int position = 0;
    for (int id: BUTTON_IDS) {
        Button button = (Button) rootView.findViewById(id);
        button.setOnClickListener(onClickListener);
        button.setTag(position++);
        buttons.add(button);
    }
}

Обработчик события click:

@Override
    public void onClick(View v) { 
        JSONObject ex1 = new JSONObject();
        try {
            int i = (int) v.getTag();
            while( i < 3 ){ 
                ex1.put( "set" + i,((Button) v).getText().toString() );                    
                i++;
            }
        }
        switch ((int) v.getTag()) {
            case 0:
                // действия
                break;
            case 1:
                // действия
                break;
            // ...
        }

В чем моя ошибка?

READ ALSO
Создание экземпляра класса Graphics в java

Создание экземпляра класса Graphics в java

Изучаю рисование в javaВезде в примерах показывают рисование на основной панели окна

427
Android POST запрос iii

Android POST запрос iii

Всем привет, нужна помощь с POST запросамиВообщем, есть голосовой ассистент "Дуся"

380
NullPointerException: Attempt to invoke interface method &#39;int java.util.List.size()&#39; on a null object reference

NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

Построил приложение для запроса и парсинга JSON, но не могу найти, где допустил ошибкуТо ли в адаптере, то ли еще где-то

852
Для чего нужен Timer? Если есть Handler и Executor?

Для чего нужен Timer? Если есть Handler и Executor?

Для чего нужен Timer? Если есть Handler и Executor?

369