Ассоциативный массив (Map< String, String >) в AsyncTask

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
bydirect
Сообщения: 70
Зарегистрирован: 11 июн 2014, 10:36

Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение bydirect » 11 окт 2014, 20:35

Здравствуйте форумчане.

Помогите решить задачу.

У меня есть класс отправки POST запроса на сервер, который вызывается в AsyncTask
public class Post {
public static String getPost(String params) {
String res = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://site.ru/post.php");
try {
List pairs = new ArrayList();

pairs.add(new BasicNameValuePair("login", params)); // Вместо этого нужно получить из массива список переменных с параметрами.

httppost.setEntity(new UrlEncodedFormEntity(pairs));
HttpResponse response = httpclient.execute(httppost);
res = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
return "error";
}
return res;

}
}
Как мне передать в AsyncTask и далее в Post класс ассоциативный массив.
Массив создаю подобным образом

Map< String, String > postData = new HashMap< String, String >();
postData.put("login", login.getText().toString());
postData.put("password", password.getText().toString());

Не понятно что нужно указать в tt.execute(???);
И какой тип данных передать на вход в AsyncTask<String, String, String>
Со строками все работает идеально. Но как пытаюсь впихнуть массив, выдает кучу ошибок в разных местах.
PS Вообще задача стоит в том чтобы передавать в класс Post имя переменных и параметры, чтобы класс был универсальным. Может в JAVA есть другие пути решения этой проблемы.

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение Leeroy » 11 окт 2014, 20:43

Поменять дженерик у асинк таска на:
AsyncTask<Map<String, String>, Void, String> mTask ......

И вызвать
mTask.execute(map);
И естественно поменять тип параметров в doInBackground()
PS Вообще задача стоит в том чтобы передавать в класс Post имя переменных и параметры, чтобы класс был универсальным. Может в JAVA есть другие пути решения этой проблемы.
Даа, есть называются методы геттеры и сеттеры
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

bydirect
Сообщения: 70
Зарегистрирован: 11 июн 2014, 10:36

Re: Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение bydirect » 11 окт 2014, 21:19

Большое спасибо!!!

bydirect
Сообщения: 70
Зарегистрирован: 11 июн 2014, 10:36

Re: Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение bydirect » 12 окт 2014, 08:46

Поменял тип параметров в doInBackground.

protected String doInBackground(Map<String, String>... params) {
try {
Log.d(LOG_TAG, "in resours: " + params);
//String resours = Post.getPost(login.getText().toString());
Log.d(LOG_TAG, "out resours: " + resours);
return resours;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Ошибок нет но в лог летит Изображение вместо вводимых данных. Подскажите пожалуйста чего не хватает?

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение Leeroy » 12 окт 2014, 09:42

Map<String, String> map = params[0];
И данные в мапе.
String string = map.get(ключ/значение);
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

bydirect
Сообщения: 70
Зарегистрирован: 11 июн 2014, 10:36

Re: Ассоциативный массив (Map< String, String >) в AsyncTask

Сообщение bydirect » 12 окт 2014, 09:52

Еще раз большое спасибо. Все заработало как надо....

Ответить