用MVP实现
一、登录页面
1.点击提交按钮后到第二个页面(只有输入正确的手机号和密码才能登陆)
1).新建一个类BaseActivity,继承AppCompatActivity, abstract修饰,定义方法执行
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
//获取布局文件
protected abstract int getLayout();
//初始化
protected abstract void initView();
//设置监听
protected abstract void setOnClick();
//页面逻辑
protected abstract void pageLogic();
void init(){
if (getLayout()!=0){
setContentView(getLayout());
initView();
setOnClick();
pageLogic();
}else {
throw new IllegalStateException("请加载布局文件");
}
}
}
2).MainActivity继承BaseActivity实现在BaseActivity里面写的4个的方法
3).新建一个接口MyCallBack(回调的方法) 泛型
4).①新建一个Model接口
②新建一个类ModelImpel实现Model接口 (注:写一个获取网络数据的工具类)
public class ModelImpl implements Model{
private MyCallBack callBack;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==0){
DLbean myData = (DLbean) msg.obj;
callBack.setData(myData);
}
}
};
@Override
public void getData(final String url, final String mobile, final String password, final MyCallBack callBack) {
this.callBack=callBack;
new Thread(new Runnable() {
@Override
public void run() {
HttpUtils httpUtils=new HttpUtils();
try {
String s = httpUtils.getData(url);
Gson gson=new Gson();
DLbean dLbean = gson.fromJson(s, DLbean.class);
handler.sendMessage(handler.obtainMessage(0,dLbean));
} catch (Exception e) {
Looper.prepare();
callBack.setError("异常");
Looper.loop();
}
}
}).start();
}
}
5).新建一个IView接口
6)①新建Presenter接口
②新建一个类PresenterImpel实现Presenter接口
public class PresenterImpl implements Presenter ,MyCallBack {
private ModelImpl model;
private IView iView;
public PresenterImpl(IView iView) {
this.iView = iView;
model=new ModelImpl();
}
@Override
public void getData(String url, String mobile, String password) {
iView.showName();
model.getData(url,mobile,password,this);
}
@Override
public void setData(Object user) {
iView.success(user);
}
@Override
public void setError(String error) {
iView.error(error);
}
}
7).封装基本类、写适配器
8).MainActivity具体执行代码(完成记住密码和自动登录的选中状态切换)
public class MainActivity extends BaseActivity implements View.OnClickListener,IView {
private EditText mobile;
private EditText password;
private CheckBox Rem_Pass;
private CheckBox login;
private Button tijiao;
private PresenterImpl presenter;
private String mUrl="http://www.xieast.com/api/user/login.php?";
private SharedPreferences sp;
private SharedPreferences.Editor edit;
private Button san;
@Override
protected int getLayout() {
return R.layout.activity_main;
}
@Override
protected void initView() {
mobile=findViewById(R.id.mobile);
password=findViewById(R.id.password);
Rem_Pass=findViewById(R.id.Rem_Pass);
login=findViewById(R.id.login);
tijiao=findViewById(R.id.tijiao);
san = findViewById(R.id.san);
//自动登录 记住密码
sp = getSharedPreferences("aaa",MODE_PRIVATE);
edit = sp.edit();
String s = sp.getString("mo", null);
mobile.setText(s);
String pa = sp.getString("pa", null);
boolean ji = sp.getBoolean("ji", false);
if (ji){
password.setText(pa);
Rem_Pass.setChecked(true);
}
}
@Override
protected void setOnClick() {
Rem_Pass.setOnClickListener(this);
login.setOnClickListener(this);
tijiao.setOnClickListener(this);
san.setOnClickListener(this);
}
@Override
protected void pageLogic() {
presenter = new PresenterImpl(this);
//
boolean zi = sp.getBoolean("zi", false);
if (zi){
login.setChecked(true);
String mmobile = mobile.getText().toString().trim();
String mpassword = password.getText().toString().trim();
String url = mUrl.toString();
String mmurl = url+"username="+mmobile+"&password="+mpassword;
presenter.getData(mmurl,null,null);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tijiao:
String mmobile = mobile.getText().toString().trim();
String mpassword = password.getText().toString().trim();
edit.putString("mo",mmobile);
edit.commit();
String url = mUrl.toString();
String mmurl = url+"username="+mmobile+"&password="+mpassword;
presenter.getData(mmurl,null,null);
break;
//记住密码
case R.id.Rem_Pass:
if (Rem_Pass.isChecked()){
edit.putBoolean("ji",true);
edit.commit();
}else {
login.setChecked(false);
edit.putBoolean("ji",false);
edit.commit();
}
break;
//自动登录
case R.id.login:
if (login.isChecked()){
Rem_Pass.setChecked(true);
edit.putBoolean("ji",true);
edit.putBoolean("zi",true);
edit.commit();
}else {
edit.putBoolean("zi",false);
edit.commit();
}
break;
case R.id.san:
UMShareAPI.get(this).getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ,authListener);
break;
}
}
@Override
public void showName() {
}
@Override
public void success(Object data) {
DLbean myData = (DLbean) data;
if (myData.getCode()==100){
String mmobile = mobile.getText().toString().trim();
String mpassword = password.getText().toString().trim();
edit.putString("mo",mmobile);
edit.putString("pa",mpassword);
edit.commit();
Toast.makeText(this, myData.getMsg(), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,TwoActivity.class);
startActivity(intent);
finish();
}else{
String mmobile = mobile.getText().toString().trim();
edit.putString("mo",mmobile);
edit.putString("pa",null);
edit.commit();
password.setText("");
Toast.makeText(this, myData.getMsg(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void error(Object error) {
Toast.makeText(this, (String) error+"", Toast.LENGTH_SHORT).show();
}
}
二、主页面
1.实现两个Fragment的切换
2.第一个Fragment实现
①数据展示(上拉下拉)
public class AFragment extends Fragment {
private String mUrl="http://www.xieast.com/api/news/news.php?page=";
private List<MyData.DataBean> mlist=new ArrayList<>();
private View view;
private Context mContext;
private int index=1;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
mlist.addAll((List<MyData.DataBean>)msg.obj);
Log.e("zzz", "handleMessage: "+mlist.get(0).getTitle());
adapter.setMlist(mlist);
pull.onRefreshComplete();
}
};
private MyAdapter adapter;
private PullToRefreshListView pull;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.afragment,null);
mContext=getActivity().getApplicationContext();
initView(view);
adapter = new MyAdapter(mContext,mlist);
pull.setAdapter(adapter);
getData(index);
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
index=1;
mlist.clear();
getData(index);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
index++;
getData(index);
}
});
pull.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent in=new Intent(getContext(),WebActivity.class);
in.putExtra("url",mlist.get(position).getUrl());
getActivity().startActivityForResult(in,200);
}
});
return view;
}
private void getData(final int index){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL(mUrl+index);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
if (connection.getResponseCode()==200){
InputStream stream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
Gson gson=new Gson();
MyData myData = gson.fromJson(reader, MyData.class);
handler.sendMessage(handler.obtainMessage(0,myData.getData()));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void initView(View view) {
pull = view.findViewById(R.id.PullToRefresh);
//设置上下拉滑动
pull.setMode(PullToRefreshBase.Mode.BOTH);
}
}
②点击进入详情页 WebView展示
布局:
新建Activity:
public class WebActivity extends AppCompatActivity {
private WebView webView;
private String url;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_activity);
initView();
Intent intent = getIntent();
url = intent.getStringExtra("url");
WebSettings webSettings=webView.getSettings();
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl(url);
}
private void initView() {
webView = findViewById(R.id.webView);
}
}
3.第二个Fragment的实现
public class BFragment extends Fragment implements View.OnClickListener{
private ImageView img;
private Button back;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.bfragment,null);
initView(view);
logic();
return view;
}
private void logic() {
try {
Bitmap bitmap = CodeCreator.createQRCode("hahahaha", 300, 300,null);
img.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
private void initView(View view) {
img = view.findViewById(R.id.ma);
back = view.findViewById(R.id.back);
back.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.back:
SharedPreferences preferences=getActivity().getSharedPreferences("aaa",Context.MODE_PRIVATE);
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("zi",false);
edit.commit();
Intent in=new Intent(getActivity(),MainActivity.class);
startActivity(in);
break;
}
}
}