【问题标题】:XML from Server to populate a Spinner来自服务器的 XML 以填充 Spinner
【发布时间】:2011-07-25 12:22:35
【问题描述】:

我希望从服务器的 MySQL 中填充微调器,该网站是 PHP 并且可以格式化为发送 XML 或 JSON 文件。

有没有办法用这些信息填充微调器?我可以将文件保存到内存中,但如何在微调器上读取它?

是否应该将文件保存为首选项文件,然后以这种方式读取?

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: android xml json spinner


    【解决方案1】:

    伙计们;

    经过大量的寻找、尝试和测试以及做数百种其他事情后,我回答了我自己的问题。

    这可能是一个Doh!程序员的答案,但我不是程序员,我是作为学校项目学习和做的,所以我对Java的了解甚至不足以称为“基础”。

    这是我自己问题的答案;

    String CountryName = preferences.getString("country name", null);
    List<String> lCounties = Arrays.asList(Counties(CountryName).split(","));
    CharSequence[] csCounties = lCounties.toArray(new CharSequence[lCounties.size()]);
    
    final Spinner sCounty = (Spinner) findViewById(R.id.county);    
    ArrayAdapter<CharSequence> aCounty = new ArrayAdapter<CharSequence>(
            this, android.R.layout.simple_spinner_item,csCounties);
    aCounty.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sCounty.setAdapter(aCounty);
    sCounty.setSelection(preferences.getInt("county",0));
    sCounty.setOnItemSelectedListener(new OnItemSelectedListener(){
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){
          int iCounty = sCounty.getSelectedItemPosition();
          String CountyName = sCountry.getItemAtPosition(arg2).toString();
          SharedPreferences.Editor editor = preferences.edit();
          editor.putString("county name", CountyName);
          editor.putInt("county", iCounty);
          editor.commit();
    
          //Refresh Page is county has changed
          if (oCounty != iCounty){ refresh(); }
        }
        public void onNothingSelected(AdapterView<?> arg0) {}
      });
    

    这就是解释(据我所知......)

    首先我从另一个旋转器那里读取国家(我有“几个”旋转器连接在一起)

    String CountryName = preferences.getString("country name", null);
    

    然后我使用这个信息来调用一个子类(我也可以发布这个)。该子类与服务器联系以创建 MySQL 查询并检索所需的信息;在这种情况下,给定国家的县(或州),列表被接收为 state1,state2,state3,[这是在服务器上的 PHP 上格式化以提供帮助]

    List<String> lCounties = Arrays.asList(Counties(CountryName).split(","));
    CharSequence[] csCounties = lCounties.toArray(new CharSequence[lCounties.size()]);
    

    接下来的几行代码就是真正的Spinner,网上关于spinner的资料很多,我就不多解释了。

    微调器使用此行读取保存的信息;

    sCounty.setSelection(preferences.getInt("county",0));
    

    这允许微调器预先填充用户的选择。

    然后我存储选择,我存储名称和指针。加载页面时保存名称以完成 URL,并保存指针,因为 Spinner 似乎喜欢指针。

      SharedPreferences.Editor editor = preferences.edit();
      editor.putString("county name", CountyName);
      editor.putInt("county", iCounty);
      editor.commit();
    

    我做的最后一件事是比较,当页面加载时读取变量oCounty,它只是读取preference文件并将值存储在oCounty(原始县)上,如果县名发生变化,然后它调用refresh(),这个子类刷新页面。 [这对我来说也很痛苦]

      //Refresh Page is county has changed
      if (oCounty != iCounty){ refresh(); }
    

    现在整个工作的方式是,一旦从列表中选择了一个国家,页面就会转到服务器,加载该国家/地区的县/州并刷新页面,从而在微调器上加载值,如果国家/地区发生变化,该过程将再次加载县/州。

    县/州使用相同的代码来加载城市,我只是更改了变量的名称。

    我确信程序员有更好、更快、更快的方法来执行此操作,但这些是关于如何使用存储在服务器上的 MySQL 数据库中的信息填充微调器的 2 美分。

    问候; 拉蒙

    【讨论】:

      【解决方案2】:

      首先解析您的 XML 或 JSON。然后创建将在微调器中显示的数据列表或数组。将数据传递给微调器的适配器。

      示例

      Spinner sp = (Spinner) findViewById(R.id.spnContactTypes);
      
              String numbers[] = { "ONE", "TWO" }; // data that you got from xml or JSON
              ArrayAdapter<String> adapter; = new ArrayAdapter<String>(this,
                      android.R.layout.simple_spinner_item, numbers);
              sp.setAdapter(adapter);
      

      【讨论】:

      • 问题是如何将信息解析到字符串上?您的答案将数字(一和二)“硬编码”到字符串中,它不使用服务器信息来填充字符串,这就是我要解决的问题。
      【解决方案3】:

      是的,Spinner 可以从解析后的 XML/JSON 的输出中填充

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(Map.this.getApplicationContext(), android.R.layout.simple_spinner_item, HERE-GOES-PARSED-ARRAY-OF-JSON-or-XML);
                              adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                              spin.setAdapter(adapter);
      

      【讨论】:

      • 和之前的答案一样,你给了我我所拥有的,我正在寻找将服务器信息解析到 HERE-GOES-PARSED-ARRAY-OF-JSON-or_XML 所需的代码;我该如何做到这一点??
      【解决方案4】:

      后端

      这由 Mysql 数据库和 Web 服务器组成。

      要遵循的概要步骤:

      1. 创建一个mysql数据库
      2. 创建配置文件以在我们的数据库和 Web 服务器之间建立连接 (php)
      3. 创建一个 php 脚本,其中包含查询数据库的方法,请访问以下链接。

      前端

      1. 创建activity_main.xml,在activity_main.xml中添加TextView和Spinner控件。
      2. 打开MainActivity类,使用请求方法创建到服务器的Android路径,与服务器连接,获取服务器输出并转换为response对象。
      3. 创建一个 java 文件作为一个实体类来保存微调器项。
      4. 创建自定义 BaseAdapter 以将远程数据源与微调器项绑定。
      5. 调整 Gradle Build,以在应用 gradle.build 中包含项目依赖项。
      6. 调整 Manifest.xml 文件以包含 Manifest.xml 文件用户权限 - 解释为 Internet 进行网络调用,因为应用程序需要 Internet。阅读完整示例:How to load android spinner with php mysql database values

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        相关资源
        最近更新 更多