根据选择将 JSON 数据输入 Spinner

2023-12-01

Data is coming form JSON RESPONSE. In JSON, Every Tag contains number of nodes. Relevant data into second spinner is based on selection of First. My JSON Is Like Here JSON Structure

如何解析 JSON 并首先将所有主要节点解析为 First Spinner。然后当用户选择点时,根据选择的数据必须反映到第二个微调器中。请指导我。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Download JSON file AsyncTask
    new DownloadJSON().execute();

}

// Download JSON file AsyncTask
private class DownloadJSON extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        // Locate the WorldPopulation Class 
        world = new ArrayList<WorldPopulation>();
        // Create an array to populate the spinner 
        worldlist = new ArrayList<String>();
        // JSON file URL address
        jsonobject = JSONfunctions
                .getJSONfromURL("http://www.androidbegin.com/tutorial/jsonparsetutorial.txt");

        try {
            // Locate the NodeList name
            jsonarray = jsonobject.getJSONArray("worldpopulation");
            for (int i = 0; i < jsonarray.length(); i++) {
                jsonobject = jsonarray.getJSONObject(i);

                WorldPopulation worldpop = new WorldPopulation();

                worldpop.setRank(jsonobject.optString("rank"));
                worldpop.setCountry(jsonobject.optString("country"));
                worldpop.setPopulation(jsonobject.optString("population"));
                worldpop.setFlag(jsonobject.optString("flag"));
                world.add(worldpop);

                // Populate spinner with country names
                worldlist.add(jsonobject.optString("country"));

            }
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {
        // Locate the spinner in activity_main.xml
        Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);

        // Spinner adapter
        mySpinner
                .setAdapter(new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_spinner_dropdown_item,
                        worldlist));

        // Spinner on item click listener
        mySpinner
                .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                    @Override
                    public void onItemSelected(AdapterView<?> arg0,
                            View arg1, int position, long arg3) {
                        // TODO Auto-generated method stub
                        // Locate the textviews in activity_main.xml
                        TextView txtrank = (TextView) findViewById(R.id.rank);
                        TextView txtcountry = (TextView) findViewById(R.id.country);
                        TextView txtpopulation = (TextView) findViewById(R.id.population);

                        // Set the text followed by the position 
                        txtrank.setText("Rank : "
                                + world.get(position).getRank());
                        txtcountry.setText("Country : "
                                + world.get(position).getCountry());
                        txtpopulation.setText("Population : "
                                + world.get(position).getPopulation());
                    }

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

这段代码可以让您了解如何填充对象JSON您可以从 API 获取。

你想要做的事情非常简单,但我试图让事情尽可能通用,这样其他人就不能使用这段代码。

the spinner代码中表示的填充为ArrayList of WorldPopulation类型。你会注意到toString of WorldPopulation被覆盖,它可以用在ArrayAdapter所以国家的名字将会被选取。

public class LoadDataActivity extends AppCompatActivity {

    private Spinner spinner;
    private ArrayList<WorldPopulation> worldPopulations;

    private TextView rank_TextView;
    private TextView country_TextView;
    private TextView population_TextView;
    private TextView url_TextView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load_data);


        spinner = (Spinner) findViewById(R.id.LoadDataActivity_spinner);

        rank_TextView = (TextView) findViewById(R.id.LoadDataActivity_rank_textView);
        country_TextView = (TextView) findViewById(R.id.LoadDataActivity_country_textView);
        population_TextView = (TextView) findViewById(R.id.LoadDataActivity_population_textView);
        url_TextView = (TextView) findViewById(R.id.LoadDataActivity_url_textView);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                WorldPopulation population = (WorldPopulation) spinner.getItemAtPosition(position);
                rank_TextView.setText("" + population.getRank());
                country_TextView.setText("" + population.getCountry());
                population_TextView.setText("" + population.getPopulation());
                url_TextView.setText("" + population.getFlag());
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        new DownloadData().execute();
    }


    private class DownloadData extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                worldPopulations = new ArrayList<>();
                URL url = new URL("http://www.androidbegin.com/tutorial/jsonparsetutorial.txt");
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.connect();
                String result = IOUtils.toString(httpURLConnection.getInputStream());
                System.out.println("" + result);
                JSONObject jsonObject = new JSONObject(result);
                JSONArray jsonArray = jsonObject.getJSONArray("worldpopulation");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject singleItem = jsonArray.getJSONObject(i);
                    WorldPopulation population = new WorldPopulation();
                    population.rank = singleItem.getString("rank");
                    population.country = singleItem.getString("country");
                    population.population = singleItem.getString("population");
                    population.flag = singleItem.getString("flag");
                    worldPopulations.add(population);
                }

                Log.d("TAG", "" + result);
                Log.d("TAG", "size: " + worldPopulations.size());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            ArrayAdapter<WorldPopulation> adapter = new ArrayAdapter<WorldPopulation>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, worldPopulations);
            adapter.setDropDownViewResource(android.R.layout.simple_list_item_1);
            spinner.setAdapter(adapter);
        }
    }

    class WorldPopulation {
        private String rank;
        private String country;
        private String population;
        private String flag;

        public String getRank() {
            return rank;
        }

        public void setRank(String rank) {
            this.rank = rank;
        }

        public String getCountry() {
            return country;
        }

        public void setCountry(String country) {
            this.country = country;
        }

        public String getPopulation() {
            return population;
        }

        public void setPopulation(String population) {
            this.population = population;
        }

        public String getFlag() {
            return flag;
        }

        public void setFlag(String flag) {
            this.flag = flag;
        }

        @Override
        public String toString() {
            return country;
        }
    }

}

