Страница 1 из 1

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

Добавлено: 11 окт 2014, 20:35
bydirect
Здравствуйте форумчане.

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

У меня есть класс отправки 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 есть другие пути решения этой проблемы.

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

Добавлено: 11 окт 2014, 20:43
Leeroy
Поменять дженерик у асинк таска на:
AsyncTask<Map<String, String>, Void, String> mTask ......

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

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

Добавлено: 11 окт 2014, 21:19
bydirect
Большое спасибо!!!

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

Добавлено: 12 окт 2014, 08:46
bydirect
Поменял тип параметров в 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;
}
Ошибок нет но в лог летит Изображение вместо вводимых данных. Подскажите пожалуйста чего не хватает?

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

Добавлено: 12 окт 2014, 09:42
Leeroy
Map<String, String> map = params[0];
И данные в мапе.
String string = map.get(ключ/значение);

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

Добавлено: 12 окт 2014, 09:52
bydirect
Еще раз большое спасибо. Все заработало как надо....