Android OkHttp基本用法

版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/w18756901575 https://blog.csdn.net/w18756901575/article/details/77529856

引用:

    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.squareup.okio:okio:1.13.0'

Android Activity:

package com.example.okhttpdemo;

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    OkHttpClient client = new OkHttpClient();

    /**
     * get请求
     * @param view
     */
    public void httpGet(View view) {
        new Thread() {
            @Override
            public void run() {
                String result = "";

                Request request = new Request.Builder()
                        .url("http://192.168.3.177:8080/Test/Test?action=getMessage")
                        .build();

                try {
                    Response response = client.newCall(request).execute();
                    result = response.body().string();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                d(result);

            }
        }.start();

    }

    /**
     * post请求
     * @param view
     */
    public void httpPost(View view) {
        new Thread() {
            @Override
            public void run() {
                String result = "";

                RequestBody body = new FormBody.Builder()
                        .add("action", "getMessage")
                        .build();

                Request request = new Request.Builder()
                        .url("http://192.168.3.177:8080/Test/Test")
                        .post(body)
                        .build();
                try {
                    Response response = client.newCall(request).execute();
                    result = response.body().string();
                } catch (IOException e) {
                    e.printStackTrace();
                    d(e.toString());
                }
                d(result);
            }
        }.start();

    }

    /**
     * 下载文件
     * @param view
     */
    public void downloadFile(View view) {
        new Thread() {
            @Override
            public void run() {

                String url = "https://www.baidu.com/img/bd_logo1.png";
                Request request = new Request.Builder().url(url).build();
                try {
                    Response response = client.newCall(request).execute();
                    InputStream inputStream = response.body().byteStream();
                    String path = Environment.getExternalStorageDirectory().getPath() + "/baidu.png";

                    FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
                    byte[] bs = new byte[1024];
                    int l = 0;
                    while ((l = inputStream.read(bs)) != -1) {
                        fileOutputStream.write(bs, 0, l);
                    }

                    fileOutputStream.flush();
                    fileOutputStream.close();
                    inputStream.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }.start();

    }

    /**
     * 上传文件
     * @param view
     */
    public void uploadFile(View view) {
        new Thread() {
            @Override
            public void run() {
                String url = "http://192.168.3.177:8080/Test/Test?action=uploadFile&fileName=";

                String path = Environment.getExternalStorageDirectory().getPath() + "/baidu.png";
                final File file = new File(path);
                if(!file.exists()){
                    return;
                }
                url+=file.getName();

                RequestBody requestBody =RequestBody.create(MediaType.parse("application/octet-stream"),file);

                Request request = new Request.Builder()
                        .url(url)
                        .post(requestBody)
                        .build();

                try {
                    Response result = client.newCall(request).execute();
                    int resultCode = result.code();
                    d(String.valueOf(resultCode));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    public void d(String string) {
        Log.d("Ex", string);
    }


}

上传的文件为了省事直接用的就是下载文件时所下载的文件

Java服务器Servlet接口代码:

package code.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 4593404916826953969L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter out = resp.getWriter();

        String action = req.getParameter("action");
        if (action == null) {
            action = "";
        }

        /**
         * 获取信息
         */
        if (action.equalsIgnoreCase("getMessage")) {
            out.println("举头忽见衡阳雁。千声万字情何限。" + "叵而薄情夫。一行书也无。 " + "泣归香阁恨。和泪掩红粉。" + "待雁却回时。也无书寄伊。");
        }

        /**
         * 上传数据
         */
        if (action.equalsIgnoreCase("uploadFile")) {

            String fileName=req.getParameter("fileName");

            try {
                InputStream inputStream = req.getInputStream();
                File file = new File("D:\\"+fileName);
                if (!file.exists()) {
                    file.createNewFile();
                }
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                byte[] bs = new byte[1024];
                int l = 0;
                while ((l = inputStream.read(bs)) != -1) {
                    fileOutputStream.write(bs, 0, l);
                }
                fileOutputStream.flush();
                fileOutputStream.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        out.flush();
        out.close();
    }

}

之前写Android进行网络请求一开始学习的时候用的是Android自带的api,之后来到我的第一家公司也比较自由,并没有限制网络访问所用的框架什么的,所以学习了NoHttp的使用,现在想的是OkHttp毕竟使用的公司很多,所以就花点时间简单的研究下,记录下,以后如果用到不会太麻烦的从头开始,也没有太深入

关于Android网络请求和文件操作的权限自行添加

猜你喜欢

转载自blog.csdn.net/w18756901575/article/details/77529856