来自json的Android复杂列表视图

来自json的Android复杂列表视图,android,android-layout,android-listview,android-adapter,Android,Android Layout,Android Listview,Android Adapter,我有一个2屏幕的应用程序。当用户单击主屏幕上的按钮时,他将被带到屏幕2,其中一个listview等待显示数据库表中的数据。 我设法检索查询的内容并以json格式获取它。 我还使用JSONArray中的一些信息显示了一个简单的listview。 但是我想在listView项中显示更多信息。不止一个。 我填充listview的代码是: if (jArray!=null && jArray.length() > 0){ JSONObject jso

我有一个2屏幕的应用程序。当用户单击主屏幕上的按钮时,他将被带到屏幕2,其中一个listview等待显示数据库表中的数据。 我设法检索查询的内容并以json格式获取它。 我还使用JSONArray中的一些信息显示了一个简单的listview。 但是我想在listView项中显示更多信息。不止一个。 我填充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());
            }                   
    }
if(jArray!=null&&jArray.length()>0){
JSONObject json_数据;
试一试{
int length=jArray.length();
List listContents=新的ArrayList(长度);
for(int i=0;i
我知道setAdapter中肯定有一些东西,但我不知道如何以不同的方式编写代码。可能我还需要一个多维数组。。?!?! 我首先添加了一个新布局(仅针对listview项),其中添加了一个imageview和3个TextView。但我不知道如何将该布局设置为我的listview的布局,也不知道如何用我的JSONArray中的数据填充TextView

请帮帮我


重要提示:我的JSONArray通过POST来自mysql数据库。

我猜您正在尝试创建自定义lisview,因此可能需要自定义适配器。 以下是您可以用来解决问题的教程:

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


祝你好运

嘿,如果您正在从SQLite数据库检索值,那么为什么要将其转换为JSON呢?只需获取游标对象并将其传递给适配器,编写一个扩展游标适配器的自定义适配器,然后完成您的工作,选中此链接即可。但是您必须意识到,如果您的应用程序中有一些内容需要更改,或者只是添加了一个功能,这将是很困难的,因为所有代码都集中在同一个位置(如果其他人必须修改您的代码,这也会很痛苦…)

例如:您可以拥有一个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数据。在存储它们之前将它们转换为可用数据

覆盖getview,并为每一行膨胀一个cusotm行。你做得不对,适配器类或活动中不应该有Json对象class@Yume117好。。。JSON对象应该在哪里?“为什么不在这里呢?”拉古南丹我知道这对你来说很容易,但我没有任何经验去做你建议的事情。这就是为什么我要问。谢谢,我通过POST从mysql数据库获取JSON数组数据。所以没有SQLite