(MVP框架)登录+数据展示

MVP框架 登录 数据展示

依赖

implementation ‘com.google.code.gson:gson:2.8.5’
implementation ‘com.github.bumptech.glide:glide:4.9.0’
implementation 'com.google.guava:guava-io:r03’

AsyncHttpClient

package monthtest.baway.com.day3_3.net;

import android.os.AsyncTask;
import android.text.TextUtils;

import com.google.common.io.ByteStreams;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

public class AsyncHttpClient {
    private static final AsyncHttpClient ourInstance = new AsyncHttpClient();
    private static final String TAG = "AsyncHttpClient";

    public static AsyncHttpClient getInstance() {
        return ourInstance;
    }
    public void GetAsync(final String url, final AsyncCallback callback) {
        new AsyncTask<String, Void, String>() {

            @Override
            protected String doInBackground(String... strings) {
                return GetDataHttp(strings[0]);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                if (!TextUtils.isEmpty(s)) {
                    callback.Succore(s);
                } else {
                    callback.Error(503, "未请求到数据");
                }
            }
        }.execute(url);
    }
    public void PostAsync(final String url, final String username, final String pwd, final AsyncCallback callback) {
        new AsyncTask<String, Void, String>() {

            @Override
            protected String doInBackground(String... strings) {
                return PostDataHttp(strings[0], strings[1], strings[2]);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                if (!TextUtils.isEmpty(s)) {
                    callback.Succore(s);
                } else {
                    callback.Error(503, "未请求到数据");
                }
            }
        }.execute(url, username, pwd);
    }
    private String GetDataHttp(String server_url) {
        try {
            URL url = new URL(server_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("GET");
            if (connection.getResponseCode() == connection.HTTP_OK) {
                InputStream stream = connection.getInputStream();
                String s = new String(ByteStreams.toByteArray(stream));
                return s;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private String PostDataHttp(String server_url, String name, String pwd) {
        try {
            URL url = new URL(server_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("POST");
            //请求头的信息
            String body = "phone=" + URLEncoder.encode(name) + "&pwd=" + URLEncoder.encode(pwd);
            connection.getOutputStream().write(body.getBytes());
            if (connection.getResponseCode() == connection.HTTP_OK) {
                InputStream stream = connection.getInputStream();
                String s = new String(ByteStreams.toByteArray(stream));
                return s;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public interface AsyncCallback {
        void Error(int errorcode, String message);

        void Succore(String result);
    }
}

登录的MVP框架

package monthtest.baway.com.day3_3.mvp;

import monthtest.baway.com.day3_3.MainActivity;

public interface LoginContract {
    //Iview
    interface ILoginView {
        void getPreData(String data);
    }

    //Imodel
    interface ILoginModel {
        void getRequester(String url, String username, String pwd, ModelCallBack callBack);

        interface ModelCallBack {
            void onSuccess(String data);

            void onFail();
        }
    }

    //Ipresenter
    interface ILoginPresenter {
        void attch(MainActivity mainActivity);

        void detch();

        void login(String url, String username, String pwd);
    }
}

package monthtest.baway.com.day3_3.mvp;

import monthtest.baway.com.day3_3.net.AsyncHttpClient;

public class LoginModel implements LoginContract.ILoginModel {
    @Override
    public void getRequester(String url, String username, String pwd, final ModelCallBack callBack) {
        AsyncHttpClient.getInstance().PostAsync(url, username, pwd, new AsyncHttpClient.AsyncCallback() {
            @Override
            public void Error(int errorcode, String message) {

            }

            @Override
            public void Succore(String result) {
                callBack.onSuccess(result);
            }
        });
    }
}

package monthtest.baway.com.day3_3.mvp;

import monthtest.baway.com.day3_3.MainActivity;

public class LoginPresenter implements LoginContract.ILoginPresenter {

    private LoginModel loginModel;
    MainActivity iLoginView;

    @Override
    public void attch(MainActivity mainActivity) {
        loginModel = new LoginModel();
        this.iLoginView = mainActivity;
    }

    @Override
    public void detch() {
        if (loginModel != null) {
            loginModel = null;
        }
        if (iLoginView != null) {
            iLoginView = null;
        }
        System.gc();
    }

    @Override
    public void login(String url, String username, String pwd) {
        loginModel.getRequester(url, username, pwd, new LoginContract.ILoginModel.ModelCallBack() {
            @Override
            public void onSuccess(String data) {
                iLoginView.getPreData(data);
            }

            @Override
            public void onFail() {

            }
        });
    }
}

展示页面MVP框架

package monthtest.baway.com.day3_3.mvp.showmvp;

public interface IShowContract {
    public interface IView {
        void getPresenter(String name);
    }

    public interface IModel {
        void show(IModel.CallBack callBack);

        interface CallBack {
            void onSuccess(String names);

            void onFail();
        }
    }

    public interface IPresenter {
        void getModel();

        void attch(IView view);

        void detch();
    }
}

package monthtest.baway.com.day3_3.mvp.showmvp;

import monthtest.baway.com.day3_3.net.AsyncHttpClient;

public class Model implements IShowContract.IModel {
    public static final String BaseUrl = "http://172.17.8.100/movieApi/cinema/v1/findRecommendCinemas?page=1&count=10";

    @Override
    public void show(final IShowContract.IModel.CallBack callBack) {
        AsyncHttpClient.getInstance().GetAsync(BaseUrl, new AsyncHttpClient.AsyncCallback() {
            @Override
            public void Error(int errorcode, String message) {

            }

            @Override
            public void Succore(String result) {
                callBack.onSuccess(result);
            }
        });
    }
}

package monthtest.baway.com.day3_3.mvp.showmvp;

import android.util.Log;

import static android.content.ContentValues.TAG;

public class Presenter implements IShowContract.IPresenter {

    private Model model;
    IShowContract.IView iView;

    @Override
    public void getModel() {

    }

    @Override
    public void attch(final IShowContract.IView view) {
        model = new Model();
        this.iView = view;
        model.show(new IShowContract.IModel.CallBack() {
            @Override
            public void onSuccess(String names) {
                view.getPresenter(names);
                Log.i(TAG, "onSuccess: " + names);
            }

            @Override
            public void onFail() {

            }
        });
    }

    @Override
    public void detch() {
        if (model != null) {
            model = null;
        }
        if (iView != null) {
            iView = null;
        }
    }
}

action_main(登录)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/name_edit_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="40dp"
        android:hint="请输入手机号" />

    <EditText
        android:id="@+id/pwd_edit_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="40dp"
        android:layout_marginTop="20dp"
        android:hint="请输入密码"
        android:inputType="numberPassword" />

    <CheckBox
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="记住密码" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button_login"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:layout_weight="1"
            android:text="登录" />

        <Button
            android:id="@+id/zhuce_login"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:layout_weight="1"
            android:text="注册" />
    </LinearLayout>
</LinearLayout>

MainActivity

package monthtest.baway.com.day3_3;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.google.gson.Gson;

import monthtest.baway.com.day3_3.bean.LoginBean;
import monthtest.baway.com.day3_3.mvp.LoginContract;
import monthtest.baway.com.day3_3.mvp.LoginPresenter;

public class MainActivity extends AppCompatActivity implements LoginContract.ILoginView, View.OnClickListener {

    private EditText name_edit_login, pwd_edit_login;
    private Button button_login;
    private CheckBox check;
    private LoginPresenter loginPresenter;
    public static final String BaseLoginUrl = "http://172.17.8.100/small/user/v1/login";
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor edit;
    private Gson gson;
    private LoginBean loginBean;
    private String name;
    private String pwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.zhuce_login).setOnClickListener(this);
        loginPresenter = new LoginPresenter();
        loginPresenter.attch(this);
        sharedPreferences = getSharedPreferences("mvplogin", MODE_PRIVATE);
        edit = sharedPreferences.edit();
        init();
        boolean checked = check.isChecked();
        if (checked){
            sharedPreferences.edit().putString("name_edit_login",name)
            .putString("pwd_edit_login",pwd)
            .commit();
        }else {
            sharedPreferences.edit().putString("name_edit_login","")
                    .putString("pwd_edit_login","")
                    .commit();
        }
    }

    private void init() {
        name_edit_login = findViewById(R.id.name_edit_login);
        pwd_edit_login = findViewById(R.id.pwd_edit_login);
        button_login = findViewById(R.id.button_login);
        check = findViewById(R.id.check);
        button_login.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                name = name_edit_login.getText().toString();
                pwd = pwd_edit_login.getText().toString();
                if (!name.isEmpty() && !pwd.isEmpty()) {
                    check.setChecked(true);
                    loginPresenter.login(BaseLoginUrl, name, pwd);
                }
            }
        });
    }

    @Override
    public void getPreData(String data) {
        gson = new Gson();
        if (data != null) {
            loginBean = gson.fromJson(data, LoginBean.class);
            Toast.makeText(this, loginBean.getMessage(), Toast.LENGTH_LONG).show();
            if (loginBean.getStatus().equals("0000")) {
                edit.putString("pwd", pwd);
                edit.commit();
                Intent intent = new Intent(MainActivity.this, ShowActivity.class);
                startActivity(intent);
                finish();
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        loginPresenter.detch();
    }
    @Override
    public void onClick(View v) {

    }
}

activity_show

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ShowActivity">

    <FrameLayout
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <RadioGroup
        android:id="@+id/radioG"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:gravity="center"
            android:text="111" />

        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:gravity="center"
            android:text="222" />
    </RadioGroup>
</LinearLayout>

ShowActivity

package monthtest.baway.com.day3_3;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RadioGroup;

import monthtest.baway.com.day3_3.fragment.Frag1;
import monthtest.baway.com.day3_3.fragment.Frag2;

public class ShowActivity extends AppCompatActivity {


    private Frag1 frag1;
    private Frag2 frag2;
    private FragmentManager manager;
    private RadioGroup radioG;
    private FrameLayout vp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        vp = findViewById(R.id.vp);
        radioG = findViewById(R.id.radioG);
        frag1 = new Frag1();
        frag2 = new Frag2();
        manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.vp, frag1)
                .add(R.id.vp, frag2)
                .show(frag1)
                .hide(frag2)
                .commit();
        radioG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                FragmentTransaction transaction1 = manager.beginTransaction();
                switch (checkedId) {
                    case R.id.rb1:
                        transaction1.show(frag1).hide(frag2);
                        break;
                    case R.id.rb2:
                        transaction1.show(frag2).hide(frag1);
                        break;
                }
                transaction1.commit();
            }
        });
    }


}

