android - 从 mySQL 服务器获取数据时让 ListView 工作

标签 android mysql database json listview

正如标题所说,我有一个 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 工作正常,因此其余代码是正确的。

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

最佳答案

我不确定您的代码中的确切问题是什么,但我感觉这与您的适配器有关。我对一种可行的方法提出了建议,这种方法更好、更灵活,基本上就是创建您自己的适配器。

先做一个小的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;
    }

现在创建将用于创建 View 的适配器

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
    }
}

现在您需要用于显示每个 ListView 行的 View

<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>

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

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);

你应该能够将所有这些东西复制粘贴到它们自己的类中并且它应该可以工作......并将你的 ListView 代码替换为我在底部给出的代码...... 这应该可以,如果您有任何问题,请告诉我

关于android - 从 mySQL 服务器获取数据时让 ListView 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219661/

相关文章:

android - 尝试使用 Dagger 解决依赖循环

android - 以编程方式完成子 Activity

mysql - 使用内部选择的查询计数

java - 在自动触发默认监听器之前触发 Hibernate 自定义事件监听器

sql-server - 如何编写具有正确对象顺序的 MS SQL Server 数据库脚本?

android - 无法保存和恢复嵌套 fragment ?

android - 我怎样才能让我的按钮更大

java - java(jsp、servlet、mysql)中图像保存、编辑、删除到特定文件夹并将路径和其他数据保存在数据库中

mysql - 如何根据存储过程参数制作动态数据透视表

mysql - Sync.\维护2个数据库表(MYSQL)中的更新数据