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

                }

ペーストビンのリンクでわかるように、ここにキャッチがありますが、投稿していません。

および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>

そして今、あなたのコードでは、ドライバーの配列リストを作成し、そこからアダプターを作成し、そのアダプターをリストビューに設定するだけです。

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 に答える