json值,并在android中显示除AutoCompleteTextView之外的edittext

json值,并在android中显示除AutoCompleteTextView之外的edittext,android,android-activity,Android,Android Activity,主类为国家代码及其对应的值制作,已经使用hashmap,除了AutoCompleteTextView还有其他更好的方法吗 原始json文件{“国家”:{“国家”:[{“7840”:0.1565},{“7940”:0.0497},{“79407”:0.1487},{“79409”:0.1487}中的示例json值 public类MainActivity扩展了AppCompatActivity{ //私有字符串mSource=“[{\'7840\':0.1565},{\'7940\':0.0497}

主类为国家代码及其对应的值制作,已经使用hashmap,除了AutoCompleteTextView还有其他更好的方法吗

原始json文件{“国家”:{“国家”:[{“7840”:0.1565},{“7940”:0.0497},{“79407”:0.1487},{“79409”:0.1487}中的示例json值

public类MainActivity扩展了AppCompatActivity{
//私有字符串mSource=“[{\'7840\':0.1565},{\'7940\':0.0497},{\'79407\':0.1487}]”;
private List mcountrycode=new ArrayList();
私有自动完成文本视图mEtKey;
私有编辑值;
私人住宅;
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parseJson();
initViews();
}
私有void initViews(){
mEtKey=(AutoCompleteTextView)findviewbyd(R.id.etKey);
mAdapter=新的CountryAdapter(此为mCountryCodes);
mEtKey.setAdapter(mAdapter);
试一试{
mEtKey.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
mEtValue.setText(((CountryCode)parent.getAdapter().getItem(position)).getValue());
//int value=Integer.parseInt(((CountryCode)parent.getAdapter().getItem(position)).getValue());
//值=值/1;
//mEtValue.setText(String.valueOf(value));
}
});
}捕获(例外情况除外)
{ex.printStackTrace();};
mEtValue=(EditText)findViewById(R.id.etValue);
}
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
私有void parseJson(){
InputStream InputStream=getResources().openRawResource(R.raw.rates);
ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();
国际中心;
试一试{
ctr=inputStream.read();
而(ctr!=-1){
byteArrayOutputStream.write(ctr);
ctr=inputStream.read();
}
inputStream.close();
}捕获(IOE异常){
e、 printStackTrace();
}
Log.v(“文本数据”,byteArrayOutputStream.toString());
试一试{
//将数据解析为jsonobject,以json的形式获取原始数据。
JSONObject jObject=新的JSONObject(
byteArrayOutputStream.toString());
JSONObject jObjectResult=jObject.getJSONObject(“国家”);
JSONArray jArray=jObjectResult.getJSONArray(“国家”);
字符串jsonStr=jArray.toString();
试一试{
JSONArray条目=新的JSONArray(jsonStr);
对于(int i=0;i
Country ADAPTER——用于从原始文件获取值的适配器活动,这是另一个用于生成适配器和动态获取值的活动

public class CountryAdapter extends BaseAdapter implements Filterable {

    Context mContext;
    List<CountryCode> mItems, mTempItems, mSuggestions;
    /**
     * Custom Filter implementation for custom suggestions we provide.
     */
    Filter dialFilter = new Filter() {
        @Override
        public CharSequence convertResultToString(Object resultValue) {
            String str = ((CountryCode) resultValue).getKey();
            return str;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            if (constraint != null) {
                mSuggestions.clear();
                for (CountryCode code : mTempItems) {
                    // First match against the whole, non-splitted value
                    if (code.getKey().startsWith(constraint.toString())) {
                        mSuggestions.add(code);
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = mSuggestions;
                filterResults.count = mSuggestions.size();
                return filterResults;
            } else {
                return new FilterResults();
            }
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            List<CountryCode> filterList = (ArrayList<CountryCode>) results.values;
            if (results != null && results.count > 0) {
                if (mSuggestions == null) {
                    mSuggestions = new ArrayList<>();
                }
                notifyDataSetChanged();
            }
        }
    };

    public CountryAdapter(Context context, List<CountryCode> objects) {
        this.mContext = context;
        this.mItems = objects;
        mTempItems = new ArrayList<CountryCode>(mItems);
        mSuggestions = new ArrayList<CountryCode>();
    }

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

    @Override
    public CountryCode getItem(int position) {
        return mSuggestions.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.lyt_item, parent, false);
        }
        CountryCode code = mSuggestions.get(position);
        if (code != null) {
            TextView lblName = (TextView) view.findViewById(R.id.lbl_key);
            TextView lblValue = (TextView) view.findViewById(R.id.lbl_value);

            lblName.setText(code.getKey());
            lblValue.setText(code.getValue());
        }
        return view;
    }

    @Override
    public Filter getFilter() {
        return dialFilter;
    }
}
公共类CountryAdapter扩展BaseAdapter实现可过滤{
语境;
列出MITEM、MTEMP项目、M建议;
/**
*我们提供的自定义建议的自定义筛选器实现。
*/
过滤器拨号过滤器=新过滤器(){
@凌驾
public CharSequence ConvertResultString(对象结果值){
字符串str=((CountryCode)resultValue.getKey();
返回str;
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
if(约束!=null){
mSuggestions.clear();
对于(国家代码:mTempItems){
//第一次匹配整个非拆分值
if(code.getKey().startsWith(constraint.toString())){
mSuggestions.add(代码);
}
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=m建议;
filterResults.count=mSuggestions.size();
返回过滤器结果;
}否则{
返回新的FilterResults();
}
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
List filterList=(ArrayList)results.values;
if(results!=null&&results.count>0){
if(mSuggestions==null){
mSuggestions=newarraylist();
}
notifyDataSetChanged();
}
}
};
公共CountryAdapter(上下文、列表对象){
this.mContext=上下文;
this.mItems=对象;
mTempItems=新阵列列表(mItems);
mSuggestions=newarraylist();
}
@凌驾
public int getCount(){
返回mSuggestions.size();
}
@凌驾
公共国家代码getItem(内部位置){
返回mSuggestions.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公众视野
public class CountryAdapter extends BaseAdapter implements Filterable {

    Context mContext;
    List<CountryCode> mItems, mTempItems, mSuggestions;
    /**
     * Custom Filter implementation for custom suggestions we provide.
     */
    Filter dialFilter = new Filter() {
        @Override
        public CharSequence convertResultToString(Object resultValue) {
            String str = ((CountryCode) resultValue).getKey();
            return str;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            if (constraint != null) {
                mSuggestions.clear();
                for (CountryCode code : mTempItems) {
                    // First match against the whole, non-splitted value
                    if (code.getKey().startsWith(constraint.toString())) {
                        mSuggestions.add(code);
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = mSuggestions;
                filterResults.count = mSuggestions.size();
                return filterResults;
            } else {
                return new FilterResults();
            }
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            List<CountryCode> filterList = (ArrayList<CountryCode>) results.values;
            if (results != null && results.count > 0) {
                if (mSuggestions == null) {
                    mSuggestions = new ArrayList<>();
                }
                notifyDataSetChanged();
            }
        }
    };

    public CountryAdapter(Context context, List<CountryCode> objects) {
        this.mContext = context;
        this.mItems = objects;
        mTempItems = new ArrayList<CountryCode>(mItems);
        mSuggestions = new ArrayList<CountryCode>();
    }

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

    @Override
    public CountryCode getItem(int position) {
        return mSuggestions.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.lyt_item, parent, false);
        }
        CountryCode code = mSuggestions.get(position);
        if (code != null) {
            TextView lblName = (TextView) view.findViewById(R.id.lbl_key);
            TextView lblValue = (TextView) view.findViewById(R.id.lbl_value);

            lblName.setText(code.getKey());
            lblValue.setText(code.getValue());
        }
        return view;
    }

    @Override
    public Filter getFilter() {
        return dialFilter;
    }
}