2登陆+列表展示+二维码

用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;
    }
}

}

猜你喜欢

转载自blog.csdn.net/qq_43603312/article/details/84931505