草庐IT

android - 微调器的 JSON 解析问题

coder 2023-11-20 原文

我所有的微调器都相互连接,它们不是独立的,我想根据 spinner1 中的选择显示 spinner2 和 spinner3 中的选项(我的意思是基于用户在 spinner1 中选择的类别)

onCreate 中,我将数据填充到 Spinner 中,但在 spinner2 和 spinner3 中,我获取的数据属于 CategoryB,而它们必须仅填充 CategoryA 数据。

那么我的错误在哪里呢?这是我的 JSON 解析代码:

               categoryArrayList = new ArrayList<Category>();
               cArrayList = new ArrayList<String>();

                ...................................

                // Array Level 1 --- START
            JSONArray jarray = jsono.getJSONArray("categories");

            for (int i = 0; i < jarray.length(); i++) {
                JSONObject object = jarray.getJSONObject(i);

                Category language = new Category();                     
                language.setName(object.getString("category_name"));
                Log.d("category_name::-", object.getString("category_name"));

                language.setTypeArrayList(typeArrayList);
                categoryArrayList.add(language);
                cArrayList.add(categoryArrayList.get(i).getName());

                // Array Level 1 --- END

                // Array Level 2 --- START

                JSONArray jsarray = object.getJSONArray("types");
                typeArrayList = new ArrayList<Type>();
                tArrayList = new ArrayList<String>();
                for (int j = 0; j < jsarray.length(); j++) {
                    JSONObject jjobject = jsarray.getJSONObject(j);

                    Type genre = new Type();

                    genre.setName(jjobject.getString("type_name"));
                    Log.d("type_name::-", jjobject.getString("type_name"));     

                    genre.setServiceArrayList(serviceArrayList);
                    typeArrayList.add(genre);
                    tArrayList.add(typeArrayList.get(j).getName());     

                    // Array Level 2 --- END

                    // Array Level 3 --- START

                    JSONArray jsonarray = jjobject.getJSONArray("services");
                    serviceArrayList = new ArrayList<Service>();
                    sArrayList = new ArrayList<String>();
                    for (int k = 0; k < jsonarray.length(); k++) {
                        JSONObject jjjobject = jsonarray.getJSONObject(k);

                        Service movie = new Service();

                        movie.setName(jjjobject.getString("service_name"));
                        Log.d("service_name::-", jjjobject.getString("service_name"));

                        serviceArrayList.add(movie);    
                        sArrayList.add(serviceArrayList.get(k).getName());

                        // Array Level 3 --- END
                    }

                }       

            }

            return true;
        }

这是我填充 Spinners 的方式:

            spinner1.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                     android.R.layout.simple_spinner_dropdown_item,
                     cArrayList));

            spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item,
                    tArrayList));

            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item,
                    sArrayList));

最佳答案

奥利奥。这是完整的代码。

分类类

public class Category {

    String name;
    ArrayList<ArrayList<Type>> type;
    Category()
    {
        name = "";
        type = new ArrayList<ArrayList<Type>>(); 
    }

    void setName(String s)
    {
        name =s;
    }

    public String getName()
    {
        return name;
    }

    void setTypeArrayList(ArrayList<Type> serviceArrayList)
    {
        type.add(serviceArrayList);
    }

    ArrayList<Type> getTypeArrayList(int i)
    {
        return type.get(i);
    }
}

类型类

import java.util.ArrayList;

public class Type {
    String type;
    ArrayList<ArrayList<Service>> service;

    public Type() {
        // TODO Auto-generated constructor stub
        type = "";
        service = new ArrayList<ArrayList<Service>>();
    }
    void setName(String s)
    {
        type =s;
    }

    public String getName()
    {
        return type;
    }

    void setServiceArrayList(ArrayList<Service> serviceArrayList)
    {
        service.add(serviceArrayList);
    }

    ArrayList<Service> getServiceArrayList(int i)
    {
        return service.get(i);
    }
}

服务等级

public class Service {

    String service;

    public Service() {
        // TODO Auto-generated constructor stub
        service ="";
    }

