网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

    涉及到Android里的网络编程都需要添加权限

    <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());
    }
    }


    评论 0

    暂无评论
    0
    0
    0
    立即
    投稿
    发表
    评论
    返回
    顶部