首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONArray和BaseAdapter组合

JSONArray和BaseAdapter组合
EN

Stack Overflow用户
提问于 2011-11-10 06:57:03
回答 1查看 586关注 0票数 0

目前我可以用两种方式填充我的旋转器,一种方式是从数据库中得到我需要的结果,但是旋转器中的文本是JSON格式的,它都可以工作,但它看起来很糟糕,然后如果我从JSON中提取名称并使用它,我会丢失名称值对的值部分。

我被告知我需要使用BaseAdapter子类才能做我需要做的事情。下面的代码就像我希望的那样工作,但是数据是硬编码的,这是没有用的。

我想做的是用从数据库返回的JSON数据填充下面的MyData。

这段代码:

代码语言:javascript
复制
final MyData items[] = new MyData[4];
items[0] = new MyData( "Ken's Plimbing","125738468");
items[1] = new MyData( "Peninsula Pests","3787906453");
items[2] = new MyData( "Joe's Electrical","129754354");
items[3] = new MyData( "Garderning Supplies","097803452");*/

ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);

userSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            MyData d = items[position];
            Toast.makeText(PropertyManagement.this, d.getValue(), Toast.LENGTH_SHORT).show();
        }
            public void onNothingSelected(AdapterView<?> parent) {
        }
    }
);

使用此BaseAdapter:

代码语言:javascript
复制
class MyData {
    public MyData( String spinnerText, String value ) {
        this.spinnerText = spinnerText;
        this.value = value;
    }
    public String getSpinnerText() {
        return spinnerText;
    }
    public String getValue() {
        return value;
    }
    public String toString() {
        return spinnerText;
    }
    String spinnerText;
    String value;

成功了!

但是我需要用从数据库返回的JSON数组填充MyData。根据这篇文章的第一段,我一直在这样做。

代码语言:javascript
复制
ArrayAdapter<String> adapter = new ArrayAdapter<String>(PropertyManagement.this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

final MyData items[] = new MyData[4];
for (int i = 0; i < myUsers.length(); ++i)
{
    adapter.add(myUsers.getJSONObject(i).getString("BusinessName")); 
};
userSpinner.setAdapter(adapter);

JSONArray/字符串如下所示,

代码语言:javascript
复制
{"BusinessName":"Petes Plumbing","BusinessPhone":"0434943743"},{"BusinessName":"Joes Electrical","BusinessPhone":"0466367279"}

任何帮助都将不胜感激。

干杯,

麦克。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-10 07:08:39

您在这里非常接近,您需要将adapter.add添加到items中,而不是在for循环中添加它。像这样重构:

代码语言:javascript
复制
final MyData items[] = new MyData[myUsers.length()];
for (int i = 0; i < MyData.length(); ++i){
  items[i] = new MyData(myUsers.getJSONObject(i).getString("BusinessName"), myUsers.getJSONObject(i).getString("BusinessPhone"));
}
ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);

这里的不同之处在于,您可以找到JSONArray的长度,从而创建一个具有该长度的新的MyItem数组。然后根据JSONArray中的值用新的MyItems初始化这些项。最后,您将使用项目创建适配器,就像在第一个示例中所做的那样。在本例中,我假设JSONArray中的myUsers。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8072916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档