HttpInterface.java 4.09 KB
package com.huaheng.wms.https;

import android.util.Log;

import com.huaheng.wms.WMSApplication;
import com.huaheng.wms.WMSLog;
import com.huaheng.wms.login.UserBean;

import org.json.JSONObject;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class HttpInterface {

    public final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    private static HttpInterface insstance;

    public static HttpInterface getInsstance() {
        if(insstance == null) {
            insstance = new HttpInterface();
        }
        return insstance;
    }

    public void login(String userName, String password) {
        WMSLog.d("login");
        RequestBody formBody = new FormBody.Builder()
        .add("userName", userName)
        .add("password", password)
                .build();
        commonPost(HttpConstant.LOGIN, formBody);
//        Observable observable = Observable.create(new Observable.OnSubscribe<UserBean>() {
//            @Override
//            public void call(Subscriber<? super UserBean> subscriber) {
//                UserBean userBean = null;
//                subscriber.onNext(userBean);
//            }
//        });
//        toSubscribe(observable, subscriber);
    }

    public void getWarehouseList() {
        RequestBody formBody = new FormBody.Builder()
                .build();
        commonPost(HttpConstant.WAREHOUSE, formBody);
    }

    public void getUserList() {
        RequestBody formBody2 = new FormBody.Builder()
                .build();
        commonPost(HttpConstant.WAREHOUSE, formBody2);
    }


    private void jsonCommonPost(String url, JSONObject object) {
        RequestBody formBody = RequestBody.create(JSON, object.toString());
        commonPost(url, formBody);
    }

    private void commonPost(String url, RequestBody formBody) {
        OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
                .readTimeout(HttpConstant.READ_TIMEOUT, TimeUnit.SECONDS)
                .writeTimeout(HttpConstant.WRITE_TIMEOUT, TimeUnit.SECONDS)
                .connectTimeout(HttpConstant.CONNECT_TIMEOUT, TimeUnit.SECONDS).build();
        Request request = null;
        String cookie = WMSApplication.getOkhttpCookie();
        if(cookie == null) {
            request = new Request.Builder()
                    .url(url)
                    .post(formBody)
                    .build();
        } else {
            request = new Request.Builder()
                    .addHeader("cookie",cookie)
                    .url(url)
                    .post(formBody)
                    .build();
        }
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String str = response.body().string();
                Headers headers = response.headers();
                List<String> cookies = headers.values("Set-Cookie");
                if (cookies.size() > 0) {
                    String session = cookies.get(0);
                    String result = session.substring(0, session.indexOf(";"));
                    WMSApplication.setOkhttpCookie(result);
                }
                WMSLog.d("onResponse str:" +  str);
            }
        });
        WMSLog.d("commonPost url:" +  url);
    }

    private void toSubscribe(Observable observable, Subscriber subscriber) {
        observable
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);
    }


}