frag1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f1c9c9"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Frag1(数据展示)

package monthtest.baway.com.day3_3.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.google.gson.Gson;

import java.util.List;

import monthtest.baway.com.day3_3.R;
import monthtest.baway.com.day3_3.adapter.ListviewAdapter;
import monthtest.baway.com.day3_3.bean.ListviewBean;
import monthtest.baway.com.day3_3.mvp.showmvp.IShowContract;
import monthtest.baway.com.day3_3.mvp.showmvp.Presenter;

public class Frag1 extends Fragment implements IShowContract.IView {

    private ListView listview;
    private Presenter presenter;
    private Gson gson;
    private ListviewBean listviewBean;
    private ListviewAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag1, container, false);
        listview = view.findViewById(R.id.listview);
        presenter = new Presenter();
        presenter.attch(this);
        return view;
    }

    @Override
    public void getPresenter(String name) {
        gson = new Gson();
        listviewBean = gson.fromJson(name, ListviewBean.class);
        List<ListviewBean.ResultBean> result = listviewBean.getResult();
        adapter = new ListviewAdapter(result, getActivity());
        listview.setAdapter(adapter);
    }
}

LoginBean

package monthtest.baway.com.day3_3.bean;

public class LoginBean {

    private ResultBean result;
    private String message;
    private String status;

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public static class ResultBean {
        /**
         * headPic : http://172.17.8.100/images/small/default/user.jpg
         * nickName : UM_3t5Gc
         * phone : 15117967942
         * sessionId : 15551257181103423
         * sex : 1
         * userId : 3423
         */

        private String headPic;
        private String nickName;
        private String phone;
        private String sessionId;
        private int sex;
        private int userId;

        public String getHeadPic() {
            return headPic;
        }

        public void setHeadPic(String headPic) {
            this.headPic = headPic;
        }

        public String getNickName() {
            return nickName;
        }

        public void setNickName(String nickName) {
            this.nickName = nickName;
        }

        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        public String getSessionId() {
            return sessionId;
        }

        public void setSessionId(String sessionId) {
            this.sessionId = sessionId;
        }

        public int getSex() {
            return sex;
        }

        public void setSex(int sex) {
            this.sex = sex;
        }

        public int getUserId() {
            return userId;
        }

        public void setUserId(int userId) {
            this.userId = userId;
        }
    }
}

