XML一个按钮,用来吐司网络获取的json数据;
一个网络请求类,用来封装两个方法一个是判断网络,一个是请求的类型(GET));
public static boolean isNetWork(Context context) {
if (context != null) {
//获取管理器
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if (info != null) {
//返回 网络可用
return info.isAvailable();
}
}
//网络不可用
return false;
}
上面是判断网络,返回网络的状态;
这个是请求的类型还有,一些设置 拼接字符串;
public static String HttpGet(String strUrl){
try {
//调用方法时,输入的接口
URL url = new URL(strUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置为get请求
connection.setRequestMethod("GET");
//设置连接主机超时时间
connection.setConnectTimeout(5000);
//设置从主机读取数据超时
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
//获取请求码 200 300 400 404等 200是网络成功
if (code == 200) {
//字符串拼接 可以用其他方法
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
StringBuffer buffer = new StringBuffer();
String str = "";
while ((str = reader.readLine()) != null) {
buffer.append(str);
}
//返回拼接的字符串
return buffer.toString();
}
//释放connection占用的内存
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
这里如果没有权限会报错;
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这个方法类,我们已经写好了,下面是按钮点击要开启一个线程
new Thread(){
@Override
public void run() {
super.run();
//在这里写耗时操作(请求网络数据)
boolean networkConnected = Http.isNetworkConnected(MainActivity.this);
//判断有没有网
if (networkConnected){
//有网就请求数据
// 双引号是接口的地址 写好Bean类
String get = Http.requestHttpGet("");
//Gson解析 记得导包
Gson gson=new Gson();
JsonBean bean = gson.fromJson(get, JsonBean.class);
//把数据传递给主线程
Message message=new Message();
message.what=0;
message.obj=bean;
handler.sendMessage(message);
}else{
handler.sendEmptyMessageDelayed(1,0);
}
}
//注意 线程启动
}.start();
Handler
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
JsonBean bean= (JsonBean) msg.obj;
Toast.makeText(MainActivity.this,""+bean.toString(),Toast.LENGTH_LONG).show();
break;
case 1:
//没网就提示用户 没网
Toast.makeText(MainActivity.this,"没网",Toast.LENGTH_LONG).show();
break;
}
}
};