您的位置:首页 > 其它

GeekBand--第七周分享

2016-04-12 21:11 330 查看

网络编程数据处理

发送网络请求

如何请求网络数据?

注意要在AndroidManifest.xml中申请权限

<uses-permission android:name="android.permission.INTERNET"/>


还需要异步处理

//异步任务处理
class RequestNetworkDataTask extends AsyncTask<String,Integer,String> {

//在后台work之前
@Override
protected void onPreExecute() {
super.onPreExecute();
//主线程
//加载数据
}

@Override
protected String doInBackground(String[] params) {
String result = requestData(params[0]);
return result;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//执行完之后再主线程中
//操作
}
}


数据的处理

private String requestData(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();//建立一个连接
connection.setConnectTimeout(30000);//设置连接超过多少秒就取消
connection.setRequestMethod("GET");//设置请求方法
connection.connect();

//      int response = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();//得到msg
if(responseMessage.equals(HttpURLConnection.HTTP_OK)){//判断msg
InputStream inputStream = connection.getInputStream();//获取流
Reader reader = new InputStreamReader(inputStream, "UTF-8");
char[] buffer = new char[1024];
reader.read(buffer);
return new String(buffer);
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}


执行

new RequestNetworkDataTask().execute(url);


总的说就是

要有网络权限,要异步处理,处理中不要涉及到ui主线程!

请求结果如何处理

XML之SAX解析

//parse file by SAX
private void testSAXParse(){
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = saxParserFactory.newSAXParser();//解析器
XMLReader xmlReader = saxParser.getXMLReader();//XML读取器
SAXParseHandler saxParseHandler = new SAXParseHandler();
xmlReader.setContentHandler(saxParseHandler);

InputStream inputStream = getResources().openRawResource(R.raw.test);
InputSource inputSource = new InputSource(inputStream);
xmlReader.parse(inputSource);
saxParseHandler.getXMLList();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


创建一个SAX的Handler

public class SAXParseHandler extends DefaultHandler {

private static final CharSequence ITEM = "item";
List<WebURL> mWebURLs;
WebURL webURL;
@Override
public void startDocument() throws SAXException {//开始
super.startDocument();
mWebURLs = new ArrayList<>();
}

@Override
public void endDocument() throws SAXException {//结束
super.endDocument();
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {               //开始第一个对象
super.startElement(uri, localName, qName, attributes);
webURL = new WebURL();
if(TextUtils.equals(localName,ITEM)){
for(int i=0;i<attributes.getLength();i++){
if(TextUtils.equals(attributes.getLocalName(i),"id")){}
webURL.setmID(Integer.valueOf(attributes.getLocalName(i)));
}
state =1;
}
state =0;
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {                                //结束第一个对象
super.endElement(uri, localName, qName);
if(TextUtils.equals(localName,ITEM)){
mWebURLs.add(webURL);
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String content = String.valueOf(ch,start,length);
if(state !=0){
mWebURLs.setContent(content);
state = 0;
}
}
public List<WebURL> getXMLList(){
return  mWebURLs;
}
}


XML之PULL解析

//pull
XmlResourceParser xmlResourceParser = getResources().getXml(R.xml.test);

while(xmlResourceParser.getEventType() != XmlResourceParser.END_DOCUMENT) {
if (xmlResourceParser.getEventType() == XmlResourceParser.START_DOCUMENT) {
String name = xmlResourceParser.getName();
if(TextUtils.equals(tagName, "item")){
String id = xmlResourceParser.getAttributeValue(null,"id");
}
}
}


注意PULL解析文件需要放在XML文件夹中!

DOM解析与上都类似

XML和PULL分段读取。DOM读取整个文件(适用于小文件)

JSON解析

JSON和XML相比更加轻量!

JSONLint!一个很好地工具!可以检查JSON的格式!并且格式化!

//JSON
InputStream is = getResources().openRawResource(R.raw.json);
String jsonString = getStringByInputStream(is);
JSONObject jsonObject = new JSONObject(jsonString);
jsonObject.get("title");
jsonObject.getJSONArray("images");


JSON之GSON解析

//GSON
Gson gson = new Gson();


网络状态与扩展

网络状态处理

connectivityManager

NetworkInfo

public class NetworkUtil {
public  void testNetwork(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(connectivityManager.TYPE_MOBILE);
boolean isWifiConnection = networkInfo.isConnected();//判断是不是wifi连接
networkInfo = connectivityManager.getNetworkInfo(connectivityManager.TYPE_MOBILE);
boolean isMobileConnection = networkInfo.isConnected();//判断是不是流量连接
}
public boolean isOnline(Context context){//判断是否在线
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return (networkInfo !=null && networkInfo.isConnected());

}
}


拦截请求设置及代理

Fiddler(Windows)

Charles(mac)

wifi设置代理

小技巧

Postman查询API

了解Restful API
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: