用到的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
用到的依赖
implementation 'com.squareup.okhttp3:okhttp:3.7.0'
implementation 'com.squareup.okio:okio:1.12.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.xhb:xbanner:1.2.2'
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
在这里插入代码片
View层接口
public interface IView {
void String();
}
P层接口
public interface IPresenter {
void GetPre();
void GetImg();
}
Model层接口
public interface IMdodel {
void img(String url,ImgCallback imgCallback);
interface ImgCallback{
void Success(String data);
void Fail(String data);
}
void show(String url, Callback callback);
interface Callback{
void Success(String data);
}
}
Main里面代码
public class Fragment02 extends Fragment{
private XBanner mXbanner;
private Presenter presenter;
private XRecyclerView mXrecyview;
private ShowAadpter aadpter;
private ShowBean showBean;
private List<ShowBean.ResultBean> result;
private GridLayoutManager gridLayoutManager;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment02,container,false);
mXbanner = view.findViewById(R.id.mXBanner);
mXrecyview = view.findViewById(R.id.mXRectrView);
gridLayoutManager = new GridLayoutManager(getContext(), 1);
mXrecyview.setLayoutManager(gridLayoutManager);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//实例化p层
presenter = new Presenter(this);
presenter.GetImg();
presenter.GetPre();
}
//XBanner轮播图
public void showimg(final String data) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
final List<String> list = new ArrayList<>();
LunBean lunBean = gson.fromJson(data, LunBean.class);
List<LunBean.ResultBean> result = lunBean.getResult();
for (int i=0;i<result.size();i++){
list.add(result.get(i).getImageUrl());
}
mXbanner.setData(list,null);
mXbanner.setmAdapter(new XBanner.XBannerAdapter(){
@Override
public void loadBanner(XBanner banner, View view, int position) {
Glide.with(getActivity()).load(list.get(position)).into((ImageView) view);
}
});
mXbanner.setPageTransformer(Transformer.Default);
mXbanner.setPageChangeDuration(3000);
}
});
}
//首页展示
public void showview(final String data) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
showBean = gson.fromJson(data, ShowBean.class);
result = showBean.getResult();
aadpter = new ShowAadpter(getActivity(), result);
mXrecyview.setAdapter(aadpter);
//点击跳转详情页展示
aadpter.setRecyclerviewLister(new ShowAadpter.RecyclerviewLister(){
@Override
public void callBack(int i, String id) {
Intent intent = new Intent(getActivity(), Main2Activity.class);
intent.putExtra("id", id);
startActivity(intent);
}
});
}
});
}
}
在Main层实例P层,p层代码
/*Time:2019/3/28
*Author:zhaozhiwei
*Description:
*/public class Presenter implements IPresenter {
private final Model model;
Fragment02 fragment02;
String Base_url="http://172.17.8.100/small/commodity/v1/bannerShow";
String Base_ur2="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword=1&page=1&count=71";
public Presenter(Fragment02 fragment02){
this.fragment02=fragment02;
model = new Model();
}
//展示
@Override
public void GetPre() {
model.show(Base_ur2 , new IMdodel.Callback() {
@Override
public void Success(String data) {
fragment02.showview(data);
}
});
}
//XBanner
@Override
public void GetImg() {
model.img(Base_url, new IMdodel.ImgCallback() {
@Override
public void Success(String data) {
fragment02.showimg(data);
}
@Override
public void Fail(String data) {
}
});
}
}
在P层实例了M层,M层代码
/*Time:2019/3/28
*Author:zhaozhiwei
*Description:
*/public class Model implements IMdodel {
@Override
public void img(String url, final ImgCallback imgCallback) {
OkHttp.getInstance().doGet(url,new okhttp3.Callback(){
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
imgCallback.Success(response.body().string());
}
});
}
@Override
public void show(String url, final Callback callback) {
OkHttp.getInstance().doGet(url,new okhttp3.Callback(){
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.Success(response.body().string());
}
});
}
}
在P层用到了okhttp,它的封装
public class OkHttpUtilllll {
private OkHttpClient client;
private static OkHttpUtilllll instance;
private OkHttpUtilllll() {
client = new OkHttpClient.Builder()
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.addInterceptor(new HeaderInterceptor())
.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
if (message.startsWith("{") || message.startsWith("[")) {
Logger.t("======").json(message);
} else {
Logger.t("======").d(message);
}
}
}).setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
}
public static OkHttpUtilllll getInstance() {
if (instance == null) {
instance = new OkHttpUtilllll();
}
return instance;
}
public void doGet(String url) {
Request request = null;
request = new Request.Builder()
.url(url)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String jsonData = response.body().string();
}
});
}
MediaType jsonType = MediaType.parse("application/json;utf-8");
// MediaType formType = MediaType.parse("application/json;utf-8");
Gson gson = new Gson();
public void doPost(String url, Map<String, Object> params) {
Request request = null;
RequestBody body = null;
FormBody.Builder builder = new FormBody.Builder();
//通过keyset遍历map
Set<String> keySet = params.keySet();
for (String key : keySet) {
builder.add(key, (String) params.get(key));
}
Set<Map.Entry<String, Object>> entrySet = params.entrySet();
//通过entry遍历map
// for (Map.Entry entry : entrySet) {
// String key = (String) entry.getKey();
// String value = (String) entry.getValue();
// builder.add(key, value);
// }
//通过迭代器遍历
// Iterator<String> iterator = keySet.iterator();
// while (iterator.hasNext()){
// String next = iterator.next();
// String value = (String) params.get(next);
// builder.add(next,value);
// }
body = builder.build();
request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
}
最后在现实页面的适配器代码
/*Time:2019/3/29
*Author:zhaozhiwei
*Description:
*/public class ShowAadpter extends RecyclerView.Adapter<ShowAadpter.ViewHolder> {
Context context;
List<ShowBean.ResultBean> list;
public ShowAadpter(Context context, List<ShowBean.ResultBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, final int i) {
final View view = LayoutInflater.from(context).inflate(R.layout.showitem,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
Glide.with(context).load(list.get(i).getMasterPic()).into(viewHolder.mImage);
viewHolder.mText.setText(list.get(i).getCommodityName());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recyclerviewLister.callBack(v.getId(),String.valueOf(list.get(i).getCommodityId()));
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mText;
private final ImageView mImage;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mText = itemView.findViewById(R.id.mText);
mImage = itemView.findViewById(R.id.mImage);
}
}
RecyclerviewLister recyclerviewLister;
public void setRecyclerviewLister(RecyclerviewLister recyclerviewLister){
this.recyclerviewLister=recyclerviewLister;
};
public interface RecyclerviewLister{
void callBack(int i,String id);
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#ced"
android:orientation="vertical"
android:layout_height="wrap_content">
<com.stx.xhb.xbanner.XBanner
android:id="@+id/mXBanner"
android:layout_width="match_parent"
android:layout_height="300dp"/>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/mXRectrView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
显示布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<ImageView
android:layout_width="0dp"
android:layout_weight="3"
android:layout_marginTop="10dp"
android:layout_height="140dp"
android:background="@drawable/shape_radius"
android:id="@+id/mImage"/>
<TextView
android:layout_width="0dp"
android:layout_weight="7"
android:background="@drawable/shape_radius"
android:gravity="center"
android:textSize="23dp"
android:layout_marginTop="10dp"
android:layout_height="150dp"
android:id="@+id/mText"/>
</LinearLayout>
public class HeaderInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
builder.addHeader("sessionId","123321");
builder.addHeader("userId","1");
return chain.proceed(builder.build());
}
}