• Android使用Http访问网络


    1》WebView 的使用

    xml文件中:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        >
    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>
    </LinearLayout>

    Main中

      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            WebView webView=(WebView)findViewById(R.id.web_view);
            webView.getSettings().setJavaScriptEnabled(true);//设置支持JavaScript脚本
            webView.setWebViewClient(new WebViewClient());//跳转网页时仍在
            webView.loadUrl("http://www.baidu.com");//传入地址
        }

    添加网络依赖

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

    2》使用HttpURLConnection

    xml文件

    ScrollView可以使屏幕滑动查看屏幕外的内容
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
    
        <Button
            android:text="Button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button1"
           />
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:id="@+id/text1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </ScrollView>
    </LinearLayout>

    Main文件

    package com.example.networktest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        TextView text;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button sendRequest=(Button)findViewById(R.id.button1);
            text =(TextView)findViewById(R.id.text1);
            sendRequest.setOnClickListener(this);
        }
        @Override
        public void onClick(View v){
            if (v.getId()==R.id.button1){
                sendRequestWithHttpURLConnection();
            }
        }
        private void sendRequestWithHttpURLConnection(){
            new Thread(new Runnable() {//开启一个新的子线程
                @Override
                public void run() {
                    HttpURLConnection connection=null;
                    BufferedReader reader=null;
                    try{
                        URL url=new URL("http://www.dangdang.com");
                        connection=(HttpURLConnection)url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);//发送http请求
                        InputStream in=connection.getInputStream();//获得返回的流
    
                        reader=new BufferedReader(new InputStreamReader(in));//读取数据
                        StringBuilder response=new StringBuilder();
                        String line;
                        while ((line=reader.readLine())!=null){
                            response.append(line);
    
                        }
                        showResponse(response.toString());//将数据传入到showResponse函数
                    }catch (Exception e){
    
                    }finally {
                        if(reader!=null){
                            try{
                                reader.close();
                            }catch (IOException e){
                                e.printStackTrace();
                            }
                        }
                        if (connection!=null){
                            connection.disconnect();
                        }
                    }
                }
            }).start();
        }
        private  void showResponse(final  String response){
            runOnUiThread(new Runnable() {//由于子线程不准许操作UI所以使用runOnUiThread方法切换到主线程
                @Override
                public void run() {
                    text.setText(response);
                }
            });
        }
    }

     3》使用OkHttp

    build.grade文件

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:26.+'
        testCompile 'junit:junit:4.12'
        compile 'com.squareup.okhttp3:okhttp:3.4.1'//添加Okhttp库依赖
    }

    Main.java

    
    
    public void onClick(View v){
    if (v.getId()==R.id.button1){
    // sendRequestWithHttpURLConnection();
    sendRequestWithOkHttp();
    }
    }


    private
    void sendRequestWithOkHttp(){ new Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient();//创建OkHttp实例 Request request = new Request.Builder().url("https://www.qu.la/book/101104/5290362.html").build();//创建Request实例 Response response = client.newCall(request).execute();//获取服务器返回的数据 String responseData=response.body().string();//获取具体内容 showResponse(responseData); }catch (Exception e){ } } }).start(); }

    其余代码与上面的一样,执行结果也和使用HttpURLConnection一样

    4》解析xml文件-pull解析方法

     xml文件内容

    更改Mian中的OkHttp函数中的代码

     private void sendRequestWithOkHttp(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        OkHttpClient client = new OkHttpClient();//创建OkHttp实例
                        Request request = new Request.Builder().url("
    ").build();//创建Request实例
                        Response response = client.newCall(request).execute();//获取服务器返回的数据
                        String responseData=response.body().string();//获取具体内容
                        //showResponse(responseData);
                        parseXmlwithPull(responseData);//解析xml文件所用方法
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    parseXmlwithPull方法如下
    private void parseXmlwithPull(String xmldata){
            try {
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//获取实例
                XmlPullParser xmlPullParser=factory.newPullParser();//得到XmlPullParser
                xmlPullParser.setInput(new StringReader(xmldata));//传入数据
                int evenType=xmlPullParser.getEventType();//得到当前解析事件
                String id="";String name="";String version="";
                while (evenType!=xmlPullParser.END_DOCUMENT){//解析没有完成
                    String nodename=xmlPullParser.getName();//获取当前节点的名字
                    switch (evenType){
                        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("MainActivity","id is"+id);
                                Log.d("MainActivity","name is"+name);
                                Log.d("MainActivity","version is"+version);
    
                            }
                            break;
                        }
                        default:
                            break;
                    }
                    evenType=xmlPullParser.next();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }

    结果如下:

     

    5》解析json文件-GSON方法

    json文件内容

    加入依赖

        compile 'com.google.code.gson:gson:2.7'

    新建book类

    package com.example.networktest;
    
    /**
     * Created by lenovo on 2019/3/15.
     */
    
    public class Book {
        private  String id;
        private  String name;
        private  String version;
    
        public void setId(String id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setVersion(String version) {
            this.version = version;
        }
    
        public String getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public String getVersion() {
            return version;
        }
    }

    修改Mian方法

    private void sendRequestWithOkHttp(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        OkHttpClient client = new OkHttpClient();//创建OkHttp实例
                        Request request = new Request.Builder().url("http://10.0.2.2:8080/jsontest/get_data.json").build();//创建Request实例
                        Response response = client.newCall(request).execute();//获取服务器返回的数据
                        String responseData=response.body().string();//获取具体内容
                        //showResponse(responseData);
                        //parseXmlwithPull(responseData);
                        parJsonWithGSON(responseData);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        private void parJsonWithGSON(String data){
            Gson gson=new Gson();
            List<Book> bookList=gson.fromJson(data,new TypeToken<List<Book>>(){}.getType());
            for (Book book:bookList){
                Log.d("MainActivity","id is "+book.getId());
                Log.d("MainActivity","name is "+book.getName());
                Log.d("MainActivity","version is "+book.getVersion());
            }
        }

    结果入下

     6》Main.java代码汇总

    package com.example.networktest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserFactory;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.StringReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        TextView text;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button sendRequest=(Button)findViewById(R.id.button1);
            text =(TextView)findViewById(R.id.text1);
            sendRequest.setOnClickListener(this);
        }
        @Override
        public void onClick(View v){
            if (v.getId()==R.id.button1){
               // sendRequestWithHttpURLConnection();
                sendRequestWithOkHttp();
            }
        }
        private void sendRequestWithHttpURLConnection(){
            new Thread(new Runnable() {//开启一个新的子线程
                @Override
                public void run() {
                    HttpURLConnection connection=null;
                    BufferedReader reader=null;
                    try{
                        URL url=new URL("https://www.qu.la/book/101104/5290362.html");
                        connection=(HttpURLConnection)url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);//发送http请求
                        InputStream in=connection.getInputStream();//获得返回的流
    
                        reader=new BufferedReader(new InputStreamReader(in));//读取数据
                        StringBuilder response=new StringBuilder();
                        String line;
                        while ((line=reader.readLine())!=null){
                            response.append(line);
    
                        }
                        showResponse(response.toString());//将数据传入到showResponse函数
                    }catch (Exception e){
    
                    }finally {
                        if(reader!=null){
                            try{
                                reader.close();
                            }catch (IOException e){
                                e.printStackTrace();
                            }
                        }
                        if (connection!=null){
                            connection.disconnect();
                        }
                    }
                }
            }).start();
        }
        private void sendRequestWithOkHttp(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        OkHttpClient client = new OkHttpClient();//创建OkHttp实例
                        Request request = new Request.Builder().url("http://10.0.2.2:8080/jsontest/get_data.json").build();//创建Request实例
                        Response response = client.newCall(request).execute();//获取服务器返回的数据
                        String responseData=response.body().string();//获取具体内容
                        //showResponse(responseData);
                        //parseXmlwithPull(responseData);
                        parJsonWithGSON(responseData);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        private void parJsonWithGSON(String data){
            Gson gson=new Gson();
            List<Book> bookList=gson.fromJson(data,new TypeToken<List<Book>>(){}.getType());
            for (Book book:bookList){
                Log.d("MainActivity","id is "+book.getId());
                Log.d("MainActivity","name is "+book.getName());
                Log.d("MainActivity","version is "+book.getVersion());
            }
        }
        private void parseXmlwithPull(String xmldata){
            try {
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//获取实例
                XmlPullParser xmlPullParser=factory.newPullParser();//得到XmlPullParser
                xmlPullParser.setInput(new StringReader(xmldata));//传入数据
                int evenType=xmlPullParser.getEventType();//得到当前解析事件
                String id="";String name="";String version="";
                while (evenType!=xmlPullParser.END_DOCUMENT){//解析没有完成
                    String nodename=xmlPullParser.getName();//获取当前节点的名字
                    switch (evenType){
                        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("MainActivity","id is"+id);
                                Log.d("MainActivity","name is"+name);
                                Log.d("MainActivity","version is"+version);
    
                            }
                            break;
                        }
                        default:
                            break;
                    }
                    evenType=xmlPullParser.next();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        private  void showResponse(final  String response){
            runOnUiThread(new Runnable() {//由于子线程不准许操作UI所以使用runOnUiThread方法切换到主线程
                @Override
                public void run() {
                    text.setText(response);
                }
            });
        }
    }
  • 相关阅读:
    Thinkph5——模型软删除
    ThinkPHP5——URL参数带中文,报"模块不存在"
    ThinkPHP5多模板配置二级域名
    使用Composer安装阿里云短信失败
    GIT快速入门
    Python全栈之路系列----之-----面向对象4(接口与抽象,多继承与多态)
    Python全栈之路系列----之-----面向对象3(继承与派生)
    Python全栈之路系列----之-----面向对象1(初识)
    Python全栈之路系列----之-----异常处理
    Python全栈之路系列----之-----内置函数和匿名函数lamdba
  • 原文地址:https://www.cnblogs.com/837634902why/p/10524555.html
Copyright © 2020-2023  润新知