public interface DataCall {
void callback(Object data);
void faild(String error);
void showcallback(News news);
}
1
2
3
4
5
6
7
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;
}
1
2
3
4
5
6
7
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;
}
1
2
3
4
5
6
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;
}
1
2
3
4
5
6
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 “”;
}
1
2
3
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);
1
2
3
Presenter
return LoginModel.login(args[0], args[1]);
return RegisterModel.register(args[0], args[1]);
1
2
3
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();
}
1
2
3
4
5
Activity
Activity实现 接口 重写方法
展示一定记得传page
1
2
3
4
##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) {
}
1
2
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() {
@Override
public void onPullDownToRefresh(PullToRefreshBase 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;
}
}
1
2
3
4
5
生成二维码
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;
}
作者:疯狂键盘侠
来源:CSDN
原文:https://blog.csdn.net/LG_lxb/article/details/84878778
版权声明:本文为博主原创文章,转载请附上博文链接!