ListviewBean

package monthtest.baway.com.day3_3.bean;

import java.util.List;

public class ListviewBean {

    /**
     * result : [{"address":"朝阳区湖景东路11号新奥购物中心B1(东A口)","commentTotal":160,"distance":0,"followCinema":2,"id":5,"logo":"http://172.17.8.100/images/movie/logo/CGVxx.jpg","name":"CGV星星影城"},{"address":"朝阳区建国路93号万达广场三层","commentTotal":0,"distance":0,"followCinema":2,"id":6,"logo":"http://172.17.8.100/images/movie/logo/wd.jpg","name":"北京CBD万达广场店"},{"address":"北京市朝阳区建国门外大街1号国贸商城区域三地下一层3B120","commentTotal":0,"distance":0,"followCinema":2,"id":7,"logo":"http://172.17.8.100/images/movie/logo/blg.jpg","name":"北京百丽宫影城"},{"address":"北京市朝阳区三丰北里2号楼悠唐广场B1层","commentTotal":0,"distance":0,"followCinema":2,"id":8,"logo":"http://172.17.8.100/images/movie/logo/bn.jpg","name":"北京博纳影城朝阳门旗舰店"},{"address":"北京市崇文区崇文门外大街18号国瑞城首层、地下二层","commentTotal":0,"distance":0,"followCinema":2,"id":9,"logo":"http://172.17.8.100/images/movie/logo/blh.jpg","name":"北京百老汇影城国瑞购物中心店"},{"address":"朝阳区广顺北大街16号望京华彩商业中心B1","commentTotal":0,"distance":0,"followCinema":2,"id":10,"logo":"http://172.17.8.100/images/movie/logo/hyxd.jpg","name":"华谊兄弟影院"},{"address":"海淀区远大路1号金源时代购物中心5层东首","commentTotal":0,"distance":0,"followCinema":2,"id":11,"logo":"http://172.17.8.100/images/movie/logo/xmgj.jpg","name":"星美国际影城"}]
     * message : 查询成功
     * status : 0000
     */

