HttpURLConnection获得网络数据(Gson应用)

通过慕课网的三个接口:

http://www.imooc.com/api/teacher?type=1

http://www.imooc.com/api/teacher?type=2

http://www.imooc.com/api/teacher?type=3&cid=1 (这个链接需要用到上面链接中data的id)

实现的功能具体为:

MainActivity点击慕课(TextView)


将会把一下的信息更新到UI界面上(DetailActivity)

如下



Gson需要在AndroidStudio添加Dependancies

具体的用法如下:

1.JSONObject

Gson gson = new Gson();
                        String data = job.getString("data");          
                        Article article = gson.fromJson(data, Article.class);
2.JSONArray

 Gson gson = new Gson();
                        //参数1:满足Json数组的字符串
                        //参数2:Type对象泛型将决定json字符串最后被转化成的类型
                        ArrayList<Outline> outlines = gson
                                .fromJson(data, new TypeToken<ArrayList<Outline>>(){}.getType());

具体的代码为

MainActivity.java

public class MainActivity extends Activity {
    private TextView mooc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        new Thread(){
            @Override
            public void run() {
                try {
                    URL url = new URL("http://www.imooc.com/api/teacher?type=2");
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    con.setRequestMethod("GET");
                    con.setReadTimeout(6000);
                    if(con.getResponseCode() == 200){
                        InputStream is = con.getInputStream();
                        byte[] buf = new byte[1024 * 512];
                        int len = 0;
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        while ((len = is.read(buf)) > -1) {
                            baos.write(buf, 0, len);
                        }
                        String result = baos.toString();
                        Log.e("TAG", result);
                        String data = new JSONObject(result).getString("data");
                        Gson gson = new Gson();
                        //参数1:满足Json数组的字符串
                        //参数2:Type对象泛型将决定json字符串最后被转化成的类型
                        ArrayList<Outline> outlines = gson
                                .fromJson(data, new TypeToken<ArrayList<Outline>>(){}.getType());
                        //通过Log具体输出data信息
                        for(int i = 0; i < outlines.size(); i++){
                            Outline outline = outlines.get(i);
                            Log.e("TAG", outline.getId()
                                    + " " + outline.getLearner()
                                    + " " + outline.getPicBig()
                                    + " " + outline.getDescription());
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    private void initView() {
        mooc = (TextView) findViewById(R.id.mooc_title);
        mooc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, DetailActivity.class));
            }
        });
    }
}

DetailActivity.java

public class DetailActivity extends Activity{
        private TextView titleView, authorView, contentView;
        Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Article a = (Article) msg.obj;
                titleView.setText(a.getTitle());
                authorView.setText(a.getAuthor());
                contentView.setText(a.getContent());
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_detail);
            initView();
            initData();
        }

    private void initView() {
        titleView = (TextView) findViewById(R.id.article_title);
        authorView = (TextView) findViewById(R.id.article_author);
        contentView = (TextView) findViewById(R.id.article_content);
    }

    private void initData() {
        //网络请求不能在主线程中操作
        new Thread() {
            @Override
            public void run() {
                try {
                    //创建URL
                    URL url = new URL("http://www.imooc.com/api/teacher?type=3&cid=1");
                    //获取HttpURLConnection
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    con.setRequestMethod("GET");
                    con.setReadTimeout(6000);

                    if(con.getResponseCode() == 200){
                        //将输入流转换为得到的输出流
                        InputStream is = con.getInputStream();
                        byte[] buf = new byte[1024 * 512];
                        int len = 0;
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        while ((len = is.read(buf)) > -1) {
                            baos.write(buf, 0, len);
                        }
                        String result = baos.toString();
                        Log.e("TAG", result);
                        //创建JSONObject获取status
                        JSONObject job = new JSONObject(result);
                        int status = job.getInt("status");
                        //创建Gson,fromJson方法需传入
                        Gson gson = new Gson();
                        String data = job.getString("data");
                        //Article类封装data中数据
                        Article article = gson.fromJson(data, Article.class);
                        String msg = job.getString("msg");
                        //Log.e("TAG", status + "  " + msg);
                        //将获得的Article放到Message的obj中,因为更新UI要在主线程中
                        Message message = handler.obtainMessage();
                        message.obj = article;
                        handler.sendMessage(message);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }.start();

    }
}


需要注意的是还有两个类(Article, Outline)具体是将data字段数据封装

如下图:

具体字段为下图的数据,Outline类同理(Outline封装的第二个接口的data字段)



通过HttpURLConnection,Json,Gson的用法实现了基本的GET请求。

具体的应用还需要完善。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值