В моем 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 из карты массива, но мой объект "данных" не распознается как карта, в которую я прошел.
Метод 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;
}
(Map... data)
» в качестве параметров метода, то есть массив «Map
»: s. Вместо этого попробуйтеdata[0].get("name")
.