    void setName(String s)
    {
        service =s;
    }

    public String getName()
    {
        return service;
    }
}

初始化全局

 int catpos =0;
 ArrayList<Category> categoryArrayList = new ArrayList<Category>();
 ArrayList<String> cArrayList = new ArrayList<String>();
 ArrayList<Type> typeArrayList;
 ArrayList<Service> serviceArrayList;

后台运行

    //your http request and response process


    JSONObject jsono;
    try {
        jsono = new JSONObject(data);

        JSONArray jarray = jsono.getJSONArray("categories");

        for (int i = 0; i < jarray.length(); i++) {
            JSONObject object = jarray.getJSONObject(i);

            Category language = new Category();
            language.setName(object.getString("category_name"));
            Log.d("category_name::-", object.getString("category_name"));

            JSONArray jsarray = object.getJSONArray("types");
            typeArrayList = new ArrayList<Type>();
            tArrayList = new ArrayList<String>();
            for (int j = 0; j < jsarray.length(); j++) {
                JSONObject jjobject = jsarray.getJSONObject(j);

                Type genre = new Type();

                genre.setName(jjobject.getString("type_name"));
                Log.d("type_name::-", jjobject.getString("type_name"));

                JSONArray jsonarray = jjobject.getJSONArray("services");
                serviceArrayList = new ArrayList<Service>();
                sArrayList = new ArrayList<String>();
                for (int k = 0; k < jsonarray.length(); k++) {
                    JSONObject jjjobject = jsonarray.getJSONObject(k);

                    Service movie = new Service();

                    movie.setName(jjjobject.getString("service_name"));
                    Log.d("service_name::-",
                            jjjobject.getString("service_name"));

                    serviceArrayList.add(movie);
                    sArrayList.add(serviceArrayList.get(k).getName());
                }
                genre.setServiceArrayList(serviceArrayList);
                typeArrayList.add(genre);
                tArrayList.add(typeArrayList.get(j).getName());
            }

            language.setTypeArrayList(typeArrayList);
            categoryArrayList.add(language);
            cArrayList.add(categoryArrayList.get(i).getName());

        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

onPostExecute方法

    tArrayList = new ArrayList<String>();
    sArrayList = new ArrayList<String>();

    Category c = categoryArrayList.get(0);      
    typeArrayList = c.getTypeArrayList(0);
    for(int i=0;i<typeArrayList.size();i++)
        tArrayList.add(typeArrayList.get(i).getName());
    Type t = typeArrayList.get(0);
    serviceArrayList = t.getServiceArrayList(0);
    for(int i=0;i<serviceArrayList.size();i++)
        sArrayList.add(serviceArrayList.get(i).getName());

    spinner1.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, cArrayList));

    spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, tArrayList));


    spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, sArrayList));

    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {

            catpos = pos;
            tArrayList = new ArrayList<String>();
            sArrayList = new ArrayList<String>();
            Category c = categoryArrayList.get(pos);        
            typeArrayList = c.getTypeArrayList(0);
            for(int i=0;i<typeArrayList.size();i++)
                tArrayList.add(typeArrayList.get(i).getName());
            Type t = typeArrayList.get(0);
            serviceArrayList = t.getServiceArrayList(0);
            for(int i=0;i<serviceArrayList.size();i++)
                sArrayList.add(serviceArrayList.get(i).getName());

            spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, tArrayList));


            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, sArrayList));


        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

    spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {

            sArrayList = new ArrayList<String>();
            Category c = categoryArrayList.get(catpos);     
            typeArrayList = c.getTypeArrayList(0);              
            Type t = typeArrayList.get(pos);
            serviceArrayList = t.getServiceArrayList(0);
            for(int i=0;i<serviceArrayList.size();i++)
                sArrayList.add(serviceArrayList.get(i).getName());

            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, sArrayList));                
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

关于android - 微调器的 JSON 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32515821/

有关android - 微调器的 JSON 解析问题的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  5. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  6. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  7. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  8. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  9. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  10. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

随机推荐