    private String message;
    private String status;
    private List<ResultBean> result;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<ResultBean> getResult() {
        return result;
    }

    public void setResult(List<ResultBean> result) {
        this.result = result;
    }

    public static class ResultBean {
        /**
         * address : 朝阳区湖景东路11号新奥购物中心B1(东A口)
         * commentTotal : 160
         * distance : 0
         * followCinema : 2
         * id : 5
         * logo : http://172.17.8.100/images/movie/logo/CGVxx.jpg
         * name : CGV星星影城
         */

        private String address;
        private int commentTotal;
        private int distance;
        private int followCinema;
        private int id;
        private String logo;
        private String name;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public int getCommentTotal() {
            return commentTotal;
        }

        public void setCommentTotal(int commentTotal) {
            this.commentTotal = commentTotal;
        }

        public int getDistance() {
            return distance;
        }

        public void setDistance(int distance) {
            this.distance = distance;
        }

        public int getFollowCinema() {
            return followCinema;
        }

        public void setFollowCinema(int followCinema) {
            this.followCinema = followCinema;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getLogo() {
            return logo;
        }

        public void setLogo(String logo) {
            this.logo = logo;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

ListviewAdapter

package monthtest.baway.com.day3_3.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

import java.util.List;

import monthtest.baway.com.day3_3.R;
import monthtest.baway.com.day3_3.bean.ListviewBean;

public class ListviewAdapter extends BaseAdapter {
    List<ListviewBean.ResultBean> list;
    Context context;

    public ListviewAdapter(List<ListviewBean.ResultBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item, null);
            holder = new ViewHolder();
            holder.imageView = (ImageView) convertView.findViewById(R.id.imageView_item);
            holder.textView = (TextView) convertView.findViewById(R.id.textView_item);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        ListviewBean.ResultBean bean = list.get(position);
        holder.textView.setText(bean.getName());
        Glide.with(context).load(bean.getLogo())
                .apply(RequestOptions.centerCropTransform())
                .into(holder.imageView);
        return convertView;
    }

    class ViewHolder {
        ImageView imageView;
        TextView textView;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44668058/article/details/89286458