活动加载数据.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="4dp"
    android:orientation="vertical">


    <Spinner
        android:id="@+id/LoadDataActivity_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_margin="4dp" />

    <TextView
        android:id="@+id/LoadDataActivity_rank_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/LoadDataActivity_country_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/LoadDataActivity_population_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/LoadDataActivity_url_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>

Output

Spinner1 Spinner2

现在您已将数据填充到Spinner您可以利用它来触发填充第二个spinner取决于第一个的选择spinner.

显然我没有看到任何链接可以告诉我第二个数据源,我将把答案留在这里直到下次更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据选择将 JSON 数据输入 Spinner 的相关文章

  • RecyclerView每隔几个项目都是相同的 - 可扩展项目

    我的 recyclerView 有问题 我正在使用此布局来扩展 recyclerView 中的 cardView https github com AAkira ExpandableLayout https github com AAkir
  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 如何增加 Gradle 守护进程的最大堆大小?

    签署 apk 时 我收到以下消息 To run dex in process the Gradle daemon needs a larger heap It currently has 1024 MB For faster builds
  • 在运行时绘制HSV圆

    我想在我的应用程序中有一个颜色选择器 如下所示 我尝试过逐像素填充位图 尝试使用画布drawArc 方法 这两种方式都不利于性能 有任何想法吗 它可能不完全是它应该的样子 与颜色 饱和度等有关 但是这是一些东西 http i1272 pho
  • ImageView Android 内存

    我原来的后续question https stackoverflow com questions 5339883 android app ram usage 有没有一种方法可以在 Android 应用程序中使用 ImageViews 而不使
  • 在 Android 上检测已接听的拨出电话

    我知道这个问题已经被问过很多次了 但没有答案 但我仍然希望有人终于解决了这个问题 问题 我有一台运行 Android 2 3 的未 root 设备 我需要创建一项服务 打电话 等待呼叫被应答 接听电话后挂断电话 有超时 和其他许多人一样 我
  • Android异步服务调用策略

    这是场景 客户端对服务进行远程调用 返回 void 并提供 回调对象 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 因为这些操作视觉元素 执行 Activity runOnUiThread 块 该场景运行良
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

    我有一个简单的 Android 应用程序 其中包含一个Activity and a Service源自于MediaBrowserServiceCompat 我已成功将其设置为通过使用播放我的主要活动中的音频MediaBrowserCompa
  • Android物理引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在研究了 3D 游戏编程之后 很快就明白了为什么物理引擎非常有用 Android 支持哪些物理引擎并且可以在 Android 上使用 关于
  • 带有内容提供商的小部件;无法使用ReadPermission?

    所以我刚刚为我的应用程序实现了一个小部件 它通过我的数据库从数据库获取数据ContentProvider 我在清单中定义了自己的读 写权限 声明我使用它们 似乎没有什么区别 并在内容提供程序中要求它们
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • 在一个react-native项目中使用谷歌地图和FCM

    I want to use google map and FCM in one react native project first I added FCM in project everything was okay but when I
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • android device.getUuids 返回 null

    我正在尝试使用低功耗蓝牙 BLE 通过 Android 应用程序连接到 Arduino Uno 我正在 Android Studio 上进行开发 使用 Samsung Galaxy S4 和 Android 版本 5 0 1 进行测试我点击
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获

