2013-08-09 1 views
1

Привет В настоящее время я ищу лучший/самый простой способ заполнить счетчик со значениями из секции выбора страницы html. В конце концов значения счетчика должны быть точно такими же, как те, которые содержатся в разделе выбора html. Я хочу сделать это самым простым способом. Я думал о следующих идеях:android populate spinner from html form values ​​(select tag)

  • Считать значения со страницы HTML (например, с помощью LXML)
  • Добавьте значение к вертушке (непосредственно или, если это невозможно, после сохранения значения в базе данных)

Кто-нибудь знает простейший способ этого (как для прочитанной части, так и для части населения)? Есть ли объект/класс android, позволяющий напрямую связывать значения со страницы html с прядильщиком?

Большое спасибо за вашу помощь! Бен

+1

Является ли страница HTML вашей или вы очищаете другой сайт? Другими словами, у вас есть sql-доступ к значениям выбора? – Nick

+1

Точно, html-страница с веб-сайта (не под моим контролем) – user2669032

+0

Я как раз собирался задать тот же вопрос, когда уточнил свой поиск в Google и нашел его опубликованным всего на час раньше. Нечетное совпадение. Может ли кто-нибудь помочь? Похоже, что это была бы обычная задача, которую кто-то уже сделал, и я уверен, что я и мой друг здесь предпочитают не изобретать колесо. – sajattack

ответ

1

Я использовал jsoup в AsyncTask, чтобы получить значение и текст опций и поместить их в текст/значение TreeMap (отсортированный HashMap) как так:

class TheaterGetter extends AsyncTask<Context, Void, Document> {  
    private Context context; 
    @Override 
    protected Document doInBackground(Context... contexts) { 
     context = contexts[0]; 
     Document doc = null; 
     try { 
      doc = Jsoup.connect("http://landmarkcinemas.com").timeout(10000).get(); 
     } catch (IOException e) { 
      Log.e("website connection error", e.getMessage()); 
     } 
     return doc; 
    } 

    protected void onPostExecute(Document doc) { 
     Element allOptions = doc.select("select[id=campaign").first(); 
     Elements options = allOptions.getElementsByTag("option"); 
     options.remove(0); 
     TreeMap<String, String> theaters = new TreeMap<String, String>(); 
     for (Element option:options) { 
      theaters.put(option.html(), option.attr("value")); 
     } 

Тогда я сделал этот адаптер для вертушка:

public class TreeMapSpinAdapter extends ArrayAdapter{ 
    private Context context; 
    private TreeMap<String, String> treeMap; 

    public TreeMapSpinAdapter(Context context, int textViewResourceId, TreeMap<String, String> treeMap){ 
     super(context, textViewResourceId, treeMap.values().toArray()); 
     this.context = context; 
     this.treeMap = treeMap; 
    } 

    @Override 
    public int getCount() { 
     return this.treeMap.values().size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return this.treeMap.values().toArray()[arg0]; 
    } 

    public Object getItem(String key) { 
     return treeMap.get(key); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView label = new TextView(context); 
     label.setTextColor(Color.BLACK); 
     label.setText(treeMap.keySet().toArray()[position].toString()); 
     return label; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     TextView label = new TextView(context); 
     label.setTextColor(Color.BLACK); 
     label.setText(treeMap.keySet().toArray()[position].toString()); 
     return label; 
    } 

} 

Тогда, еще в нашем AsyncTask мы создали вертушку так:

TreeMapSpinAdapter adapter = new TreeMapSpinAdapter(context, android.R.layout.simple_spinner_item, theaters); 
final Spinner spinner = (Spinner) ((Activity) context).findViewById(R.id.spinner1); 
spinner.setAdapter(adapter); 

И, наконец, мы называем наш AsyncTask так:

new TheaterGetter().execute(this); 

вещи называют театр это и потому, что в моем случае я получаю список местоположений театра.

+0

Спасибо Sajattack. Я надеялся, что существует более прямой способ избежать разбора страницы html, которая не всегда интересна :) – user2669032

 Смежные вопросы

  • Нет связанных вопросов^_^