##application
public class ZxingApplication extends Application implements Thread.UncaughtExceptionHandler{
@Override
public void onCreate() {
super.onCreate();
//qq
UMConfigure.init(this, “5c3b1c25b465f5ca0700095c”, “Umeng”, UMConfigure.DEVICE_TYPE_PHONE,"");
PlatformConfig.setQQZone(“100424468”, “c7394704798a158208a74ab60104f0ba”);
UMConfigure.setLogEnabled(true);
//捕获异常
Thread.setDefaultUncaughtExceptionHandler(this);
//zxing
ZXingLibrary.initDisplayOpinion(this);
}
//捕获异常
@Override
public void uncaughtException(Thread t, Throwable e) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
e.printStackTrace(printWriter);
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(ZxingApplication.this,“捕获到异常”,Toast.LENGTH_SHORT).show();
Looper.loop();
}
}).start();
}
}
##清单文件
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 -->
<uses-feature android:name="android.hardware.camera.autofocus" />
<application
android:name=".app.ZxingApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent100424468" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
<activity android:name=".MainActivity" />
<activity android:name=".ZxingActivity"></activity>
</application>
##多条目布局
public class HomeAdapter extends XRecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private ProlistBean.DataBean list;
public HomeAdapter(Context context, ProlistBean.DataBean list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if (getItemViewType(i)==0){
View inflate = LayoutInflater.from(context).inflate(R.layout.fen_layout, viewGroup, false);
FenVH fenVH = new FenVH(inflate);
return fenVH;
}else if (getItemViewType(i)==1){
View inflate = LayoutInflater.from(context).inflate(R.layout.miao_layout, viewGroup, false);
MiaoVH miaoVH = new MiaoVH(inflate);
return miaoVH;
}else {
View inflate = LayoutInflater.from(context).inflate(R.layout.tui_layout, viewGroup, false);
TuiVH tuiVH = new TuiVH(inflate);
return tuiVH;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof FenVH){
((FenVH) viewHolder).rc_fen.setLayoutManager(new GridLayoutManager(context,2,GridLayoutManager.HORIZONTAL,false));
Fenadapter fenadapter = new Fenadapter(context,list.fenlei);
((FenVH) viewHolder).rc_fen.setAdapter(fenadapter);
}else if(viewHolder instanceof MiaoVH){
((MiaoVH) viewHolder).rc_miao.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false));
Miaoadapter miaoadapter = new Miaoadapter(context,list.miaosha.list);
((MiaoVH) viewHolder).rc_miao.setAdapter(miaoadapter);
}else {
((TuiVH) viewHolder).rc_tui.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false));
Tuiadapter tuiadapter = new Tuiadapter(context,list.tuijian.list);
((TuiVH) viewHolder).rc_tui.setAdapter(tuiadapter);
}
}
@Override
public int getItemCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
if (position==0){
return 0;
}else if(position==1){
return 1;
}else {
return 2;
}
}
class FenVH extends RecyclerView.ViewHolder{
RecyclerView rc_fen;
public FenVH(@NonNull View itemView) {
super(itemView);
rc_fen = itemView.findViewById(R.id.rc_fen);
}
}
class MiaoVH extends RecyclerView.ViewHolder{
ImageView miao_img;
TextView miao_price;
RecyclerView rc_miao;
public MiaoVH(@NonNull View itemView) {
super(itemView);
rc_miao = itemView.findViewById(R.id.rc_miao);
/*miao_img = itemView.findViewById(R.id.miao_img);
miao_price = itemView.findViewById(R.id.miao_price);*/
}
}
class TuiVH extends RecyclerView.ViewHolder{
ImageView tui_img;
TextView tui_name;
RecyclerView rc_tui;
public TuiVH(@NonNull View itemView) {
super(itemView);
rc_tui = itemView.findViewById(R.id.rc_tui);
/*tui_img = itemView.findViewById(R.id.tui_img);
tui_name = itemView.findViewById(R.id.tui_name);*/
}
}
}
##分类adapter
public class Fenadapter extends RecyclerView.Adapter<Fenadapter.VH> {
private Context context;
private List<ProlistBean.DataBean.FenleiBean> list;
public Fenadapter(Context context, List<ProlistBean.DataBean.FenleiBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public Fenadapter.VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item1, viewGroup, false);
VH vh = new VH(inflate);
return vh;
}
@Override
public void onBindViewHolder(@NonNull VH vh, int i) {
ProlistBean.DataBean.FenleiBean fenleiBean = list.get(i);
vh.fen_name.setText(fenleiBean.name);
Glide.with(context).load(fenleiBean.icon).into(vh.fen_img);
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class VH extends RecyclerView.ViewHolder {
ImageView fen_img;
TextView fen_name;
public VH(@NonNull View itemView) {
super(itemView);
fen_img = itemView.findViewById(R.id.fen_img);
fen_name = itemView.findViewById(R.id.fen_name);
}
}
##契约类
public interface Contract {
public abstract class IHomePresenter{
public abstract void getBanner(HashMap<String,String> map);
//public abstract void getProlist(HashMap<String,String> map);
}
interface IHomeModel{
void getBanner(HashMap<String,String> map, RequestCallback requestCallback);
//void getProlist(HashMap<String,String> map, RequestCallback requestCallback);
}
interface IHomewView{
void onBannerFail(String msg);
void onBannerSucc(List<ProlistBean.DataBean.BannerBean> bannerBean);
void onProFail(String msg);
void onProSuccess(ProlistBean.DataBean probean);
}
}
##model
public class HomeMdel implements Contract.IHomeModel {
Handler handler = new Handler();
@Override
public void getBanner(HashMap<String, String> map, final RequestCallback requestCallback) {
OkhttpUtil.getInstance().Post(map, HomeApi.HOME_URL, new OkhttpCallback() {
@Override
public void onFailok(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
requestCallback.onFailok(msg);
}
});
}
@Override
public void onSuccessok(final String result) {
handler.post(new Runnable() {
@Override
public void run() {
requestCallback.onSuccessok(result);
}
});
}
});
}
}
##p
public class HomePresenter extends Contract.IHomePresenter {
private HomeMdel homeMdel;
private Contract.IHomewView iHomewView;
public HomePresenter( Contract.IHomewView iHomewView) {
this.homeMdel = new HomeMdel();
this.iHomewView = iHomewView;
}
@Override
public void getBanner(HashMap<String, String> map) {
homeMdel.getBanner(map, new RequestCallback() {
@Override
public void onFailok(String msg) {
iHomewView.onBannerFail(msg);
}
@Override
public void onSuccessok(String result) {
ProlistBean prolistBean = new Gson().fromJson(result, ProlistBean.class);
List<ProlistBean.DataBean.BannerBean> banner = prolistBean.data.banner;
iHomewView.onBannerSucc(banner);
ProlistBean.DataBean data = prolistBean.data;
iHomewView.onProSuccess(data);
}
});
}
}
##homeavtivity
public class HomeActivity extends AppCompatActivity implements Contract.IHomewView {
private ImageView img_sao;
private List<String> imgesUrl;
private String image;
private XBanner xbanner;
private HomePresenter homePresenter;
private XRecyclerView xrc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
xbanner = findViewById(R.id.xbanner);
img_sao = findViewById(R.id.img_sao);
xrc = findViewById(R.id.xrc);
img_sao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(HomeActivity.this,ZxingActivity.class);
startActivity(intent);
}
});
homePresenter = new HomePresenter(this);
homePresenter.getBanner(new HashMap<String, String>());
}
@Override
public void onBannerFail(String msg) {
}
@Override
public void onBannerSucc(List<ProlistBean.DataBean.BannerBean> bannerBean) {
imgesUrl = new ArrayList<>();
for (int i=0;i<bannerBean.size();i++) {
image = bannerBean.get(i).icon;
imgesUrl.add(image);
}
xbanner.setData(imgesUrl,null);
//加载广告图片
xbanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
//1、此处使用的Glide加载图片,可自行替换自己项目中的图片加载框架
//2、返回的图片路径为Object类型,你只需要强转成你传输的类型就行,切记不要胡乱强转!
Glide.with(HomeActivity.this).load(imgesUrl.get(position)).into((ImageView) view);
}
});
}
@Override
public void onProFail(String msg) {
}
@Override
public void onProSuccess(ProlistBean.DataBean proBean) {
xrc.setLayoutManager(new LinearLayoutManager(this));
HomeAdapter homeAdapter = new HomeAdapter(this,proBean);
xrc.setAdapter(homeAdapter);
}
}
##okutil
public class OkhttpUtil {
private static OkhttpUtil instance;
private final OkHttpClient okHttpClient;
private OkhttpUtil() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.build();
}
public static OkhttpUtil getInstance(){
if (instance==null){
synchronized (OkhttpUtil.class){
if (instance==null){
instance = new OkhttpUtil();
}
}
}
return instance;
}
public void Post(final HashMap<String,String> map, String url, final OkhttpCallback callback){
FormBody.Builder formBody = new FormBody.Builder();
for (Map.Entry<String, String> m : map.entrySet()) {
formBody.add(m.getKey(),m.getValue());
}
Request request = new Request.Builder()
.url(url)
.post(formBody.build())
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callback.onFailok("请求失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.onSuccessok(response.body().string());
}
});
}
public void Get(HashMap<String,String> map, String url, final OkhttpCallback callback){
Request request = new Request.Builder()
.url(url)
.get()
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callback.onFailok(“请求失败”);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.onSuccessok("请求成功!");
}
});
}
public void cencal(){
okHttpClient.dispatcher().cancelAll();
}
}
##xbanner布局
<com.stx.xhb.xbanner.XBanner
xmlns:app=“http://schemas.android.com/apk/res-auto”
android:id="@+id/xbanner"
android:layout_marginTop=“50dp”
android:layout_width="wrap_content"
android:layout_height="150dp"
app:AutoPlayTime="3000"
app:pointsContainerBackground="#44aaaaaa"
app:pointsPosition="RIGHT"
app:tipTextSize="12sp"
app:isShowNumberIndicator="true"
app:isShowIndicatorOnlyOne="true"
app:pageChangeDuration="800"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sear"
app:layout_constraintBottom_toTopOf="@+id/xrc"/>