MVP简易登录注册+PullTo展示数据

所需依赖

************切记不要忘记添加app  注意导Libraryku*******************

implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.5'
implementation files('libs/universal-image-loader-1.9.5.jar')
implementation 'com.google.code.gson:gson:2.2.4'

DataCall—定义接口

public interface DataCall {
    void callback(Object data);

    void faild(String error);

    void showcallback(News news);
}

LoginModel

 public static User login(String mobile, String password) {
        String loginData = HttpUtils.get("http://www.zhaoapi.cn/user/login?mobile="
                + mobile + "&password=" + password);
        Gson gson = new Gson();
        User user = gson.fromJson(loginData, User.class);
        return user;
    }

RegisterModel

 public static User register(String mobole, String password) {
        String loginData = HttpUtils.get("http://www.zhaoapi.cn/user/reg?mobile=" + mobole + "&password=" + password);
        Gson gson = new Gson();
        User user = gson.fromJson(loginData, User.class);
        return user;
    }

ShowModel

   public static News sel(int page){
        String news_data = HttpUtils.get("http://api.tianapi.com/huabian/?key=0a62585968ff23c66d052aec24bc6cc1&num=10&page="+page);
        Gson gson = new Gson();
        News news = gson.fromJson(news_data, News.class);
        return news;
    }

HttpUtils

public static String get(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = connection.getInputStream();//获取网络返回的输入流;
            //可拼接的字符串
            StringBuilder stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String temp = "";
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuilder.append(temp);
                temp = "";
            }
            //这个是网络获取的数据
            String data = stringBuilder.toString();
            Log.d(TAG, "get: +++++"+data);
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

BasePresenter–基类

*******一定要是抽象类********

 private final DataCall call;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            User user = (User) msg.obj;
            String u = user.getCode();
            int u2 = Integer.parseInt(u);
            if (u2 == 0) {
                call.callback(msg.obj);

            } else {
                call.faild(u);
            }
        }
    };

    public BasePresenter(DataCall dataCall) {
        call = dataCall;
    }

    public void request(final String... args) {
        new Thread() {
            @Override
            public void run() {
                super.run();
                Object data = useModel(args);
                //handler
                Message message = handler.obtainMessage();
                message.obj = data;
                handler.sendMessage(message);
            }
        }.start();
    }

    /**
     * 这个方法被子类实现之后,方法里面调用model获取数据
     */
    public abstract Object useModel(String... args);

Presenter

 return LoginModel.login(args[0], args[1]);
 
 return RegisterModel.register(args[0], args[1]);

ShowPresenter

 private final DataCall dataCall;

    public ShowPresenter(DataCall back) {
        dataCall = back;
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            News news = (News) msg.obj;
            dataCall.showcallback(news);
        }
    };

    public void sel(final int page) {
        new Thread() {
            @Override
            public void run() {
                super.run();
                News news = ShowModel.sel(page);
                Message message = handler.obtainMessage();
                message.obj = news;
                handler.sendMessage(message);
            }
        }.start();

    }

Activity

Activity实现 接口 重写方法

展示一定记得传page

##Login Activity

