<WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webview_1">
</WebView>
public class MainActivity extends Activity {
private WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview=(WebView)findViewById(R.id.webview_1);
//完成JavaScript的启动
webview.getSettings().setJavaScriptEnabled(true);
//配置WebViewClient。WebViewClient是一个事件接口,通过提供自己实现的WebViewClient,可响应各种渲染事件。
webview.setWebViewClient(new WebViewClient(){
//必须覆盖此方法,当有新的URL加载到WebView(比如点击了某个链接),该方法会决定下一步的行动。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回false,表示:“WebView去加载这个URL,我不会对它做任何处理。”;返回true,表示:“不要处理这个URL,我自己来”。
//webview.loadUrl(url);
return false;
};
});
webview.loadUrl("http://www.baidu.com");
}
}
由于在Android 5.0的API版本中,HttpClient被废弃了,官方文档上说用HttpURLConnection代替,所以HttpClient的用法就不再谈了。具体可参考郭大大的博文, Android访问网络,使用HttpURLConnection还是HttpClient?
![]()
需要注意的是:
- 真正发送连接请求的是调用connection.getInputStream()方法的时候。
- Android4.0后所有网络方面的操作都不能在主线程!
- 记得加权限 < uses-permission android:name=”android.permission.INTERNET”/>
public void sendRequestwithHttpURLConnection(){
HttpURLConnection httpURLConnection=null;
try {
URL url=new URL("http://www.baidu.com");
httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setReadTimeout(8000);
httpURLConnection.setReadTimeout(8000);
httpURLConnection.setRequestMethod("GET");
InputStream in=httpURLConnection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String line;
StringBuilder stringBuilder=new StringBuilder();
while((line=reader.readLine())!=null){
stringBuilder.append(line);
}
Message msg=new Message();
msg.what=UPDATE_TEXT;
msg.obj=stringBuilder.toString();
handler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
public void pullxml(InputStream in) throws Exception {
// 由android.util.Xml创建一个XmlPullParser实例
XmlPullParser parser = Xml.newPullParser();
// 设置输入流 并指明编码方式
parser.setInput(in, "UTF-8");
// 产生第一个事件
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
// 判断当前事件是否为文档开始事件
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Book>();// 初始化list集合
break;
// 判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:
if (parser.getName().equals("book")) { // 判断开始标签元素是否是book
book = new Book();
} else if (parser.getName().equals("id")) {
eventType = parser.next();
// 得到book标签的属性值,并设置book的id
book.setId(Integer.parseInt(parser.getText()));
} else if (parser.getName().equals("name")) { // 判断开始标签元素是否是book
eventType = parser.next();
book.setName(parser.getText());
} else if (parser.getName().equals("price")) { // 判断开始标签元素是否是price
eventType = parser.next();
book.setPrice(Float.parseFloat(parser.getText()));
}
break;
// 判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
if (parser.getName().equals("book")) { // 判断结束标签元素是否是book
list.add(book); // 将book添加到books集合
book = null;
}
break;
}
// 进入下一个元素并触发相应事件
eventType = parser.next();
}
return list;
}
}
public class MyHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
//开始XML解析的时候调用
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//开始解析某个结点的时候调用。
super.startElement(uri, localName, qName, attributes);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//获取结点内容时调用
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//完成解析某个结点的时候调用
super.endElement(uri, localName, qName);
}
@Override
public void endDocument() throws SAXException {
//完成整个XML解析的时候调用
super.endDocument();
}
}
private void parseJASONWithJSONObject(String jsonData){
try {
//把jsonData转化成JSONArray
JSONArray jsonArray=new JSONArray(jsonData);
for(int i=0;i<jsonArray.length();i++){
//从JSONArray取出JSONObject
JSONObject jsonObject=jsonArray.getJSONObject(i);
//从JSONObject中取出字段
String id=jsonObject.getString("id");
String name=jsonObject.getString("name");
String version=jsonObject.getString("version");
}
} catch (Exception e) {
e.printStackTrace();
}
}
使用GSON
json数据格式定义: json数据只有两种格式.
一种是对象: 一个大括号包裹的内容就是一个对象.里面是无数个逗号相间隔的键值对
{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “aaaa” }
一种是数组:一个方括号包裹的内容就是一个数组,里面是无数个逗号相间隔的json对象>
GSON相关知识,值得参考的博文: Gson解析json数据
至此,《第一行代码》读书笔记系列完结!本书的第12章特色开发属于查阅型知识就不另外细说了。把全书重要的知识点在一周时间内总结成9篇博文,感觉还挺high的,期间在网上查阅了许多资料,原来书上一笔带过的知识点,通过这一次总结性的二次阅读,我有了更大的收获和更深入的理解。其实,一开始写完第一篇的时候,我心里面就有一些抗拒,有放弃的念头,但既然最初选择了就要坚持走下去。另外,书中的git知识是一大亮点,我打算再找时间系统地学习一下基本用法,github真是一个宝库呢,里面很多的开源库真的非常惊艳,非常值得研究学习。Android开发的自学探索之路还非常漫长,但不能急,有耐心,循序渐进,一步步来,始终保持激情。Fuel with code! 为了完成入门,我打算把官方文档里面的train,API Guide部分自学过一遍,SDK里面的sample示例项目代码也是非常好的学习资料。多看牛人博客,当然了项目实践也是必不可少的,祝自己好运吧!(^__^)