1

正如标题所说,我有一个包含数据的 mySQL 数据库。我希望我的 android 应用程序检索该数据并将其插入 ListView。我认为我做的不对,因为我当前的代码;虽然没有产生任何错误,但不起作用。这是我的代码:

http://pastebin.com/sZy5dAzS

我只想指出,当我将该数据插入 TextView 时,它会很好地显示在我的应用程序中。所以一定是我的 ListView 做错了什么。我只是不知道是什么。

只是为了更容易阅读这些是我的 ListView 的部分:

在我的代码顶部

List<String> nameData = new ArrayList<String>();

我的 JSON 解析的 for 循环:

            try {
                jArray = new JSONArray(result);
                JSONObject json_data = null;
                currentList = (ListView) findViewById(R.id.list);



                for (int i = 0; i < jArray.length(); i++) {

                    json_data = jArray.getJSONObject(i);
                    nameData.add(drivername = json_data.getString("Driver_full_name"));
                    nameData.add(drivesfor = json_data.getString("Drives_for"));

                }

正如您在 pastebin 链接中看到的那样,我确实有一个问题,只是还没有发布。

和 onPostExecute

protected void onPostExecute(String output){

        currentList.setAdapter(new ArrayAdapter<String>    (CurrentSeasonDrivers.this, android.R.layout.simple_list_item_2, nameData));
        Toast.makeText(CurrentSeasonDrivers, "DONE!",     Toast.LENGTH_LONG).show();

    }

只是重申一下;提取数据时 TextView 工作正常,因此其余代码是正确的。

非常感谢提供的任何帮助。谢谢。

4

1 回答 1

1

我不确定您的代码中的确切问题是什么,但我感觉它与您的适配器有关。我有一个建议,它应该可以工作,并且更好,更灵活,基本上是创建你自己的适配器。

首先制作一个小的 Driver 类,用作数据源

public class DriverItem {

    private String name;
    private String driversFor;

    public DriverItem(String n, String d) {
        super();
        this.name = n;
        this.driversFor = d;
    }

    // Getter and setter methods for all the fields.
    public String getName() {
        return name;
    }

    public String getDriversFor() {
        return driversFor;
    }

}

现在创建将用于创建视图的适配器

public class DriverListItemAdapter extends BaseAdapter {
    private List<DriverItem> listDriverItem;
    private Context context;

    public DriverListItemAdapter(Context ctx, List<DriverItem> list)
    {
        context = ctx;
        listDriverItem = list;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        listDriverItem.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return listDriverItem.get(position);
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(int position, View convertView, ViewGroup viewGroup) {
        // TODO Auto-generated method stub
        DriverItem driver = listDriverItem.get(position);

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater.inflate(R.layout.list, null);
        TextView name = (TextView)convertView.findViewById(R.id.txtName);
        name.setText(driver.getName());

        return convertView
    }
}

现在您需要用于显示每个列表视图行的视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/txtName"
        android:layout_height="wrap_parent"
        android:layout_width="fill_parent" 
        />
</LinearLayout>

现在在您的代码中,您只需创建驱动程序的arraylist,从中创建一个适配器,然后将该适配器设置在您的列表视图上。

DriverListItemAdapter adapter;
ListView currentList = (ListView) findViewById(R.id.list);
ArrayList<DriverItem> listOfDriverListItem;

for(int i = 0; i < jArray.length(); i++){
            jObj = jArray.getJSONObject(i);        
            listOfDriverListItem.add(newDriverItem(jObj.getString("Driver_full_name"),jObj.getString("Drives_for")));
        }

adapter = new DriverListItemAdapter(this, listOfDriverListItem);
currentList.setAdapter(adapter);

您应该能够将所有这些内容复制粘贴到他们自己的类中,它应该可以工作..并用我在底部给出的代码替换您的列表视图代码..这应该可以,如果您有任何问题,请告诉我

于 2012-08-31T18:39:22.287 回答