随机推荐

  • C fread 未获取整个文件

    我正在尝试读取二进制文件并将内容存储到字符数组中 此功能对于文本文件非常有效 但对于非文本文件 例如 PNG 文件 它无法按预期工作 下面是代码和结果 怎么了 Code include
  • -[UITableView _endCellAnimationsWithContext: 中的断言失败:

    我充其量只是一个业余爱好者 并且陷入了这个错误 肯定是一些简单的事情 void addTapped id sender TechToolboxDoc newDoc TechToolboxDoc alloc initWithTitle New
  • 传单层 Z 索引

    我需要在传单层之间设置 z index 控制前景中的内容 这是可能的 例如使用bringToFront bringToBack 函数控制2 个 或更多 geoJson 层之间或2 个 或更多 ImageOverlay 层之间 L geoJs
  • 为什么 JSP/JSTL 除以 1000 有时会得到余数?

    当除以 1000 时 我有时会遇到一个不能 正确 除法的 bug 例如 当将 90 55 除以 1000 时 我得到的不是 0 09055 而是 0 090549999999
  • PhoneGap:可以仅使用phonegap.js,并且它的功能仅在网站中(不想要一个应用程序,只需要一个网页)?

    看来我还没有正确理解 PhoneGap 的工作原理 我想 采取一个索引 html 包括PhoneGap js in 作为 JavaScript 类型并在 iPad iPhone 上打开结果 但是 没有一个函数像加速度计 beep vibra
  • 如何在 PowerShell 中获取用户环境变量?

    I see here 可以在 Windows PowerShell 中点源脚本 如何获取用户的环境变量 或者保存用户变量的文件路径 示例 ps1 Environment SetEnvironmentVariable PATH C newap
  • 如何从Java反射中获取String字段的值?

    我有一个具有字符串字段的对象 我可以通过调用以下方式获取该字段 Field field someObj getClass getField strField 我设置了一个Field set Object 方法 用于设置此实例字段的值 但相应
  • Mac gcloud 安装导入错误:没有名为 __future__ 的模块

    安装 gcloud for mac 时 运行以下命令时出现此错误install sh根据文档命令here Traceback most recent call last File path to unzipped file google c
  • 使用 XSLT 1 根据另一个 xml 过滤 XML

    我们如何根据另一个 xml 文档过滤一个 xml 文档 我必须删除查找 xml 中不存在的所有元素 输入 xml 和查找 xml 具有相同的根元素 我们使用 XSLT 1 0 Ex Input
  • 如何在C#中获取倒数第二个字符串

    示例1 string input Village Siaban WDT no 39 91308 Semporna Sabah 示例2 string input Village Hw WDT no 39 91308 Sandakan Sara
  • 在循环中返回负结果

    我无法确定代码中的确切问题 我有两个功能 inrange 检查端口是否在范围内 以及filt 它接受一个 txt 文件 查找关键字 UDP 或 TCP 查看端口 紧接在 标记之后 并检查该数字是否在范围内 def inrange file
  • 即使构建步骤失败,如何继续 Jenkins 构建?

    我正在 Jenkins 中使用 Phing 构建脚本 并希望在作业中端到端运行它并捕获所有报告 问题是它停止在失败的构建步骤上进行构建 有没有一种方法或插件即使失败也能继续工作 Thanks 我对 Phing 不太了解 但是 由于它基于 A
  • 用于验证 Outlook 全局地址列表中找到的电子邮件地址的 VBA 代码

    问题描述 在将电子邮件发送到 Excel 中的可用 Outlook 电子邮件帐户列表之前 删除全局地址列表中未找到的非活动 非现有 电子邮件帐户 解决方案 运行 sql 查询从数据库中获取用户名或用户电子邮件 ID 步骤1 查询1 strS
  • 使用 nservicebus 延迟消息

    我正在处理 nServiceBus 我想在失败时重试并在另一时间发送一条消息 我听说过 Bus Defer 但我对它的理解有限 我有一个检查股票代码的系统 它会检查命令何时被调用 并在晚上 8 点之后重新安排另一次检查 我有 CheckCu
  • 如何使用 dplyr 过滤数据而不丢失 NA 行

    如何在 R 中对数据进行子集化而不丢失 NA 行 上面的帖子使用逻辑索引的子集 有没有办法在 dplyr 中做到这一点 Also dplyr什么时候自动删除NA 根据我的经验 当我过滤掉特定字符串时 它会删除 NA 例如 b a gt fi
  • LittleMonkey QRScanner 库构建问题

    我使用过littleMonkey QRScanner 库 但它可以在模拟器中工作 显示扫描仪不支持对话框 但是当我构建项目时它给出了构建错误 PS 我已经删除了所有构建提示并再次刷新库 但仍然存在同样的问题 我按照建议保留了 cn1 cod
  • 应用内结算,无法使 RESULT_DEVELOPER_ERROR 消失

    我正在尝试在 Android 上进行应用内计费 但 在尝试初始化事务时不断获得以下 logcat 输出 from logcat BillingService Billing service connected CheckBillingSup
  • python 正则表达式不匹配序列

    我需要用 HTML 标签包装一些 MathJax 字符串 我想知道如何排除 从搜索字符串不匹配完整字符串 使用单个字符很容易 例如 但是当我需要做同样的事情时该怎么办 例如两个字符相继出现 search str ce sigma s b H
  • scala 不明确支持依赖类型的任何原因?

    有路径依赖类型 我认为在 Scala 中可以表达 Epigram 或 Agda 等语言的几乎所有功能 但我想知道为什么 Scala 不支持this更明确地说 它在其他领域 例如 DSL 做得很好 我错过了什么 比如 没有必要 吗 除了语法便
  • 根据选择将 JSON 数据输入 Spinner

    Data is coming form JSON RESPONSE In JSON Every Tag contains number of nodes Relevant data into second spinner is based