0

私は2画面のアプリを持っています。ユーザーがメイン画面のボタンをクリックすると、画面 2 が表示され、データベース テーブルからのデータを含むリストビューが表示されるのを待ちます。クエリの内容を取得し、json 形式で取得することができました。また、JSONArray からの情報を使用して簡単なリストビューを表示することもできました。しかし、listView アイテムにもっと多くの情報を表示したいと思います。1つだけではありません。リストビューを作成するための私のコードは次のとおりです。

    if (jArray!=null && jArray.length() > 0){
            JSONObject json_data; 
            try {
                int length = jArray.length();
                List<String> listContents = new ArrayList<String>(length);
                for (int i = 0; i < length; i++)
                {
                    json_data = jArray.getJSONObject(i);
                    listContents.add(json_data.getString("clientnume"));
                }
                ListView myListView = (ListView) findViewById(R.id.ListView1);
                myListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listContents));
            } catch (Exception e) {
                Log.e(null, e.toString());
            }                   
    }

setAdapter に何かがあるに違いないことはわかっていますが、別の方法でコーディングする方法がわかりません。おそらく、多次元配列も必要になるでしょう..?!?! まず、imageview と 3 つの TextViews を追加した新しいレイアウト (リストビュー アイテム用) を追加しました。しかし、そのレイアウトをリストビューのレイアウトとして設定する方法と、テキストビューに JSONArray のデータを入力する方法がわかりません。

私を助けてください。

重要: 私の JSONArray は、POST を介して mysql DB から取得されます。

4

3 に答える 3

0

あなたのやり方で大丈夫です。ただし、アプリで何かを変更したり、機能を追加したりする必要がある場合、すべてのコードが同じ場所に集中しているため、それは難しいことに注意する必要があります (他の誰かがコードを変更する必要がある場合は、それも苦痛です. ..)

例:ネットワーク経由で json ストリームを取得するJsonParserクラスを持つことができます

public class JSONParser {
    /**
     * PRIVATE ATTRIBUTES
     */
    // log
    private static final String TAG     = JSONParser.class.getSimpleName();
    //
    static InputStream          is      = null;
    static JSONObject           jObj    = null;
    static String               json    = "";

    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        catch (ClientProtocolException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        }
        catch (Exception e) {
            Log.e(TAG, "Error converting result " + e.toString());
        }
        try {
            jObj = new JSONObject(json);
        }
        catch (JSONException e) {
            Log.e(TAG, "Error parsing data " + e.toString());
        }
        return jObj;
    }
}

次に、記述しなければならないオブジェクト(人間、猫、連絡先など) を作成し、いくつかのインターン作業を行います。

最後に、オブジェクトを管理するクラスを作成し、json との間で変換します ... など

ダウンロードは、アダプターの他のスレッド(サービス、asynctask、ローダーなど) で保持する必要があります。ダウンロードされ、オブジェクトに変換され、保存され、準備ができているデータのみを使用する必要があります。また、特定の必要がない限り、json データを保存しないでください。それらを保存する前に使用可能なデータに変換します

于 2013-07-26T07:31:42.853 に答える
0

SQLite データベースから値を取得している場合は、JSON に変換する代わりに、カーソル オブジェクトを取得してアダプタに渡し、CursorAdapter を拡張するカスタム アダプタを記述してジョブを完了します。このリンクを確認してくださいhttp://www .mysamplecode.com/2012/07/android-listview-cursadapter-sqlite.html

于 2013-07-26T07:10:08.793 に答える
0

カスタム lisview を作成しようとしていると思われるため、カスタム アダプターが必要になる場合があります。問題を解決するために使用できるチュートリアルは次のとおりです 。 http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

基本的に、開始時にレイアウトを作成し、データ (ハッシュマップ) を使用してリストを作成すると、アダプターが残りを行います。

幸運を !

于 2013-07-26T07:08:10.247 に答える