JSonarray для Arraylist и Arraylist в ListAdapter не работает. (В Android) - PullRequest
0 голосов
/ 21 ноября 2010

У меня маленькая проблема, и я ее не вижу.

Я получаю данные Json (JSONArray), и я хотел сделать List всех имен в JSONArray, что-то вроде этого.

List list = new ArrayList<String>();
for(int i=0;i < data.length();i++){ 
    list.add(data.getJSONObject(i).getString("names").toString());
}

И я хотел взять этот список в ListView, поэтому я сделал это:

ArrayList<String> test = history_share.list;
names_list = (String[]) test.toArray();
ArrayAdapter<String> adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, names_list);
setListAdapter(adapter);

(history_share - это один из методов, который я создал для получения данных json из API. Затмение не видит никакой ошибки, и я тоже.

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2011
for(int i=0;i < data.length();i++){ 
    list.add(data.getJSONObject(i).getString("names").toString());
}


.getString("names") returns String, remove .toString()

Также

ArrayAdapter<String> adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, names_list);

заменить на

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, names_list);
0 голосов
/ 04 июля 2012

Вы пытаетесь сделать это, используя ArrayList с Hashmap:

ArrayList<HashMap<String, String>> comunitylist = new ArrayList<HashMap<String, String>>();

String url =_url + _uid + uid;

JSONParstring jParser = new JSONParstring();

// getting JSON string from URL
String json = jParser.getJSONFromUrl(url,apikey);

Log.e("kPN", json);
try
{
    JSONObject jobj = new JSONObject(json);
    Log.e("kPN", json.toString());
    System.out.print(json);
    JSONArray comarray = jobj.getJSONArray(TAG_COMMU);

    for(int i = 0; i <= comarray.length(); i++){
        JSONObject c = comarray.getJSONObject(i);
        Log.w("obj", c.toString());
        JSONObject d = c.getJSONObject(TAG_PERSON);
        Log.w("obj", d.toString());
        String name =d.getString(TAG_NAME);
        Log.w("name", name);

        String nick =d.getString(TAG_NICK);
        String home = d.getString(TAG_HOME);
        HashMap<String, String> map = new HashMap<String, String>();
        map.put(TAG_NAME, name);
        map.put(TAG_NICK, nick);
    }
}
catch (JSONException ie)
{

}

list=(ListView)findViewById(R.id.list);
adapter=new Lazycommunity(this,listz);

list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {

    @SuppressWarnings("unchecked")
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

        //Having Trouble with this line, how to retrieve value???
        HashMap<String, String> map2 = (HashMap<String, String>) list.getAdapter().getItem(position);

        Intent in = new Intent(getApplicationContext(), Communityprofile.class);
        in.putExtra(TAG_NAME, map2.get(TAG_NAME));
        in.putExtra(TAG_IMG, map2.get(TAG_IMG));

        startActivity(in);
    }
});
0 голосов
/ 21 ноября 2010

Почему у ваших методов есть подчеркивания в их именах? Методы по соглашению начинаются со строчной буквы. Например myMethod(). Имена классов начинаются с заглавных букв, таких как MyClass. Вы должны придерживаться этого.

Также history_share - это не метод, которым вы разместили свой код, плюс вы не сможете получить что-либо из метода, вызвав его таким образом.

Метод получения просто возвращает определенный член. Я очень удивлен, что Затмение не выдвигает на первый план это. Вы уверены, что проверка ошибок включена?

Обновление: Назвать ваши классы как уже существующие классы, как правило, очень плохая идея, и она становится еще хуже, если вы планируете использовать оригинальный класс где-нибудь или любой класс, производный от этого класса. В исходном Connection классе я не могу обнаружить любой статический член с именем list, что приводит к предположению, что вы создали свой собственный класс Connection. Это не должно быть проблемой здесь, но это может вызвать проблемы в будущем, если вы продолжите это делать.

...