Чтение массива карты данных

1

В моем Android-проекте я пытаюсь отправить карту данных представленных форм из моего основного класса Activity во второй класс, который расширяет asyncTask.

В моей основной деятельности у меня есть следующий фрагмент кода:

Map<String, String> formData = new HashMap<String, String>();
formData.put("name", formName.getText().toString());
formData.put("test", "TESTING");

//formData.get("name"); - this test works

Connection connection = new Connection();
connection.execute(formData);

Это устанавливает мою карту данных, успешно проверяет первый элемент и отправляет данные формы моему классу, ответственному за работу над этими данными в отдельном потоке.

Но в моем классе async со следующим фрагментом:

public class Connection extends AsyncTask<Map, Void, Void> {
    @Override
    protected Void doInBackground(Map... data) {
        // TODO Auto-generated method stub
        Log.i("TEST", "NEW THREAD FIRING !!!");
        Log.d("DATA", data.get("name"));

        return null;
    }

}

Мой второй вызов журнала пытается извлечь элемент name из карты массива, но мой объект "данных" не распознается как карта, в которую я прошел.

  • 0
    У вас есть « (Map... data) » в качестве параметров метода, то есть массив « Map »: s. Вместо этого попробуйте data[0].get("name") .
Теги:
variadic-functions
array-map

1 ответ

1
Лучший ответ

Метод doInBackground() принимает параметр varargs. Это означает, что сразу можно передать более одного типа.

В этом случае может пройти более одной карты, также в этом случае только один IS фактически передается. (Вы знаете это, потому что вы инициируете вызов AsyncTask выполнения AsyncTask). Обратите внимание на ... в подписи метода? Это означает, что вы можете передать несколько объектов Map.

Connection connection = new Connection();
connection.execute(formData1, formData2, formData3);

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

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

@Override
protected Void doInBackground(Map... data) {
    // TODO Auto-generated method stub
    Log.i("TEST", "NEW THREAD FIRING !!!");
    Map myMap = data[0];
    Log.d("DATA", myMap.get("name"));

    return null;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню