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);
            }
        });
    }
}
原文地址:https://www.cnblogs.com/837634902why/p/10524555.html