前面一篇说完来页面布局,总得来说页面在adapter中设置布局,ListView.setAdapter(Adapter)来加载视图样子。接下来就看看网络通信这一部分
新建一个网络通信类HttpUtils,在里面写网络请求和处理
首先定义一个getNewsJson方法,实现从数据库读取数据并得到的JSON数据。新开一个线程来处理,因为不能在主线程处理网络请求,因为一旦请求时间长一点有可能就导致主线程卡死了,停止运行,所以要新开线程,这一点在线程那也说过。网络通信 我们使用HTTP来访问网络,HttpURLConnection继承URLConnection操作Http方便快捷
具体步骤:
1.创建URL对象,并且通过url.openConnection()来连接网络
2.设置请求方式为GET,POST用于数据提交
3.返回HttpURLConnection对应的输入流,获取响应内容
这里用到的是getInputStream(),对应的getOutputStream()是返回输出流,用于向HttpURLConnection发送请求参数
4.定义BufferedReader输入流读取URL响应
5.定义StringBuilder来将读取结果添加在一起形成String
6.用handler.sendMessage()将响应内容发给主线程 ,通知主线程更新
前面也提到了,像时间啊标题之类的都可以直接从数据库获取,但是图片需要网络请求,所以我们在网络请求类中需要加上图片的处理
我们写一个setBitmap()方法,来实现从网络链接中获取图片并显示
前面步骤相同,值得说的是BitmapFactory是一个工具类,有大量可以从不同数据源解析创建Bitmap对象,其中decodeStream(InputStream is)用于从指定输入流解析创建Bitmap对象
<pre name="code" class="plain">package com.news;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by Administrator on 2016-08-25.
*/
public class HttpUtils {
public static void getNewsJson(final String url,final Handler handler){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection conn;