(1)网络状态:

ConnectivityManager负责管理所有连接的服务(如:系统服务,3G/4G,WiFi,蓝牙等)。查看网络状态的类是NetWorkInfo,它是通过ConnectivityManager来获得,可以用来检测当前网络类型,当前网络状态。网络状态在一下场景需要使用,界面上需要表述当前的网络状态,根据不同的网络状态来处理逻辑,需要判断网络情况来开启服务。下面以一个demo来说明

package com.example.connectivitymanagerdemo;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { private Button btn;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tv=(TextView) findViewById(R.id.textView1);
btn=(Button) findViewById(R.id.button1); btn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
//获取连接管理实例
ConnectivityManager cm=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//获得一个激活的网络连接实例
NetworkInfo ni=cm.getActiveNetworkInfo();
if(ni==null){
tv.setText("网络没有激活,请打开网络");
}else{
if(ni.getState().equals(NetworkInfo.State.CONNECTED)){
tv.setText("网络已经连接");
}else{
tv.setText("网络没有连接");
}
}
}
});
} }

(2)网络数据的获取HttpURLConnection的使用

我们可以如同对文件的读写来操作网络的访问,通过InputStream流来获取数据,通过OutputStream来发送数据

HttpURLConnection可以用来接受和发送数据:通过HttpURLConnection实例调用getInputStream()可以获得inputStream

创建URL : URL url=new URL(Web_URL);

创建HttpURLConnection连接: connection=(HttpURLConnection)url.openConnection();

添加网络权限:<uses-permission android:name="android.permission.INTERNET"/>

网络访问总是存在阻塞的可能:需要放到主线程之外去访问,否则会抛出异常

HttpURLConnection创建好了以后,就可以使用该对象的发送Http请求了,Http请求通常分为get请求和Post请求,采用get请求只适合发送大小在1024个字节以内的数据,当要发送较大的数据时,就需要使用Post方式来发送请求。HttpURLConnection对象发送Http请求时候,默认的是get请求,使用post来发送请求的时候要使用setRequestMethod()方法进行指定Http请求方式

(3)使用Apache组织提供的HttpClient来实现网络的访问,其使用方法,和HttpURLConnection类似。下面以一个demo来简单说明实现方式

package com.example.httpconnectiondemo;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { static final String StringUrl = "http://www.weather.com.cn/data/sk/101010100.html"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
MyAsyncTask task = new MyAsyncTask();
task.execute();
}
});
} class MyAsyncTask extends AsyncTask<Void, Void, String> { @Override
protected String doInBackground(Void... params) {
try {
// 建立url
// URL url = new URL(StringUrl);
// 获得连接
// HttpURLConnection con = (HttpURLConnection)
// url.openConnection();
// 获取输入流
// InputStream is = con.getInputStream(); // 通过HttpClient的方式来获取数据
HttpGet get = new HttpGet(StringUrl);
HttpClient client = new DefaultHttpClient();
HttpResponse res = client.execute(get);
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
InputStream is = res.getEntity().getContent();
StringBuffer sb = new StringBuffer();
int c = 0;
while ((c = is.read()) != -1) {
sb.append((char) c);
}
return sb.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(result);
} }
}

(4)使用webVIew组件浏览网页,可以使用webView和javaScript进行交互,下面以一个实例来说明javaScript和webview的交互过程

首先在assert文件夹下面穿件一个html文件,文件代码如下:

<input type="button" value="button" onClick="showJavaToast('hello,word')"/>
<script type="text/javascript">
function showJavaToast(toast){
Android.showMyToast(toast);
}
</script>

这里的Android.showMyToast(toast)是调用的android里面自己写好的接口里的方法

在src中添加一个javascript的类,文件代码如下:

package com.example.webview_javascript_demo;

import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast; public class Myjavascript {
private Context context; public Myjavascript(Context context) {
this.context = context;
} @JavascriptInterface //api17 以上一定要加这句话,才可以识别它可以用作javascript中
public void showMyToast(String toast) {
Toast.makeText(context, toast, 2000).show();
}
}

最后在住界面代码中使用webView和javaScript进行交互代码如下

package com.example.webview_javascript_demo;

import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast; public class Myjavascript {
private Context context; public Myjavascript(Context context) {
this.context = context;
} @JavascriptInterface //api17 以上一定要加这句话,才可以识别它可以用作javascript中
public void showMyToast(String toast) {
Toast.makeText(context, toast, 2000).show();
}
}

最终实现效果如下:

Android网络笔记的更多相关文章

  1. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  2. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  3. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  4. Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  5. Android开发笔记:打包数据库

    对于数据比较多的控制一般会加入SQLite数据库进行数据存储,在打包时这些数据库是不自动打包到apk中的,如何创建数据库呢 方法1:将创建数据库的sql语句在SQLiteHelper继承类中实现,在第 ...

  6. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  7. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  8. udacity android 实践笔记: lesson 4 part b

    udacity android 实践笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  9. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

随机推荐

  1. 第三十二章、使用splitDockWidget和tabifyDockWidget嵌套布局QDockWidget的PyQt人机对话案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在第<第三十一章.containers容器类部件QDo ...

  2. 第十三章 Python基础篇结束章

    从2019年3月底开始学习Python,4月份开始在CSDN发博客,至今不到半年,老猿认为博客内容中关于Python基础知识的内容已经基本告一段落,本章进入Python基础知识结束章节,对Python ...

  3. PyQt学习随笔:槽函数获取信号发送对象的方法

    在PyQt中,相似控件发送的信号可以每个控件信号对应一个槽函数,也可以将相似控件的相同信号对应到一个槽函数,但如果槽函数相同,怎么区分信号是谁发送的呢?那就是在信号函数中使用sender()函数获取信 ...

  4. 关于select下拉框选择触发事件

    最开始使用onclick设置下拉框触发事件发现会有一些问题: <select> <option value="0" onclick="func0()&q ...

  5. 网络层-network layer(下):网络互连、子网掩码计算方法、Ipv4报头解析

    第五章 网络层-Network Layer(下) 上一章讲了网络层的任务.提供的两种服务.五个重要的路由算法.以及网络层的拥塞控制和服务质量问题.这一部分主要讲一讲网络互连问题和Internet的网络 ...

  6. Python编码相关

    1.#coding=utf-8的作用 作用是这个文件代码的编码格式,如果没有声明代码中不能出现中文字符,包括注释中也不能出现.否则会报错SyntaxError: Non-ASCII character ...

  7. Python中open函数怎么操作文件

    在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open() 函数实现. open() 函数用于创建或打开指定文件,该函数的常用语 ...

  8. 微服务开发的最大痛点-分布式事务SEATA入门简介

    前言 在微服务开发中,存在诸多的开发痛点,例如分布式事务.全链路跟踪.限流降级和服务平滑上下线等.而在这其中,分布式事务是最让开发者头痛的.那分布式事务是什么呢? 分布式事务就是指事务的参与者.支持事 ...

  9. Thymeleaf的th

    th:action 定义后台控制器路径,类似<form>标签的action属性. <form id="login-form" th:action="@{ ...

  10. 工具-Redis-使用(99.6.2)

    @ 目录 1.启动 2.数据结构 3.String命令 4.其他常用命令 5.Hash命令 6.List命令 7.Set命令 8.Zset命令 关于作者 1.启动 redis-server 交互 re ...