从服务器获取字典值并展示在界面

一:从服务器获取字典值并保存

  1:创建一个实体类Dict,dictCode用于保存字典值,dictName用于保存字典名称

package com.example.test;

public class Dict {
    
    public String dictCode;
    
    public String dictName;

    public String getDictCode() {
        return dictCode;
    }

    public void setDictCode(String dictCode) {
        this.dictCode = dictCode;
    }

    public String getDictName() {
        return dictName;
    }

    public void setDictName(String dictName) {
        this.dictName = dictName;
    }
}

  2:模拟从服务器获取的字典值

        /**
         *
         * dict_code:字典值
         * dict_name:字典名称
         * tp_code:字典编码
         * cancel_status:启用状态(-1作废,0启用)
         *
         */
        List<Map<String, String>> list = new ArrayList<>();
        Map<String, String> map1 = new HashMap<>();
        map1.put("dict_code", "1");
        map1.put("dict_name", "北京");
        map1.put("tp_code", "site");
        map1.put("cancel_status", "0");
        list.add(map1);
        Map<String, String> map2 = new HashMap<>();
        map2.put("dict_code", "2");
        map2.put("dict_name", "上海");
        map2.put("tp_code", "site");
        map2.put("cancel_status", "0");
        list.add(map2);
        Map<String, String> map3 = new HashMap<>();
        map3.put("dict_code", "3");
        map3.put("dict_name", "南京");
        map3.put("tp_code", "site");
        map3.put("cancel_status", "-1");
        list.add(map3);
        Map<String, String> map4 = new HashMap<>();
        map4.put("dict_code", "4");
        map4.put("dict_name", "武汉");
        map4.put("tp_code", "site");
        map4.put("cancel_status", "0");
        list.add(map4);
        Map<String, String> map5 = new HashMap<>();
        map5.put("dict_code", "5");
        map5.put("dict_name", "深圳");
        map5.put("tp_code", "site");
        map5.put("cancel_status", "-1");
        list.add(map5);
        Map<String, String> map6 = new HashMap<>();
        map6.put("dict_code", "0");
        map6.put("dict_name", "是");
        map6.put("tp_code", "yesOrNo");
        map6.put("cancel_status", "0");
        list.add(map6);
        Map<String, String> map7 = new HashMap<>();
        map7.put("dict_code", "1");
        map7.put("dict_name", "否");
        map7.put("tp_code", "yesOrNo");
        map7.put("cancel_status", "0");
        list.add(map7);
        Map<String, String> map8 = new HashMap<>();
        map8.put("dict_code", "1");
        map8.put("dict_name", "晴天");
        map8.put("tp_code", "weather");
        map8.put("cancel_status", "0");
        list.add(map8);
        Map<String, String> map9 = new HashMap<>();
        map9.put("dict_code", "4");
        map9.put("dict_name", "阴天");
        map9.put("tp_code", "weather");
        map9.put("cancel_status", "0");
        list.add(map9);
        Map<String, String> map10 = new HashMap<>();
        map10.put("dict_code", "5");
        map10.put("dict_name", "雨天");
        map10.put("tp_code", "weather");
        map10.put("cancel_status", "0");
        list.add(map10);
        Log.e("从服务器获取的字典", list.toString());
        for (int i = 0; i < list.size(); i++) {
            Log.e("从服务器获取的字典", list.get(i).toString());
        }

结果

E/从服务器获取的字典: [{dict_name=北京, cancel_status=0, tp_code=site, dict_code=1}, {dict_name=上海, cancel_status=0, tp_code=site, dict_code=2}, {dict_name=南京, cancel_status=-1, tp_code=site, dict_code=3}, {dict_name=武汉, cancel_status=0, tp_code=site, dict_code=4}, {dict_name=深圳, cancel_status=-1, tp_code=site, dict_code=5}, {dict_name=是, cancel_status=0, tp_code=yesOrNo, dict_code=0}, {dict_name=否, cancel_status=0, tp_code=yesOrNo, dict_code=1}, {dict_name=晴天, cancel_status=0, tp_code=weather, dict_code=1}, {dict_name=阴天, cancel_status=0, tp_code=weather, dict_code=4}, {dict_name=雨天, cancel_status=0, tp_code=weather, dict_code=5}]