//初始化控件
        initView();
        //创建sp
        sp = getSharedPreferences("config.txt", Context.MODE_PRIVATE);
        //判断是否记住密码
        rememberPwd();
        //判断自动登录
        autoPwd();
        //设置监听---------状态改变  自动登录
        mBtnBcpwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (mBtnBcpwd.isChecked()) {
                    mBtnJzpwd.setChecked(true);
                }

            }
        });
        ////设置监听---------状态改变  记住密码
        mBtnJzpwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!mBtnJzpwd.isChecked()) {
                    mBtnBcpwd.setChecked(false);
                }
            }
        });

    }

    //自动登录
    private void autoPwd() {
        boolean auto = sp.getBoolean("auto", false);
        if (auto) {
            Intent intent = new Intent(LoginActivity.this, ShowActivity.class);
            intent.putExtra("name", mobile);//传入用户名  做二维码
            startActivity(intent);
        }
    }

    //记住密码
    private void rememberPwd() {
        //获取传来的账号密码
        String getmoilde = sp.getString("putmoilde", "");
        String getpwd = sp.getString("putpwd", "");
        boolean getremember = sp.getBoolean("putremember", false);
        //判断选中状态
        if (getremember) {
            //选中设置  默认登录显示
            mEdName.setText(getmoilde);
            mEdPwd.setText(getpwd);
            //设置选中
            mBtnJzpwd.setChecked(getremember);
        } else {
            //未选中为空
            mEdName.setText("");
            mEdPwd.setText("");
            mBtnJzpwd.setChecked(false);
        }
    }

    //初始化控件
    private void initView() {
        mEdName = findViewById(R.id.ed_name);
        mEdPwd = findViewById(R.id.ed_pwd);
        mBtnJzpwd = findViewById(R.id.btn_jzpwd);
        mBtnBcpwd = findViewById(R.id.btn_bcpwd);
        mBtnLogin = findViewById(R.id.btn_login);
        mBtnLogin.setOnClickListener(this);
        mLoginReg = findViewById(R.id.login_reg);
        mLoginReg.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btn_login:
                //登录获取输入的账户密码
                mobile = mEdName.getText().toString();
                password = mEdPwd.getText().toString();
                //p层方法
                presenter.request(mobile, password);
                break;
            case R.id.login_reg:
                //注册页面跳转
                Intent intent = new Intent(this, RegisterActivity.class);
                startActivity(intent);
                break;
        }
    }

    //调用接口
    @Override
    public void callback(Object data) {
        //数据转型
        User user = (User) data;
        Toast.makeText(getBaseContext(), user.getCode() + " " + user.getMsg(), Toast.LENGTH_LONG).show();
        //*********获取记住密码勾选状态
        boolean remember = mBtnJzpwd.isChecked();
        SharedPreferences.Editor edit = sp.edit();
        //获取自动登录状态
        boolean auto = mBtnBcpwd.isChecked();
        //判断是否记住密码
        if (remember) {//勾选传值
            edit.putString("putmoilde", mobile);
            edit.putString("putpwd", password);
            edit.putBoolean("putremember", true);
            //传递---自动登录状态
            edit.putBoolean("auto", auto);
        } else {//未勾选 复选框未选中
            edit.putBoolean("putremember", false);
        }
        edit.commit();
        //登录跳转
        Intent intent = new Intent(LoginActivity.this, ShowActivity.class);
        intent.putExtra("name", mobile);//传入用户名  做二维码
        startActivity(intent);
    }

    @Override
    public void faild(String error) {//异常吐司
        Toast.makeText(getBaseContext(), " 有问题啊老铁", Toast.LENGTH_LONG).show();
    }

    @Override
    public void showcallback(News news) {

    }

ShowActivity

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container, false);
        //初始化控件
        listView = view.findViewById(R.id.pullto);
        presenter = new ShowPresenter(this);
        presenter.sel(page);
        listView.setMode(PullToRefreshBase.Mode.BOTH);
        listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                type = 1;
                page = 1;
                getDataForNet(type, page);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                type = 2;
                page++;
                getDataForNet(type, page);
            }
        });
        return view;
    }

    private void getDataForNet(int type, int page) {
        switch (type) {
            case 0:
                adapter.notifyDataSetChanged();
                break;
            case 1:
                adapter.notifyDataSetChanged();
                listView.onRefreshComplete();
                break;
            case 2:
                presenter.sel(page);
                adapter.notifyDataSetChanged();
                listView.onRefreshComplete();
                break;
        }
    }

    @Override
    public void callback(Object data) {

    }

    @Override
    public void faild(String error) {

    }

    @Override
    public void showcallback(News news) {
        list = news.getNewslist();
        //建立适配器
        adapter = new NewsAdapter(MyApp.getContext(), list);
        listView.setAdapter(adapter);
        if (type == 2) {
            List<News.NewslistBean> list1 = news.getNewslist();
            list.addAll(list1);
            type = 0;
        }
    }

生成二维码

private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
               Bitmap bitmap = (Bitmap) msg.obj;
               imageView.setImageBitmap(bitmap);
        }
    };
    private ImageView imageView;
    private String name;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        imageView = view.findViewById(R.id.img);
        
        Intent intent = getActivity().getIntent();
        name = intent.getStringExtra("name");
   
        new Thread(new Runnable() {
            @Override
            public void run() {
            
               Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode(name, 300);
                Message message = handler.obtainMessage();
                message.obj = bitmap;
                handler.sendMessage(message);
            }
        }) {
        }.start();
        return view;
    }

猜你喜欢

转载自blog.csdn.net/LG_lxb/article/details/84878778