Проблема с получением значения элемента HashMap в Android - PullRequest
0 голосов
/ 23 января 2012

У меня есть следующий код, с помощью которого я пытаюсь создать отдельный список, используя этот класс.

У меня есть это:

public Map<String, ?> createItem(String title, String caption, String uri) {
        Map<String, String> item = new HashMap<String, String>();
        item.put(ITEM_TITLE, title);
        item.put(ITEM_CAPTION, caption);
        item.put(ITEM_URI, uri );
        return item;
    }

public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        /** @todo Draw the splash screen */
        setContentView(R.layout.list_complex);
        List<Map<String,?>> security = new LinkedList<Map<String,?>>();
        security.add(createItem("Remember passwords", "Save usernames and passwords for Web sites","uri"));
        security.add(createItem("Clear passwords", "Save usernames and passwords for Web sites","uri2"));
        security.add(createItem("Show security warnings", "Show warning if there is a problem with a site's security","uri3"));

SeparatedListAdapter adapter = new SeparatedListAdapter(this);
        adapter.addSection("Security", new SimpleAdapter(this, security, R.layout.list_complex,
            new String[] { ITEM_TITLE, ITEM_CAPTION}, new int[] { R.id.list_complex_title, R.id.list_complex_caption }));

        ListView list = new ListView(this);

        list.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                 try{
                      Log.v(TAG, "Pressed id: "+(parent.getItemAtPosition(position).getClass()));
                 }catch(Exception e){
                     Log.v(TAG, "Field not found: "+e.getCause()+" : "+e.getMessage());
                 }
//Log.v(TAG, "Pressed id: "+parent.);
                  //  Intent newActivity = new Intent(view.getContext(),agones.class);     
                        //     startActivity(newActivity);

                  }
                });
        list.setAdapter(adapter);
        this.setContentView(list);

ЧтоЯ пытаюсь сделать здесь, чтобы получить URI поля из HashMap.Если я выхожу из системы, это говорит мне, что класс принадлежит экземпляру HashMap, но когда я пытаюсь использовать для него метод .get(), Eclipse говорит следующее:

The method get() is undefined for the type Class<capture#5-of ? extends Object>

Как мне поступитьисправить это?Извините, если это просто, но так как я новичок, я не могу обернуть голову вокруг этого.

Ответы [ 3 ]

0 голосов
/ 23 января 2012

Это связано с Преобразованием захвата .

В вашем методе createItem вы возвращаете HashMap<String, String> и ожидаете, что Java свяжет его с Map<String, ?>.

В результате JVM освобождает ваш String от неизвестного типа ?.таким образом, когда вы делаете Map<String, ?>. get(), он не знает, как связать неизвестный тип ? с типом T.

Я предлагаю вернуть Map<String, String> наcreateItem() и

List<Map<String,?>> security = new LinkedList<Map<String,?>>();

в

List<Map<String, String>> security = new LinkedList<Map<String, String>>();
0 голосов
/ 23 января 2012

Вместо хранения ваших данных в HashMap создайте класс, содержащий эти данные, а затем сохраните их в IList или Map.

Примерно так:

public class Storage
{
  public Storage(String t, String c, String u)
  {
    title = t;
    caption = c;
    uri = u;
  }

  public String title;
  public String caption;
  public String uri;
}
0 голосов
/ 23 января 2012

Почему ваш createItem метод возвращает Map<String, ?> вместо Map<String, String>? Измените это, чтобы возвратить Map<String, String>.

Возможно, вы также захотите изменить это:

List<Map<String,?>> security = new LinkedList<Map<String,?>>();

в это:

List<Map<String, String>> security = new LinkedList<Map<String, String>>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...