OkHttp具體使用方法

//列表適配器

package soexample.umeng.com.one_week_test.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import soexample.umeng.com.one_week_test.R;
import soexample.umeng.com.one_week_test.bean.MyData;
import soexample.umeng.com.one_week_test.utils.GlideUtils;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder> {
    private List<MyData.ResultBean> mList;
    private Context mContext;

    public MyAdapter(List<MyData.ResultBean> mList, Context mContext) {
        this.mList = mList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.item_layout, null);
        Holder holder = new Holder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, final int i) {
        GlideUtils.loadImage(mList.get(i).getMasterPic(), holder.mImage);
        holder.mText.setText(mList.get(i).getCommodityName() + "");
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (itemClick != null) {
                    itemClick.setOnItemClick(i);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    public class Holder extends RecyclerView.ViewHolder {
        @BindView(R.id.Item_Image)
        ImageView mImage;
        @BindView(R.id.Item_Text)
        TextView mText;

        public Holder(@NonNull View itemView) {
            super(itemView);
            bind = ButterKnife.bind(this, itemView);
        }
    }

    private Unbinder bind;

    public void unBinder() {
        if (bind != null) {
            bind.unbind();
        }
    }

    public interface ItemClick {
        void setOnItemClick(int position);
    }

    private ItemClick itemClick;

    public void setItemClick(ItemClick itemClick) {
        this.itemClick = itemClick;
    }
}
//二維碼掃描
package soexample.umeng.com.one_week_test.fragment;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import soexample.umeng.com.one_week_test.R;

public class HomeFragment extends Fragment {
    @BindView(R.id.Sao_Image)
    ImageView SaoImage;
    @BindView(R.id.Edit_Text)
    EditText mEditText;
    @BindView(R.id.Sheng_Btn)
    Button ShengBtn;
    @BindView(R.id.Home_Image)
    ImageView HomeImage;
    Unbinder unbinder;
    private View mView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_home, container, false);
        unbinder = ButterKnife.bind(this, mView);
        EventBus.getDefault().register(this);
        return mView;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }

    @OnClick({R.id.Sao_Image, R.id.Sheng_Btn})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.Sao_Image:
                Intent intent = new Intent(getActivity(), CaptureActivity.class);
                startActivityForResult(intent, 1);
                break;
            case R.id.Sheng_Btn:
                String content = mEditText.getText().toString().trim();
                if (TextUtils.isEmpty(content)) {
                    Toast.makeText(getContext(), "內容不能爲空", Toast.LENGTH_SHORT).show();
                } else {
                    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xiao_icon);
                    Bitmap image = CodeUtils.createImage(content, 300, 300, bitmap);
                    HomeImage.setImageBitmap(image);
                }

                break;
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == getActivity().RESULT_OK) {
            String result_string = data.getStringExtra("result_string");
            Log.e("result_string", result_string);
            EventBus.getDefault().post(result_string);
        }
    }


    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getInfo(String info) {

    }
}
//列表
package soexample.umeng.com.one_week_test.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.gson.Gson;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import soexample.umeng.com.one_week_test.R;
import soexample.umeng.com.one_week_test.adapter.MyAdapter;
import soexample.umeng.com.one_week_test.bean.MyData;
import soexample.umeng.com.one_week_test.contart.IContart;
import soexample.umeng.com.one_week_test.presenter.PresenterImpl;

/**
 * description: lvxinxin
 * author: 呂新新
 * date: 2019/12/2 14:50
 * update: $date$
 */
public class ItemFragment extends Fragment implements IContart.IView {
    @BindView(R.id.Recy)
    RecyclerView Recy;
    Unbinder unbinder;
    private View mView;
    private PresenterImpl presenter;
    private List<MyData.ResultBean> mList = new ArrayList<>();
    private MyAdapter mAdapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_item, container, false);
        presenter = new PresenterImpl();
        presenter.onAttchView(this);
        EventBus.getDefault().register(this);
        unbinder = ButterKnife.bind(this, mView);
        Recy.setLayoutManager(new LinearLayoutManager(getContext()));
        mAdapter = new MyAdapter(mList, getContext());
        Recy.setAdapter(mAdapter);
        return mView;
    }


    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getInfo(String info) {
        presenter.startRequest(info);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }

    @Override
    public void onSuccess(String jsonStr) {
        Gson gson = new Gson();
        MyData myData = gson.fromJson(jsonStr, MyData.class);
        mList.addAll(myData.getResult());
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void onError(String error) {

    }
}
//工具類
package soexample.umeng.com.one_week_test.utils;

