无法从json android填充列表

时间:2013-04-25 05:40:45

标签: android json android-listview custom-adapter

我正在尝试从api填充列表对象。
这是一种方法jasonresult。

protected void onPostExecute(String result)
    {

        JSONArray con;
        //String tag_name="tests";
        //String tag_id="ID";
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        try 
        {
            JSONObject jsonObject = new JSONObject(result);
            if("success".equals(jsonObject.getString("result")))
            {   Toast.makeText(getBaseContext(),jsonObject.getString("tests"),Toast.LENGTH_SHORT).show();
                //String nKey=jsonObject.getString("nKey");
            //  switchActivity(nKey);
                //Toast.makeText(getBaseContext(),nKey,Toast.LENGTH_SHORT).show();
                try{

                con = jsonObject.getJSONArray("tests");
                for(int i = 0; i < con.length(); i++){
                    HashMap<String, String> map = new HashMap<String, String>();
                    JSONObject c = con.getJSONObject(i);
                    map.put("EXAM", "" + c.getString("exam"));
                    map.put("ID", "" + c.getString("id"));
                    mylist.add(map);
                }}catch (JSONException e) {
                    e.printStackTrace();
                }
                ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.textview,new String[] { "exam", "id" },new int[] { R.id.exam, R.id.id });

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);

            }
            else
            {
                Toast.makeText(getBaseContext(),jsonObject.getString("message"),Toast.LENGTH_LONG).show();
            }
        } 
        catch (Exception e)
        {
            Log.d("ReadWeatherJSONFeedTask", e.getLocalizedMessage());
        }          
    }

给出错误
ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.textview,new String[] { "exam", "id" },new int[] { R.id.exam, R.id.id });

ERROR:

The constructor SimpleAdapter(examlist.ReadJSONResult, ArrayList<HashMap<String,String>>, int, String[], int[]) is undefined

2 个答案:

答案 0 :(得分:2)

这是因为你使用ListAdapter时没有这样的构造函数。作为Context(第一个参数),您传递的内容为examlist.ReadJSONResult,您应该传递Context Activity ViewListAdapter使用此ListAdapter Activity 1}}被放置。

如果您设置Activity的课程不是Context,那么您应该将ReadJSONResult的{​​{1}}传递给此课程并存储示例作为成员字段以供进一步使用。

例如,您的班级名为Context。创建一个以public ReadJSONResult(Context context) { m_context = context; // There needs to be a field member in ReadJSONResult class called m_context } 为参数的构造函数:

Activity

由于这一点,在您创建ReadJSONResult对象的Activity中,您将Context的{​​{1}}传递给构造函数,然后您可以创建{{1}像这样:

ListAdapter

答案 1 :(得分:2)

  

创建自定义Adpater以充气ListView。

public class MyListAdapter extends BaseAdapter {

ArrayList<HashMap<String, String>> data;
Activity a;
private static LayoutInflater inflater=null;


public MyListAdapter(Activity act, ArrayList<HashMap<String, String>> UserAndMessage)
{
    data = UserAndMessage;
    inflater = (LayoutInflater)act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    a = act;
}

@Override
public int getCount() {

    return data.size();
}

@Override
public Object getItem(int position) {

    return data.get(position);
}

@Override
public long getItemId(int position) {

    return position;
}

@Override
public View getView(int position, View convertview, ViewGroup parent) {

    View vi = convertview;
    if(null == vi)
    {
        vi = inflater.inflate(R.layout.listitem, null);

        TextView ID= (TextView) vi.findViewById(R.id.ID);
        TextView Exam= (TextView) vi.findViewById(R.id.exam);

        HashMap<String,String> item = data.get(position);
        ID.setText(item.get("name"));
        EXAM.setText(item.get("message"));

    }

    return vi;
 }

}
  

从onPostExecute()设置ListView的适配器如下:

myList = (ListView) findViewById(R.id.listView1);   
myList.setAdapter(new MyListAdapter(this, UserAndMessage));