E/从服务器获取的字典: {dict_name=北京, cancel_status=0, tp_code=site, dict_code=1}
E/从服务器获取的字典: {dict_name=上海, cancel_status=0, tp_code=site, dict_code=2}
E/从服务器获取的字典: {dict_name=南京, cancel_status=-1, tp_code=site, dict_code=3}
E/从服务器获取的字典: {dict_name=武汉, cancel_status=0, tp_code=site, dict_code=4}
E/从服务器获取的字典: {dict_name=深圳, cancel_status=-1, tp_code=site, dict_code=5}
E/从服务器获取的字典: {dict_name=是, cancel_status=0, tp_code=yesOrNo, dict_code=0}
E/从服务器获取的字典: {dict_name=否, cancel_status=0, tp_code=yesOrNo, dict_code=1}
E/从服务器获取的字典: {dict_name=晴天, cancel_status=0, tp_code=weather, dict_code=1}
E/从服务器获取的字典: {dict_name=阴天, cancel_status=0, tp_code=weather, dict_code=4}
E/从服务器获取的字典: {dict_name=雨天, cancel_status=0, tp_code=weather, dict_code=5}

  3:将从服务器获取到的字典值保存下来

        //将从服务器获取到的字典全部保存下来
        Map<String, List<Dict>> maps = new HashMap<>();
        for (Map<String, String> m : list) {
            List<Dict> lists = new ArrayList<>();
            Dict dict = new Dict();
            dict.setDictCode(m.get("dict_code"));
            dict.setDictName(m.get("dict_name"));
            if (maps.containsKey(m.get("tp_code"))) {
                lists = maps.get(m.get("tp_code"));
                lists.add(dict);
            } else {
                lists.add(dict);
            }
            maps.put(m.get("tp_code"), lists);
        }
        Map mapDict1 = setMapDict(maps);
        Log.e("获取的全部字典", mapDict1.toString());

        // 保存启用状态的字典值
        Map<String, List<Dict>> map_enable = new HashMap<>();
        for (Map<String, String> m : list) {
            List<Dict> lists = new ArrayList<>();
            Dict dict = new Dict();
            if (m.get("cancel_status").equals("0")) {
                dict.setDictCode(m.get("dict_code"));
                dict.setDictName(m.get("dict_name"));
                if (map_enable.containsKey(m.get("tp_code"))) {
                    lists = map_enable.get(m.get("tp_code"));
                    lists.add(dict);
                } else {
                    lists.add(dict);
                }
                map_enable.put(m.get("tp_code"), lists);
            }
        }
        Map mapDict2 = setMapDict(map_enable);
        Log.e("获取的启用字典", mapDict2.toString());
创建setMapDict()方法将字典转为Map<String, Map<String, String>>类型存储
    /**
     * @param maps 从服务器获取到的保存字典的map集合
     * @methord 将字典转为Map<String, Map<String, String>>类型存储
     */
    private Map<String, Map<String, String>> setMapDict(Map<String, List<Dict>> maps) {
        Map dict = new HashMap();
        for (Map.Entry<String, List<Dict>> entry: maps.entrySet()
             ) {
            List<Dict> d = entry.getValue();
            Map map = new HashMap();
            for (int i = 0; i < d.size(); i++) {
                map.put(d.get(i).getDictCode(), d.get(i).getDictName());
            }
            dict.put(entry.getKey(), map);
        }
        return dict;
    }

结果

E/获取的全部字典: {site={1=北京, 2=上海, 3=南京, 4=武汉, 5=深圳}, weather={1=晴天, 4=阴天, 5=雨天}, yesOrNo={0=是, 1=否}}

E/获取的启用字典: {site={1=北京, 2=上海, 4=武汉}, weather={1=晴天, 4=阴天, 5=雨天}, yesOrNo={0=是, 1=否}}

二:调用保存下来的字典值展示在界面上

  1:activity_main.xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/site_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Spinner
        android:id="@+id/yesOrNo_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Spinner
        android:id="@+id/weather_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

2:创建自定义适配器SpinnerArrayAdapter

package com.example.test;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class SpinnerArrayAdapter extends BaseAdapter {
    private Context context;
    private List<Dict> list;

    public SpinnerArrayAdapter(Context context, List<Dict> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Text text = null;
        if (convertView == null) {
            text = new Text();
            LayoutInflater inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(R.layout.list_spinner, null);
            text.text_code = convertView.findViewById(R.id.text_code);
            text.text_name = convertView.findViewById(R.id.text_name);
            convertView.setTag(text);
        } else {
            text = (Text) convertView.getTag();
        }
        text.text_code.setText(list.get(position).getDictCode());
        text.text_name.setText(list.get(position).getDictName());
        return convertView;
    }

    class Text{
        TextView text_code;
        TextView text_name;
    }
}

3:自定义下拉框的布局list_spinner

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:layout_marginLeft="10dp"/>
    <TextView
        android:id="@+id/text_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"/>
</LinearLayout>

4:MainActivity调用

        Spinner site_spinner = findViewById(R.id.site_spinner);
        Spinner yesOrNo_spinner = findViewById(R.id.yesOrNo_spinner);
        Spinner weather_spinner = findViewById(R.id.weather_spinner);

        SpinnerArrayAdapter adapter1 = new SpinnerArrayAdapter(this, map_enable.get("site"));
        site_spinner.setAdapter(adapter1);

        SpinnerArrayAdapter adapter2 = new SpinnerArrayAdapter(this, map_enable.get("yesOrNo"));
        yesOrNo_spinner.setAdapter(adapter2);

        SpinnerArrayAdapter adapter3 = new SpinnerArrayAdapter(this, map_enable.get("weather"));
        weather_spinner.setAdapter(adapter3);

运行结果

 

 

 三:获取选择的下拉框项及其对应的字典值

 Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String dict_code1 = ((Dict)site_spinner.getSelectedItem()).getDictCode();
                String dict_name1 = ((Dict)site_spinner.getSelectedItem()).getDictName();
                String dict_code2 = ((Dict)yesOrNo_spinner.getSelectedItem()).getDictCode();
                String dict_name2 = ((Dict)yesOrNo_spinner.getSelectedItem()).getDictName();
                String dict_code3 = ((Dict)weather_spinner.getSelectedItem()).getDictCode();
                String dict_name3 = ((Dict)weather_spinner.getSelectedItem()).getDictName();
                Toast.makeText(MainActivity.this, "您选择的是" + dict_code1 + dict_name1 + "," + dict_code2 + dict_name2 + "," + dict_code3 + dict_name3, Toast.LENGTH_LONG).show();
            }
        });

结果

    用这种方法获取到的字典值作为下拉框数据源时与下拉框的下标值无关,从服务器获取到的字典值是多少提交的时候获取到的就是多少

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qxnedy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值