一:adapter
public class BannerAdapter extends PagerAdapter{
private Context context;
private List<BannerBean.DataBean> data;
public BannerAdapter(Context context, List<BannerBean.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(imageView.getScaleType().FIT_XY);
BannerBean.DataBean dataBean = data.get(position % data.size());
String icon = dataBean.getIcon();
Picasso.with(context).load(icon).into(imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
二:APP
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ZXingLibrary.initDisplayOpinion(this);
}
}
三:bean
1.轮播bean
public class BannerBean {
/**
* msg :
* code : 0
* data : [{"aid":1,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad1.png","productId":null,"title":"第十三界瑞丽模特大赛","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":2,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad2.png","productId":null,"title":"文化艺术节","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":3,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad3.png","productId":null,"title":"直播封面标准","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":4,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad4.png","productId":"1","title":"人气谁最高,金主谁最豪气","type":1,"url":""}]
*/
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* aid : 1
* createtime : 2017-12-26T21:49:44
* icon : https://www.zhaoapi.cn/images/quarter/ad1.png
* productId : null
* title : 第十三界瑞丽模特大赛
* type : 0
* url : http://m.mv14449315.icoc.bz/index.jsp
*/
private int aid;
private String createtime;
private String icon;
private Object productId;
private String title;
private int type;
private String url;
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Object getProductId() {
return productId;
}
public void setProductId(Object productId) {
this.productId = productId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
2.登录bean
public class LoginBean {
/**
* msg : 登录成功
* code : 0
* data : {"age":null,"appkey":"f03996cd9a5511ba","appsecret":"6B8C24FA27343594C1B31C6DFD141360","createtime":"2018-10-13T10:36:50","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"15727398888","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"0A2406D55510172252577C668DC478FA","uid":21231,"userId":null,"username":"15727398888"}
*/
private String msg;
private String code;
private DataBean data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* age : null
* appkey : f03996cd9a5511ba
* appsecret : 6B8C24FA27343594C1B31C6DFD141360
* createtime : 2018-10-13T10:36:50
* email : null
* fans : null
* follow : null
* gender : null
* icon : null
* latitude : null
* longitude : null
* mobile : 15727398888
* money : null
* nickname : null
* password : 8F669074CAF5513351A2DE5CC22AC04C
* praiseNum : null
* token : 0A2406D55510172252577C668DC478FA
* uid : 21231
* userId : null
* username : 15727398888
*/
private Object age;
private String appkey;
private String appsecret;
private String createtime;
private Object email;
private Object fans;
private Object follow;
private Object gender;
private Object icon;
private Object latitude;
private Object longitude;
private String mobile;
private Object money;
private Object nickname;
private String password;
private Object praiseNum;
private String token;
private int uid;
private Object userId;
private String username;
public Object getAge() {
return age;
}
public void setAge(Object age) {
this.age = age;
}
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Object getEmail() {
return email;
}
public void setEmail(Object email) {
this.email = email;
}
public Object getFans() {
return fans;
}
public void setFans(Object fans) {
this.fans = fans;
}
public Object getFollow() {
return follow;
}
public void setFollow(Object follow) {
this.follow = follow;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public Object getIcon() {
return icon;
}
public void setIcon(Object icon) {
this.icon = icon;
}
public Object getLatitude() {
return latitude;
}
public void setLatitude(Object latitude) {
this.latitude = latitude;
}
public Object getLongitude() {
return longitude;
}
public void setLongitude(Object longitude) {
this.longitude = longitude;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Object getMoney() {
return money;
}
public void setMoney(Object money) {
this.money = money;
}
public Object getNickname() {
return nickname;
}
public void setNickname(Object nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Object getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(Object praiseNum) {
this.praiseNum = praiseNum;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public Object getUserId() {
return userId;
}
public void setUserId(Object userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
}
四:Httputils
public class HttpUtil {
private static volatile HttpUtil instance;
public OkHttpClient okhttpClient;
private HttpUtil() {
if (okhttpClient == null) {
synchronized (OkHttpClient.class) {
if (null == okhttpClient) {
okhttpClient = new OkHttpClient();
}
}
}
}
public static HttpUtil getInstance() {
if (instance == null) {
synchronized (HttpUtil.class) {
if (null == instance) {
instance = new HttpUtil();
}
}
}
return instance;
}
public void get(String urlString, Callback callback) {
Request request = new Request.Builder().url(urlString).build();
okhttpClient.newCall(request).enqueue(callback);
}
}
五:mvp,BaseMvp
ublic class BaseMVP {
public interface IPresenter<I> {
void attch(IView iView);
void detch();
void request(String password, String text);
}
public interface IModel{
void getData(String password, String text, OnCallBack onCallBack);
interface OnCallBack{
void result(String string);
}
}
public interface IView{
void showView(String json);
}
public interface IRegPresenter<I> {
void attchReg(RegActivity regActivity);
void detchReg();
void regRequest();
}
}
六:MVP,Model
public class Model implements BaseMVP.IModel{
private String url = "https://www.zhaoapi.cn/user/login";
private static final String TAG = "Model";
@Override
public void getData(String password, String text, final OnCallBack onCallBack) {
String URL = url+"?mobile="+text+"&password="+password;
HttpUtil instance = HttpUtil.getInstance();
instance.get(URL, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String message = e.getMessage();
onCallBack.result(message);
Log.d(TAG, "onFailure: "+message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
onCallBack.result(string);
Log.d(TAG, "onResponse: "+string);
}
});
}
}
七:mvp,presenter
1.loginpresenter
public class LoginPresenter implements BaseMVP.IPresenter<BaseMVP.IView> {
BaseMVP.IView iView;
private Model model;
@Override
public void attch(BaseMVP.IView iView) {
this.iView = iView;
model = new Model();
}
@Override
public void detch() {
if (iView != null){
iView = null;
}
}
@Override
public void request(String password, String text) {
model.getData(password,text, new BaseMVP.IModel.OnCallBack() {
@Override
public void result(String string) {
iView.showView(string);
}
});
}
}
2.registerpresen
public class RegPresenter implements BaseMVP.IRegPresenter<BaseMVP.IView> {
@Override
public void attchReg(RegActivity regActivity) {
}
@Override
public void detchReg() {
}
@Override
public void regRequest() {
}
}
八:view,activity
1.LoginActivity
public class LoginActivity extends AppCompatActivity implements View.OnClickListener,BaseMVP.IView {
private EditText login_password;
private EditText login_text;
private BaseMVP.IPresenter<BaseMVP.IView> loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginPresenter = new LoginPresenter();
loginPresenter.attch(this);
initView();
}
private void initView() {
Button login_loginbut = findViewById(R.id.login_loginbut);
login_password = findViewById(R.id.login_password);
login_text = findViewById(R.id.login_text);
TextView login_reg = findViewById(R.id.login_reg);
login_loginbut.setOnClickListener(this);
login_reg.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.login_loginbut:
String password = login_password.getText().toString();
String text = login_text.getText().toString();
loginPresenter.request(password,text);
break;
case R.id.login_reg:
Intent intent = new Intent(LoginActivity.this,RegActivity.class);
startActivity(intent);
break;
}
}
@Override
public void showView(final String string) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
LoginBean loginBean = gson.fromJson(string, LoginBean.class);
String msg = loginBean.getMsg();
Toast.makeText(LoginActivity.this, msg+"", Toast.LENGTH_SHORT).show();
if (msg.contains("登录成功")){
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
loginPresenter.detch();
}
}
2.MainActivity
public class MainActivity extends AppCompatActivity {
private FrameLayout frament;
private RadioGroup radio;
private RadioButton homepage;
private RadioButton me;
private FragmentManager manager;
private HomePage homePage;
private MeFragment meFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
frament = findViewById(R.id.frament);
radio = findViewById(R.id.radio);
homepage = findViewById(R.id.homepage);
me = findViewById(R.id.me);
homePage = new HomePage();
meFragment = new MeFragment();
//默认选中页面
manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.frament, homePage).commit();
//替换fragmnet
radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction beginTransaction = manager.beginTransaction();
switch (checkedId) {
case R.id.homepage:
beginTransaction.replace(R.id.frament, homePage);
break;
case R.id.me:
beginTransaction.replace(R.id.frament, meFragment);
break;
}
beginTransaction.commit();
}
});
}
}
3.RegActivity
public class RegActivity extends AppCompatActivity implements BaseMVP.IView, View.OnClickListener {
private EditText reg_password;
private EditText reg_text;
private BaseMVP.IPresenter<BaseMVP.IView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
presenter = new LoginPresenter();
presenter.attch(this);
initView();
}
private void initView() {
Button reg_but = findViewById(R.id.reg_but);
reg_password = findViewById(R.id.reg_password);
reg_text = findViewById(R.id.reg_text);
reg_but.setOnClickListener(this);
}
@Override
public void showView(String json) {
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.reg_but:
String password = reg_password.getText().toString();
String text = reg_text.getText().toString();
presenter.request("","");
break;
}
}
}
九:fragment
1.HomePage
public class HomePage extends Fragment implements View.OnClickListener {
private View inflate;
private int REQUEST_CODE = 1000;
private EditText code_edit;
private ImageView code_img;
private ViewPager banner;
private String BannerURL = "https://www.zhaoapi.cn/ad/getAd";
public HomePage() {
// Required empty public constructor
}
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0){
int currentItem = banner.getCurrentItem();
banner.setCurrentItem(currentItem+1);
sendEmptyMessageDelayed(0,2000);
}
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
inflate = inflater.inflate(R.layout.fragment_home_page, container, false);
initView();
return inflate;
}
private void initView() {
banner = inflate.findViewById(R.id.banner);
Button code_button = inflate.findViewById(R.id.code_button);
code_edit = inflate.findViewById(R.id.code_edit);
code_img = inflate.findViewById(R.id.code_img);
TextView code = inflate.findViewById(R.id.code);
code.setOnClickListener(this);
code_button.setOnClickListener(this);
//轮播图
HttpUtil instance = HttpUtil.getInstance();
instance.get(BannerURL, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String message = e.getMessage();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
BannerBean bannerBean = gson.fromJson(string, BannerBean.class);
List<BannerBean.DataBean> data = bannerBean.getData();
BannerAdapter bannerAdapter = new BannerAdapter(getActivity(),data);
banner.setAdapter(bannerAdapter);
handler.sendEmptyMessageDelayed(0,2000);
}
});
}
});
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.code:
Intent intent = new Intent(getContext(), CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
break;
case R.id.code_button:
String edit_text = code_edit.getText().toString();
if (TextUtils.isEmpty(edit_text)) {
Toast.makeText(getContext(), "您的输入为空!", Toast.LENGTH_SHORT).show();
return;
}
code_edit.setText("");
Bitmap mBitmap = CodeUtils.createImage(edit_text, 400, 400, null);
code_img.setImageBitmap(mBitmap);
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
//处理扫描结果(在界面上显示)
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(getContext(), "解析结果:" + result, Toast.LENGTH_LONG).show();
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(getContext(), "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}
}
2.MyFragment
public class MeFragment extends Fragment {
private View inflate;
private Button me_login;
public MeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
inflate = inflater.inflate(R.layout.fragment_me, container, false);
initView();
return inflate;
}
private void initView() {
me_login = inflate.findViewById(R.id.me_login);
me_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(), LoginActivity.class);
startActivity(intent);
}
});
}
}
十:加入权限
<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" />