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