Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Adverte
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 7
#1

Получить JSON и передать все его параметры его в Intent. Использован автофильтр - Android

12.10.2015, 04:33. Просмотров 305. Ответов 3
Метки нет (Все метки)

Всем привет. Я тут запутался, помогите разобраться.
Стоит задача выполнить такой функционал: получить данные JSON, один из параметров JSON формирует выпадающий список автозаполнения, по нажатию на элемент данные выбранного элемента должны попасть в Intent

Сейчас сделано применительно к одному параметру "name", он отображается в поле ввода и по готовности берётся из поля ввода и добавляется в Intent. Это работает. Как включить в ответ остальные неотображаемые но полученные в JSON другие параметры ("code", "rname")

Что сделано
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.autocomplete);
        
        mText = (TextView)findViewById(R.id.text);
        mAutoComplete = (AutoCompleteTextView) findViewById(R.id.auto_complete);
        ArrayAdapter<String> adapter = new PlacesAutoCompleteAdapter(this, R.layout.list_item);
        mAutoComplete.setAdapter(adapter);
 
        mAutoComplete.setOnItemClickListener(this);  //отрабатывает нажатия на список
    
    }
    
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        String str = (String) adapterView.getItemAtPosition(position);
        enterClicked(str);
    }
    
    protected void enterClicked(String str) {  
        // TODO Auto-generated method stub
        Intent result = new Intent();
        result.putExtra(TAG, str);
        setResult(RESULT_OK, result);
 
        // TODO - Finish the Activity
        finish();
    }
файл PlacesAutoCompleteAdapter.java запрашивает и обрабатывает JSON, формирует список автозаполнения
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
    private ArrayList<String> resultList;
    private ConnectTask bgt;
<..>
   public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
 
    private ArrayList<String> autocomplete(String input) {
        ArrayList<String> citylist = null;
    
    List<NameValuePair> apiParams = new ArrayList<NameValuePair>(2);
        apiParams.add(new BasicNameValuePair("appKey", "XXXXXXXXXXXXXXXXX"));
        apiParams.add(new BasicNameValuePair("requestText", input));
        bgt = new ConnectTask(MAP_API_URL, "POST", apiParams);  //запрашивает сервер  и получает JSON
        
        try {
            JSONArray cityJSON = bgt.execute().get();
            
            citylist = new ArrayList<String>(cityJSON.length());
            // looping through all citylist
            for (int i = 0; i < cityJSON.length(); i++) {
 
                JSONObject d = cityJSON.getJSONObject(i);
 
                // Storing each json item in variable
 
                String rname = d.getString(REGNAME);
                String srch = d.getString(SEARCH);
                String code = d.getString(CODE);
                String name = d.getString(NAME);
 
                citylist.add(new String(name));  // добавляем один параметр по нему и фильтруем
 
            } //for
        } //try
        catch (Exception e) {
            Log.e("Buffer Error1", "Error converting result " + e.toString());
        }
            return citylist;
    }
 
//ниже в коде реализована работа автофильтра
    @Override
    public int getCount() {
        return resultList.size();
    }
 
    @Override
    public String getItem(int index) {
        return resultList.get(index);
    }
 
    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    // Retrieve the autocomplete results.
                    resultList = autocomplete(constraint.toString());
 
                    // Assign the data to the FilterResults
                    filterResults.values = resultList;
                    filterResults.count = resultList.size();
                }
                return filterResults;
            }
 
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                }
                else {
                    notifyDataSetInvalidated();
                }
            }};
        return filter;
    }
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2015, 04:33     Получить JSON и передать все его параметры его в Intent. Использован автофильтр
Посмотрите здесь:

Android Передать адаптер в Intent
Android Как передать intent данные в Service?
Android Скачать JSON и вывести его
Android Передать через Intent информацию об Item
Передать через intent VIEW Android
Android Динамический textview и его параметры
Android Пытаюсь передать данные через Intent, но выходит ошибка
Android Как передать ссылку через Intent
Как передать через intent нажатие кнопки в другом активити Android
Android Передать ссылку на класс через Intent
Android Передать через intent ArrayList объектов своего класса
Получить json в приложении и вывести его в listview во фрагмент Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
12.10.2015, 08:45     Получить JSON и передать все его параметры его в Intent. Использован автофильтр #2
Навскидку

Не думаю, что приведение
String str = (String) adapterView.getItemAtPosition(position);
есть хорошо.

В лоб пробуй
String str = adapter.resultList.get(position);
Adverte
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 7
12.10.2015, 11:51  [ТС]     Получить JSON и передать все его параметры его в Intent. Использован автофильтр #3
тогда уж так
Java
1
String str = adapterView.resultList.get(position)
но это выдаёт ошибку
- adapter cannot be resolved
- Line breakpoint:Autocomplete [строка с этим новым кодом] - onItemClick(AdapterView<?>, View, int, long)
- resultList cannot be resolved or is not a field
так у меня вопрос, наверно, несколько иной - забрать значение по нажатию я могу, но как привязку к нему остальных значений (которые в одной ноде JSON с этим значением приходят), т.е. ко мне приходят данные в формате
JSON
1
2
3
4
5
6
7
8
[
 {
  "regname":"Регион",
  "searchstring":"Название",
  "code":"777",
  "name":"Название подробное"
 }
]
автофильтр работает по полю, например "name", при выборе этого значение оно благополучно уходит в Intent, а как сделать чтобы при выборе уходили и остальные поля "code", "regname"?
Это можно сделать вторым запросом на сервер с уже выбранным параметром, но это как то совсем по-индусски будет так делать, т.к. данные мы уже получали.
может я несколько сумбурно объясняю задачу.. задавайте уточняющие вопросы
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
12.10.2015, 20:52     Получить JSON и передать все его параметры его в Intent. Использован автофильтр #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну, так сделай класс с данными
Java
1
2
3
4
5
6
public class City{
String rname; 
String srch;
String code;
String name;
}
и работай с ним.

Создавай себе нужный список из таких объектов City.
Пуляй City.name в
выпадающий список автозаполнения
А в интент же пихай весь соответствующий данному name объект City.

Пока где-то так.
Yandex
Объявления
12.10.2015, 20:52     Получить JSON и передать все его параметры его в Intent. Использован автофильтр
Ответ Создать тему
Опции темы

Текущее время: 12:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru