从服务器上获取api接口数据 生成实体类并显示在listview或TextView中

来源:互联网 发布:数据库培训中心 编辑:程序博客网 时间:2024/05/16 05:47

从服务器上获取api接口数据 生成实体类并显示在listview或TextView中

第一次写博客。。。。见识短浅。有什么错误的地方只能等以后知识学多了回来改正。
我先晒个成果图哈

第一步 下载软件

     首先去下载postman和JsonCSharpClassGenerator这两个软件,如果你经常要从服务器上获取数据的话,那么这两个软件你值得拥有!这里我贴上百度云代码
postman:http://pan.baidu.com/s/1hsrHvG4     JsonCSharpClassGenerator :http://pan.baidu.com/s/1gf5W4qJ

第二步 使用软件

那么怎么用它们呢。
我先推荐两个能免费获取api的网站:1.聚合数据:https://www.juhe.cn/ 这个网站普通用户只能申请一个api
2.阿凡达数据:http://www.avatardata.cn/这个网站普通用户可以申请多个api 但是每天使用次数会被限制 我就用这个作为例子。
你可以申请数据 我申请了号码吉凶


点击接口 可以查看接口地址请求参数






接下来 你就要用到postman
将请求示例那段地址复制粘贴到postman中并点击send按钮



可以看到返回的json结果 接下来就要用到JsonCSharpClassGenerator 安装包下载完双击解压缩里面的应用程序

将刚刚postman中得到的json结果复制粘贴到JsonCSharpClassGenerator左下方的白色方框中,System选择android,Target folder是指待会生成的实体类存放的位置,我选择了桌面的新建文件夹,然后点击Load按钮。

再点击Generate按钮就在桌面的新建文件夹中生成了MainClass和Result两个实体类。
那么实体类显示出来了 到底怎么用呢
接下来你需要在项目中新建两个类 然后把刚刚生成的类里面的内容复制进去,至于为什么不直接把两个类复制进项目中,是因为我这样做过 但是运行的时候出现什么字符错误 然后目前我还没解决 但是把两个类类名里的内容复制到新建类中就不会出现这个问题。
这些工作完成后下面要解决的是怎么把获得到的内容显示在你想要显示的控件上。
首先写一个方法用来处理服务器返回的数据,把它封装成实体类,其中Number.class就是刚刚生产的MainClass.class,这个方法要求返回Number对象,。
public static Number handleNumberResponse(String response){        try {            JSONObject jsonObject=new JSONObject(response);            return new Gson().fromJson(jsonObject.toString(),Number.class);        }catch (Exception e){e.printStackTrace();}        return null;    }

 下面就要从服务器申请数据你申请的key并显示在textview中。

private void queryFromServer(String  keyword){        String address="http://v1.avatardata.cn/JiXiong/LookUp";//接口地址        HttpUrl.Builder urlBuilder=HttpUrl.parse(address).newBuilder();        urlBuilder.addQueryParameter("keyword",keyword);        urlBuilder.addQueryParameter("key","你申请的key");        Util.sendOkHttpRequest(urlBuilder.build().toString(), new Callback() {            @Override            public void onFailure(Call call, IOException e) {                e.printStackTrace();                Toast.makeText(getActivity(), "测试失败", Toast.LENGTH_SHORT).show();            }            @Override            public void onResponse(Call call, Response response) throws IOException {                final String responseText=response.body().string();                Log.e("返回结果:",responseText);               final  Number n=Utility.handleNumberResponse(responseText);//调用刚刚的handleNumberResponse方法解析服务器返回的数据包装成实体类                getActivity().runOnUiThread(new Runnable() {                    @Override                    public void run() {                        linearLayout.setVisibility(View.VISIBLE);                        numberText.setText("号码:"+editNumber.getText());                        numberContent.setText(n.getResult().getShuli()+"("+n.getResult().getYunshi()+")"+"\n"                        +"含义:"+n.getResult().getHanyi()+"\n"+"简述:"+n.getResult().getJianshu()+"\n"+"基业:"+                        n.getResult().getJiye()+"\n"+"家庭:"+n.getResult().getJiating()+"\n"+"健康:"+n.getResult().getJiankang()                                +"\n"+"详解:"+n.getResult().getXiangjie());                    }                });            }        });    }
















阅读全文
1 0
原创粉丝点击