<uses-permission android:name="android.permission.INTERNET" />
一、WebView:是应用程序打开web网页的UI控件
前台:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.webtest.WebViewActivity" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
后端:
public class WebViewActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); webView=(WebView)findViewById(R.id.webView); //getSettings():设置浏览器一些属性 //setJavaScriptEnabled():设置WebView支持javascript脚本 webView.getSettings().setJavaScriptEnabled(true); //setWebViewClient(new WebViewClient()):让从一个网页跳转到另一个网页时仍在当前WebView显示 webView.setWebViewClient(new WebViewClient()); //loadUrl(String):设置打开的网址 webView.loadUrl("http://www.baidu.com"); } }
二、Http协议:客户端提交数据给服务端和从服务端获得数据,像WebView也是向百度的服务端发出一条Http请求,服务端返回HTML页面,客户端(浏览器)解析后展示出页面。
提交数据和获得数据的方式有很多,这里介绍一种,使用HttpURLConnection来向服务器提交数据或者获得数据。
获得数据:
//传入网址,获得请求网页数据(XML文件数据或JSON文件数据) public static String sendHttpRequest(String address) { HttpURLConnection connection=null; try { URL url=new URL(address); connection=(HttpURLConnection)url.openConnection(); //设置请求方式:GET为从服务器获得数据,POST为提交数据 connection.setRequestMethod("GET"); //设置连接最长超时时间(单位毫秒) connection.setConnectTimeout(8000); //设置读取最长超时时间(单位毫秒) connection.setReadTimeout(8000); connection.setDoInput(true); connection.setDoOutput(true); //获取到的数据输入流(InputStream为抽象类) InputStream in=connection.getInputStream(); //对输入流进行读取 BufferedReader reader=new BufferedReader(new InputStreamReader(in)); StringBuffer response = new StringBuffer(); String line; while((line=reader.readLine()) != null) { response.append(line); } return response.toString(); } catch (Exception e) { e.printStackTrace(); return e.getMessage(); }finally { if(connection!=null) { connection.disconnect(); } } }
提交数据:
public static void submit(String address) { HttpURLConnection connection=null; try { //设置为提交模式 connection.setRequestMethod("POST"); DataOutputStream out=new DataOutputStream(connection.getOutputStream()); out.writeBytes("username=admin&password=123456");//数据与数据之间用&分割 }catch (Exception e) { e.printStackTrace(); }finally { if(connection!=null) { connection.disconnect(); } } }
三、解析获得的网页数据(XML文件或JSON文件)
1、解析XML:使用Pull方式。
需要导入jar包:xmlpull-xpp3-1.1.4c.jar
//Pull解析XML文件 private void parseXMLWithPull(String xml_data) { try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xml_data)); int eventType=xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; while (XmlPullParser.END_DOCUMENT != eventType) { String nodeName = xmlPullParser.getName(); switch (eventType) { //解析时的判断逻辑 case XmlPullParser.START_TAG: if ("id".equals(nodeName)) { id = xmlPullParser.nextText(); } else if ("name".equals(nodeName)) { name = xmlPullParser.nextText(); } else if ("version".equals(nodeName)) { version = xmlPullParser.nextText(); } break; //完成解析某个结点 case XmlPullParser.END_TAG: if ("app".equals(nodeName)) { Log.d("id is ",id); Log.d(" name is ",name); Log.d(" version is ",version); } break; default: break; } eventType = xmlPullParser.next(); } } catch (Exception e) { e.printStackTrace(); } }
2、解析JSON有俩种方式:JSONObject和GSON
JSONObject:
//JSONObject解析JSON文件 private void parseJSONWithJSONObject(String json_data) { try { JSONArray jsonArray=new JSONArray(json_data); for(int i=0;i<jsonArray.length();i++) { JSONObject jsonObject=jsonArray.getJSONObject(i); String id=jsonObject.getString("id"); String name=jsonObject.getString("name"); String version=jsonObject.getString("version"); Log.d("MainActivity", "id is"+id); Log.d("MainActivity", "name is"+name); Log.d("MainActivity", "version is"+version); } }catch(Exception e) { e.printStackTrace(); } }
GSON :
需要导入jar包:gson-2.0.jar,log4j-1.2.17.jar,slf4j-api-1.7.10.jar,slf4j-log4j12-1.7.10.jar
还需要自定义与JSON文件相对应的对象
class App{ private String id; private String name; private String version; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } }
最后对传入JSON数据(String形式)进行解析
//GSON解析JSON文件方法 private void parseJSONWithGSON(String json_data) { Gson gson=new Gson(); List<App> appList=gson.fromJson(json_data, new TypeToken<List<App>>() {}.getType()); for(App app:appList) { Log.d("MainActivity", "id is"+app.getId()); Log.d("MainActivity", "name is"+app.getName()); Log.d("MainActivity", "version is"+app.getVersion()); } }
发表评论 取消回复