//Rxjava
package com.example.ykmn_zh1.net;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RxjavaUtils {
public static RxjavaUtils mInstance;
private final Retrofit build;
public RxjavaUtils getmInstance() {
if (mInstance == null){
synchronized (RxjavaUtils.class){
if (mInstance == null){
mInstance = new RxjavaUtils();
}
}
}
return mInstance;
}
public RxjavaUtils(){
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.addNetworkInterceptor(httpLoggingInterceptor)
.build();
build = new Retrofit.Builder()
.baseUrl("http://172.17.8.100/")
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public <T>T crate(Class<T> tClass){
return build.create(tClass);
}
}
//MainView
package com.example.ykmn_zh1.mvp.view;
public interface MainView {
void success(Object data);
void fail(Object error);
}
//MainModel
package com.example.ykmn_zh1.mvp.model;
import okhttp3.MultipartBody;
public interface MainModel {
public interface CallBackListener{
void success(Object data);
void fail(Object error);
}
void doShop(CallBackListener listener);
void doTou(CallBackListener listener, MultipartBody.Part filePart);
}
//MainModelIml
package com.example.ykmn_zh1.mvp.model;
import com.example.ykmn_zh1.api.HttpListener;
import com.example.ykmn_zh1.bean.MainBean;
import com.example.ykmn_zh1.bean.TouXiang;
import com.example.ykmn_zh1.net.RxjavaUtils;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subscribers.DisposableSubscriber;
import okhttp3.MultipartBody;
public class MainModelIml implements MainModel {
private HttpListener rxjava;
@Override
public void doShop(final CallBackListener listener) {
rxjava = new RxjavaUtils().crate(HttpListener.class);
rxjava.getShuju()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableSubscriber<MainBean>() {
@Override
public void onNext(MainBean mainBean) {
listener.success(mainBean);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
}
});
}
@Override
public void doTou(final CallBackListener listener, MultipartBody.Part filePart) {
rxjava = new RxjavaUtils().crate(HttpListener.class);
rxjava.getTouXiang(4457,"15571132663074457",filePart)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableSubscriber<TouXiang>() {
@Override
public void onNext(TouXiang touXiang) {
listener.success(touXiang);
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
}
}
//MainPresenter
package com.example.ykmn_zh1.mvp.presenter;
import okhttp3.MultipartBody;
public interface MainPresenter {
void doShop();
void doTou( MultipartBody.Part filePart);
}
//MainPresenterIml
package com.example.ykmn_zh1.mvp.presenter;
import android.util.Log;
import com.example.ykmn_zh1.mvp.model.MainModel;
import com.example.ykmn_zh1.mvp.view.MainView;
import okhttp3.MultipartBody;
public class MainPresenterIml implements MainPresenter, MainModel.CallBackListener {
private MainModel mainModel;
private MainView mainView;
public MainPresenterIml(MainModel mainModel, MainView mainView) {
this.mainModel = mainModel;
this.mainView = mainView;
}
@Override
public void success(Object data) {
Log.i("tag","运行到了");
mainView.success(data);
}
@Override
public void fail(Object error) {
mainView.fail(error);
}
@Override
public void doShop() {
mainModel.doShop(this);
}
@Override
public void doTou(MultipartBody.Part filePart) {
mainModel.doTou(this,filePart);
}
public void onDestory(){
if (mainModel != null){
mainModel = null;
}
if (mainView != null){
mainView = null;
}
}
}
//Api
package com.example.ykmn_zh1.api;
public class Api {
public static final String TOUXIANG = "small/user/verify/v1/modifyHeadPic";
public static final String SHANGPIN = "ks/product/getCarts?uid=51";
}
//HttpListener
package com.example.ykmn_zh1.api;
import com.example.ykmn_zh1.bean.MainBean;
import com.example.ykmn_zh1.bean.TouXiang;
import io.reactivex.Flowable;
import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
public interface HttpListener {
@GET(Api.SHANGPIN)
Flowable<MainBean> getShuju();
@Multipart
@POST(Api.TOUXIANG)
Flowable<TouXiang> getTouXiang(@Header("userId") int userId, @Header("sessionId") String sessionId, @Part MultipartBody.Part filePart);
}
//Applica
package com.example.ykmn_zh1.app;
import android.app.Application;
import android.os.Environment;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
public class Applica extends Application {
@Override
public void onCreate() {
super.onCreate();
DiskCacheConfig cacheConfig = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("fresco_images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(cacheConfig)
.build();
Fresco.initialize(this,config);
}
}
//Fragment1
package com.example.ykmn_zh1.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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import com.example.ykmn_zh1.R;
import com.example.ykmn_zh1.adapter.MainAdapter;
import com.example.ykmn_zh1.bean.MainBean;
import com.example.ykmn_zh1.mvp.model.MainModelIml;
import com.example.ykmn_zh1.mvp.presenter.MainPresenterIml;
import com.example.ykmn_zh1.mvp.view.MainView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
public class Fragment1 extends Fragment implements MainView, View.OnClickListener {
private XRecyclerView mXreCyclerView;
private MainAdapter mainAdapter;
private MainPresenterIml mainPresenterIml;
private List<MainBean.DataBean> list;
private CheckBox check_qx;
private TextView text_zj;
private TextView text_qjs;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
mXreCyclerView = view.findViewById(R.id.XreCyclerView);
check_qx = view.findViewById(R.id.check_qx);
check_qx.setOnClickListener(this);
text_zj = view.findViewById(R.id.text_zj);
text_qjs = view.findViewById(R.id.text_qjs);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mXreCyclerView.setLayoutManager(linearLayoutManager);
mainAdapter = new MainAdapter(getActivity());
mXreCyclerView.setAdapter(mainAdapter);
mainPresenterIml = new MainPresenterIml(new MainModelIml(), this);
mainPresenterIml.doShop();
mainAdapter.setChannerListener(new MainAdapter.ChannerListener() {
@Override
public void changeList(List<MainBean.DataBean> list) {
float price=0;
int allNum=0;
//全选
for (int i = 0; i < list.size(); i++) {
List<MainBean.DataBean.ListBean> childList = list.get(i).getList();//商家下的所有商品
for (int j = 0; j <childList.size() ; j++) {
if (childList.get(j).isChekced()){
float p = childList.get(j).getPrice();
int n = childList.get(j).getNum();
price=price+(p*n);
allNum=allNum+n;
}
}
}
text_zj.setText(price+"");
text_qjs.setText(allNum+"");
}
});
return view;
}
@Override
public void success(Object data) {
MainBean mainBean = (MainBean) data;
list = mainBean.getData();
list.remove(0);
mainAdapter.setList(list);
}
@Override
public void fail(Object error) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.check_qx:
float price=0;
int allNum=0;
boolean isChecked = check_qx.isChecked();//获取状态
//全选
for (int i = 0; i < list.size(); i++) {
list.get(i).setChecked(isChecked);
List<MainBean.DataBean.ListBean> childList = this.list.get(i).getList();//商家下的所有商品
for (int j = 0; j <childList.size() ; j++) {
childList.get(j).setChekced(isChecked);
float p = childList.get(j).getPrice();
int n = childList.get(j).getNum();
price=price+(p*n);
allNum=allNum+n;
}
}
if (!isChecked){
price=0.0f;
allNum=0;
}
text_zj.setText(price+"");
text_qjs.setText(allNum+"");
mainAdapter.setList(list);
break;
}
}
}
//buju
<?xml version="1.0" encoding="utf-8"?><com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/XreCyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"></com.jcodecraeer.xrecyclerview.XRecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<CheckBox
android:id="@+id/check_qx"
android:text="全选"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_zj"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_qjs"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content" />
</LinearLayout>
//MainAdapter
package com.example.ykmn_zh1.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.ykmn_zh1.R;
import com.example.ykmn_zh1.bean.MainBean;
import java.util.ArrayList;
import java.util.List;
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ShowViewHolder>{
private Context context;
private List<MainBean.DataBean> list = new ArrayList<>();
public MainAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public ShowViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.main_adapter, null);
ShowViewHolder showViewHolder = new ShowViewHolder(view);
return showViewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ShowViewHolder showViewHolder, final int i) {
showViewHolder.check_sj.setChecked(list.get(i).isChecked());
showViewHolder.text_sj.setText(list.get(i).getSellerName());
MainShowAdapter mainShowAdapter = new MainShowAdapter(context,list.get(i).getList());
final LinearLayoutManager linearLayoutManager=new LinearLayoutManager(context);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
showViewHolder.recyclerView.setLayoutManager(linearLayoutManager);
showViewHolder.recyclerView.setAdapter(mainShowAdapter);
mainShowAdapter.setChannerListener(new MainShowAdapter.ChannerListener() {
@Override
public void changeList(List<MainBean.DataBean.ListBean> listChild) {
int num=0;
for (int j = 0; j <listChild.size(); j++) {
if (listChild.get(j).isChekced()){
num++;
}
if (num==listChild.size()){
list.get(i).setChecked(true);
}else{
list.get(i).setChecked(false);
}
notifyItemChanged(i);
mChannerListener.changeList(list);
}
}
});
showViewHolder.check_sj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = showViewHolder.check_sj.isChecked();
list.get(i).setChecked(isChecked);
List<MainBean.DataBean.ListBean> listChild = MainAdapter.this.list.get(i).getList();
for (int j=0;j<listChild.size();j++){
listChild.get(j).setChekced(isChecked);
}
notifyItemChanged(i);
mChannerListener.changeList(list);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public void setList(List<MainBean.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
public class ShowViewHolder extends RecyclerView.ViewHolder{
private RecyclerView recyclerView;
private CheckBox check_sj;
private TextView text_sj;
public ShowViewHolder(@NonNull View itemView) {
super(itemView);
check_sj = itemView.findViewById(R.id.check_sj);
text_sj = itemView.findViewById(R.id.text_sj);
recyclerView = itemView.findViewById(R.id.recyclerView);
}
}
private ChannerListener mChannerListener;
public void setChannerListener(ChannerListener mChannerListener){
this.mChannerListener=mChannerListener;
}
public interface ChannerListener{
void changeList(List<MainBean.DataBean>list);
}
}
//MainShowAdapter
package com.example.ykmn_zh1.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.ykmn_zh1.R;
import com.example.ykmn_zh1.bean.MainBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;
import java.util.List;
public class MainShowAdapter extends RecyclerView.Adapter<MainShowAdapter.ShopViewHolder>{
private Context context;
private List<MainBean.DataBean.ListBean> listBeans = new ArrayList<>();
public MainShowAdapter(Context context, List<MainBean.DataBean.ListBean> listBeans) {
this.context = context;
this.listBeans = listBeans;
}
public void setListBeans(List<MainBean.DataBean.ListBean> listBeans) {
this.listBeans = listBeans;
notifyDataSetChanged();
}
@NonNull
@Override
public ShopViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.adapter_show, null);
ShopViewHolder shopViewHolder = new ShopViewHolder(view);
return shopViewHolder;
}
@Override
public void onBindViewHolder(@NonNull final ShopViewHolder shopViewHolder, final int i) {
shopViewHolder.check_sp.setChecked(listBeans.get(i).isChekced());
shopViewHolder.simple.setImageURI(listBeans.get(i).getImages());
shopViewHolder.text_sp.setText(listBeans.get(i).getTitle());
shopViewHolder.text_jg.setText(listBeans.get(i).getPrice()+"");
//判断商品是否选中
shopViewHolder.check_sp.setChecked( listBeans.get(i).isChekced());
shopViewHolder.check_sp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecket = shopViewHolder.check_sp.isChecked();
listBeans.get(i).setChekced(isChecket);
mChannerListener.changeList(listBeans);
}
});
}
@Override
public int getItemCount() {
return listBeans.size();
}
public class ShopViewHolder extends RecyclerView.ViewHolder{
private CheckBox check_sp;
private SimpleDraweeView simple;
private TextView text_sp;
private TextView text_jg;
public ShopViewHolder(@NonNull View itemView) {
super(itemView);
check_sp = itemView.findViewById(R.id.check_sp);
simple = itemView.findViewById(R.id.simple);
text_sp = itemView.findViewById(R.id.text_sp);
text_jg = itemView.findViewById(R.id.text_jg);
}
}
private ChannerListener mChannerListener;
public void setChannerListener(ChannerListener mChannerListener){
this.mChannerListener=mChannerListener;
}
public interface ChannerListener{
void changeList(List<MainBean.DataBean.ListBean>list);
}
}
//头像上传
package com.example.ykmn_zh1.fragment;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.Toast;
import com.example.ykmn_zh1.R;
import com.example.ykmn_zh1.bean.TouXiang;
import com.example.ykmn_zh1.mvp.model.MainModelIml;
import com.example.ykmn_zh1.mvp.presenter.MainPresenterIml;
import com.example.ykmn_zh1.mvp.view.MainView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.io.File;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class Fragment2 extends Fragment implements MainView {
private SimpleDraweeView tou_simple;
private MainPresenterIml mainPresenterIml;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
tou_simple = view.findViewById(R.id.tou_simple);
mainPresenterIml = new MainPresenterIml(new MainModelIml(), this);
tou_simple.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_PICK,null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent,1);
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==1) {
Uri uri = data.getData();
tou_simple.setImageURI(uri);
String[] arr={MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().managedQuery(uri, arr, null, null, null);
int img_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String img_path = cursor.getString(img_index);
File file=new File(img_path);
if (file!=null && file.exists()) {
RequestBody requestBody=RequestBody.create(MediaType.parse("image/*"),file.getAbsoluteFile());
MultipartBody.Part part = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
//调用头像的p层
mainPresenterIml.doTou(part);
}else{
Toast.makeText(getActivity(), "请选择文件", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void success(Object data) {
TouXiang touXiang= (TouXiang) data;
Log.d("touxiangshangchuan", touXiang.getHeadPath());
tou_simple.setImageURI(touXiang.getHeadPath());
}
@Override
public void fail(Object error) {
}
}
//HttpListener
package com.example.ykmn_zh1.api;
import com.example.ykmn_zh1.bean.MainBean;
import com.example.ykmn_zh1.bean.TouXiang;
import io.reactivex.Flowable;
import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
public interface HttpListener {
@GET(Api.SHANGPIN)
Flowable<MainBean> getShuju();
@Multipart
@POST(Api.TOUXIANG)
Flowable<TouXiang> getTouXiang(@Header("userId") int userId, @Header("sessionId") String sessionId, @Part MultipartBody.Part filePart);
}
//权限