MVP加登入註冊
阿新 • • 發佈:2018-11-21
mvp分層
這裡是引用
先寫啟動頁面 LoadingActivity
在這裡插入程式碼片public class LoadingActivity extends AppCompatActivity{ private TextView tvTime; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loading); initView(); initData(); } int count=3; private void initData() { TimerTask timerTask = new TimerTask(){ @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { tvTime.setText(count+"s"); if (count==0){ //頁面跳轉 jumpActivity(); } } }); count--; } }; Timer timer = new Timer(); timer.schedule(timerTask,1,1000); } private void initView() { tvTime = findViewById(R.id.tvTime); } private void jumpActivity(){ //是否登入 SharedPreferences sharedPreferences = getSharedPreferences(Constant.APP_CONFIG,MODE_PRIVATE); boolean is_login = sharedPreferences.getBoolean(Constant.IS_LOGIN, false); if (is_login){ Intent intent = new Intent(this, MainActivity.class); startActivity(intent); }else{ Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); } finish(); } }
啟動頁的佈局 加倒計時
xml佈局`
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/ivLoading" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:src="@mipmap/bbbb" /> <TextView android:id="@+id/tvTime" style="@style/StyleWrapContent" android:textSize="@dimen/dimen_common_18sp" android:layout_margin="@dimen/dimen_10dp" android:padding="@dimen/dimen_10dp" android:layout_alignParentRight="true" android:textColor="@color/colorWhite" android:background="@drawable/shpe" android:text="1s" /> </RelativeLayout>
下面引用的佈局在
這是style.xml
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="StyleWrapContent"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> </style>
這是string.xml
<resources>
<string name="app_name">仿京東</string>
<!--login-->
<string name="login">點選登入</string>
<string name="login_hin">請輸入手機號碼</string>
</resources>
在color.xml裡面自定義顏色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<!--common color-->
<color name="colorRed">#ff0000</color>
<color name="colorWhite">#ffffff</color>
<!--font color-->
<color name="fontBlack">#000000</color>
<color name="fontRed">#ff0000</color>
<color name="fontWhite">#ffffff</color>
</resources>
下面在values裡面建立dimen.xml
裡面寫寬高
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dimen_1dp">1dp</dimen>
<dimen name="dimen_10dp">10dp</dimen>
<dimen name="dimen_20dp">20dp</dimen>
<dimen name="dimen_30dp">30dp</dimen>
<dimen name="dimen_common_18sp">18sp</dimen>
<dimen name="dimen_common_16sp">16sp</dimen>
<dimen name="dimen_common_20sp">20sp</dimen>
<dimen name="dimen_common_22sp">22sp</dimen>
</resources>
``
然後再drawable裡面建立shpe
下面開始寫 裡面的bean
LoginResponse
public class LoginResponse implements Serializable {
private String age;
private String appkey;
private String appsecret;
private String createtime;
private String email;
private String fans;
private String follow;
private String gender;
private String icon;
private String latitude;
private String longitude;
private String mobile;
private String money;
private String nickname;
private String password;
private String praiseNum;
private String token;
private int uid;
private String userId;
private String username;
}
RootBean層
public class RootBean implements Serializable{
private String msg;
private int code;
private String data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public String getData() {
return data;
}
}
下面開始寫model層 裡面的LoginModule這裡
主要寫資料
/*
* 登入
* */
public class LoginModule {
public void login(String moblie, String password, final HttpCallBack callBack) {
final String url = "http://www.zhaoapi.cn/user/login";
new Thread() {
@Override
public void run() {
super.run();
try {
URL url1 = new URL(url);
HttpURLConnection httpURLConnection= (HttpURLConnection) url1.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if (httpURLConnection.getResponseCode()==200){
InputStream inputStream = httpURLConnection.getInputStream();
String s = CharStreams.toString(new InputStreamReader(httpURLConnection.getInputStream()));
Gson gson = new Gson();
RootBean rootBean = gson.fromJson(s, RootBean.class);
if (rootBean.getCode()==0){
callBack.onSuccess(rootBean.getData());
}else{
callBack.onFailer(rootBean.getMsg());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
try {
Thread.sleep(3000);
if (moblie.equals("123")&& password.equals("123")){
callBack.onSuccess("登入成功");
}else{
callBack.onFailer("登入失敗");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
RegisterModule 註冊
/*
* 註冊
* */
public class RegisterModule {
public void login(String moblie, String password, final HttpCallBack callBack) {
final String url = "http://www.zhaoapi.cn/user/login";
new Thread() {
@Override
public void run() {
super.run();
try {
URL url1 = new URL(url);
HttpURLConnection httpURLConnection= (HttpURLConnection) url1.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if (httpURLConnection.getResponseCode()==200){
InputStream inputStream = httpURLConnection.getInputStream();
String s = CharStreams.toString(new InputStreamReader(httpURLConnection.getInputStream()));
Gson gson = new Gson();
RootBean rootBean = gson.fromJson(s, RootBean.class);
if (rootBean.getCode()==0){
callBack.onSuccess(rootBean.getData());
}else{
callBack.onFailer(rootBean.getMsg());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
try {
Thread.sleep(3000);
if (moblie.equals("123")&& password.equals("123")){
callBack.onSuccess("登入成功");
}else{
callBack.onFailer("登入失敗");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpCallBack介面
public interface HttpCallBack {
void onSuccess(String result);
void onFailer(String erroMsg);
}
然後寫p層 的LoginPresenter主要寫邏輯
public class LoginPresenter {
private LoginView loginView;
private final LoginModule loginModule;
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
loginModule = new LoginModule();
}
public void login(String moble,String password){
loginModule.login(moble, password, new HttpCallBack() {
@Override
public void onSuccess(String result) {
loginView.onSuccess(result);
}
@Override
public void onFailer(String erroMsg) {
loginView.onFailer(erroMsg);
}
});
}
}
Constant介面
public interface Constant {
String APP_CONFIG="app_config";//sp檔案的名字
String IS_LOGIN="is_login";//判斷是否登入
}
view層LoginView
public interface LoginView {
void onSuccess(String result);
void onFailer(String erroMsg);
}
然後寫登入頁面 LoginActivity
/*
* 登入介面
* */
public class LoginActivity extends AppCompatActivity implements LoginView {
private EditText etMobile;
private EditText etPassword;
private TextView tvLogin;
private LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
initViewListener();
loginPresenter = new LoginPresenter(this);
}
private void initViewListener() {
tvLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//點選登入
String mobile = etMobile.getText().toString().trim();
String password = etPassword.getText().toString();
loginPresenter.login(mobile, password);
}
});
}
private void initView() {
etMobile = findViewById(R.id.etMobile);
etPassword = findViewById(R.id.etPassword);
tvLogin = findViewById(R.id.tvlogin);
findViewById(R.id.zhuce1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
}
@Override
public void onSuccess(String result) {
SharedPreferences sharedPreferences = getSharedPreferences(Constant.APP_CONFIG, MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putBoolean(Constant.IS_LOGIN, true);
edit.commit();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onFailer(final String erroMsg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(LoginActivity.this, erroMsg, Toast.LENGTH_SHORT).show();
}
});
}
}
註冊頁面RegisterActivity
/*
* 註冊頁面
*
* */
public class RegisterActivity extends AppCompatActivity implements LoginView{
private TextView zhuce;
private EditText etPassword1;
private EditText etMobile1;
private LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
initView();
initViewListener();
loginPresenter = new LoginPresenter(this);
}
private void initViewListener() {
zhuce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//點選註冊
String mobile1 = etMobile1.getText().toString().trim();
String password1 = etPassword1.getText().toString();
loginPresenter.login(mobile1,password1);
}
});
}
private void initView() {
etMobile1 = findViewById(R.id.etMobile1);
etPassword1 = findViewById(R.id.etPassword1);
zhuce = findViewById(R.id.zhuce);
}
@Override
public void onSuccess(String result) {
SharedPreferences sharedPreferences = getSharedPreferences(Constant.APP_CONFIG, MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putBoolean(Constant.IS_LOGIN,true);
edit.commit();
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
@Override
public void onFailer(final String erroMsg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(RegisterActivity.this,erroMsg,Toast.LENGTH_SHORT).show();
}
});
}
}