import android.os.Handler;
import android.os.Message;

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

import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * description: lvxinxin
 * author: 呂新新
 * date: 2019/12/2 14:37
 * update: $date$
 */
public class OKHttpUtils {
    private OkHttpClient mOkHttpClient;
    private HttpLoggingInterceptor interceptor;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1://成功
                    mCallback.onSuccess(msg.obj.toString());
                    break;
                case 2://失敗
                    mCallback.onError(msg.obj.toString());
                    break;
            }
        }
    };
    private OkCallback mCallback;

    //構造函數做一些初始化的操作
    private OKHttpUtils() {
        //添加了日誌攔截器
        interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        mOkHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .addInterceptor(interceptor)
                .build();
    }

    private static class OkHolder {
        private static final OKHttpUtils utils = new OKHttpUtils();
    }

    public static OKHttpUtils getInstance() {
        return OkHolder.utils;
    }

    //同步的get請求
    public void syncGet(final String url, OkCallback callback) {
        mCallback = callback;
        new Thread(new Runnable() {
            @Override
            public void run() {
                Request request = new Request.Builder().url(url).build();
                String jsonStr = null;
                try {
                    jsonStr = mOkHttpClient.newCall(request).execute().body().string();
                    mHandler.sendMessage(mHandler.obtainMessage(0, jsonStr));
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }

    //同步的Post請求
    public void syncPost(String url, FormBody formBody) throws IOException {
        Request request = new Request.Builder().url(url).method("Post", formBody).build();
        mOkHttpClient.newCall(request).execute().body().string();
    }

    //異步的Get請求

    public void asyncGet(String url, OkCallback callback) {
        mCallback = callback;
        Request request = new Request.Builder().url(url).build();
        mOkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(okhttp3.Call call, IOException e) {
                mHandler.sendMessage(mHandler.obtainMessage(2, e.getMessage()));
            }

            @Override
            public void onResponse(okhttp3.Call call, Response response) throws IOException {
                mHandler.sendMessage(mHandler.obtainMessage(1, response.body().string()));
            }

        });
    }

    //異步的Post請求
    public void asyncPost(String url, FormBody formBody, OkCallback callback) {
        mCallback = callback;
        Request request = new Request.Builder().method("POST", formBody).url(url).build();
        mOkHttpClient.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(okhttp3.Call call, IOException e) {
                mHandler.sendMessage(mHandler.obtainMessage(2, e.getMessage()));
            }

            @Override
            public void onResponse(okhttp3.Call call, Response response) throws IOException {
                mHandler.sendMessage(mHandler.obtainMessage(1, response.body().string()));
            }
        });
    }

    public interface OkCallback {
        void onSuccess(String jsonStr);

        void onError(String error);
    }

}
//主界面
package soexample.umeng.com.one_week_test;

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import soexample.umeng.com.one_week_test.base.BaseActivity;
import soexample.umeng.com.one_week_test.base.BasePresenter;
import soexample.umeng.com.one_week_test.fragment.HomeFragment;
import soexample.umeng.com.one_week_test.fragment.ItemFragment;
import soexample.umeng.com.one_week_test.pageradapter.MyPagerAdapter;
import soexample.umeng.com.one_week_test.presenter.PresenterImpl;

public class MainActivity extends BaseActivity {

    @BindView(R.id.vp)
    ViewPager mVp;
    @BindView(R.id.Tab_layout)
    TabLayout mTab;
    private HomeFragment homeFragment;
    private ItemFragment itemFragment;
    private List<String> mTitle = new ArrayList<>();
    private List<Fragment> mList = new ArrayList<>();

    @Override
    protected BasePresenter getPresenter() {
        return new PresenterImpl();
    }

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initViews() {

    }

    @Override
    protected void startEncoding() {
        initData();
        mVp.setAdapter(new MyPagerAdapter(getSupportFragmentManager(), mTitle, mList));
        mTab.setupWithViewPager(mVp);
    }

    private void initData() {
        mTitle.add("首頁");
        mTitle.add("列表");
        homeFragment = new HomeFragment();
        itemFragment = new ItemFragment();
        mList.add(homeFragment);
        mList.add(itemFragment);
    }

    @Override
    public void onSuccess(String jsonStr) {

    }

    @Override
    public void onError(String error) {

    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章