0

我有一个 2 屏幕应用程序。当用户单击主屏幕上的一个按钮时,他将被带到屏幕 2,其中一个列表视图等待与来自数据库表的数据一起显示。我设法检索查询的内容并以 json 格式获取它。我还设法使用 JSONArray 中的一些信息显示了一个简单的列表视图。但我想在 listView 项目中显示更多信息。不止一个。我填充列表视图的代码是:

    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 一定有一些东西,但我不知道如何以不同的方式对其进行编码。可能我还需要一个多维数组..?!?! 我首先添加了一个新布局(仅用于列表视图项),其中添加了一个图像视图和 3 个文本视图。但我不知道如何将该布局设置为我的列表视图的布局,并且还使用我的 JSONArray 中的数据填充文本视图。

请帮我。

重要提示:我的 JSONArray 通过 POST 来自 mysql DB。

4

3 回答 3

0

嘿,如果您从 SQLite 数据库中检索值,那么为什么要将其转换为 JSON,而不是获取光标对象并将其传递给您的适配器,编写一个扩展 CursorAdapter 的自定义适配器并完成您的工作,请查看此链接http://www .mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

于 2013-07-26T07:10:08.793 回答
0

按你的方式做就可以了。但是你必须意识到,如果你在你的应用程序中有一些东西要改变或者只是添加一个功能,那将很难,因为所有的代码都集中在同一个地方(如果其他人必须修改你的代码,那也会很痛苦。 ..)

示例:您可以拥有一个JsonParser类,通过网络获取 tue json 流

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

下载应该保存在适配器中的其他线程(服务、异步任务、加载程序等)中,您应该只使用下载、转换为对象、存储和准备好的数据。除非您有特定需求,否则不要存储 json 数据。在存储它们之前将它们转换为可用数据

于 2013-07-26T07:31:42.853 回答
0

我猜您正在尝试制作自定义 lisview,因此您可能需要自定义适配器。这是您可以用来解决问题的教程: http ://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

基本上,在您开始时创建一个布局,用您的数据(Hashmap)制作一个列表,然后您的适配器将完成剩下的工作。

祝你好运 !

于 2013-07-26T07:08:10.247 回答