網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)直播登錄不過(guò)走了從邏輯到代碼的套路

本文為菜鳥(niǎo)窩作者蔣志碧的連載生闲。“從 0 開(kāi)始開(kāi)發(fā)一款直播 APP ”系列來(lái)聊聊時(shí)下最火的直播 APP赏半,如何完整的實(shí)現(xiàn)一個(gè)類"騰訊直播"的商業(yè)化項(xiàng)目
視頻地址:http://www.cniao5.com/course/10121

【從 0 開(kāi)始開(kāi)發(fā)一款直播 APP】4.1 網(wǎng)絡(luò)封裝之 Okhttp -- 基礎(chǔ)回顧
【從 0 開(kāi)始開(kāi)發(fā)一款直播 APP】4.2 網(wǎng)絡(luò)封裝之 OkHttp -- GET义起,POST,前后端交互
【從 0 開(kāi)始開(kāi)發(fā)一款直播 APP】4.3 網(wǎng)絡(luò)封裝之 OkHttp -- 封裝 GET脖咐,POST FORM铺敌,POST JSON
【從 0 開(kāi)始開(kāi)發(fā)一款直播 APP】4.4 網(wǎng)絡(luò)封裝之 OkHttp -- 網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)直播登錄


上一章講了 OkHttp 的封裝,現(xiàn)在來(lái)使用一下封裝吧屁擅。

網(wǎng)絡(luò)請(qǐng)求進(jìn)行手機(jī)登錄和用戶名登錄偿凭。


先來(lái)介紹一個(gè)請(qǐng)求工具 postman,Google 瀏覽器上的一個(gè)插件派歌,也有對(duì)應(yīng)的應(yīng)用程序弯囊,親測(cè)很好用,推薦給大家胶果。

好了匾嘱,開(kāi)始講解網(wǎng)絡(luò)請(qǐng)求,測(cè)試一下封裝的 Okhttp 框架早抠。
講解之前添加依賴以及相關(guān)權(quán)限

compile 'com.google.code.gson:gson:2.3.1'
compile 'com.zhy:okhttputils:2.6.2'

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

一霎烙、界面布局

里面用到了一個(gè)控件,很漂亮,看到輸入框的文字會(huì)跳動(dòng)對(duì)吧悬垃,就是這個(gè)控件游昼。android.support.design.widget.TextInputLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:background="@mipmap/bg_dark"
    android:id="@+id/rl_login_root"
    tools:context="com.dali.admin.livestreaming.activity.LoginActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="19dp"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="100dp">

        //驗(yàn)證碼
        <Button
            android:id="@+id/btn_verify_code"
            android:layout_width="90dp"
            android:layout_height="35dp"
            android:layout_alignEnd="@+id/til_login"
            android:layout_alignRight="@+id/til_login"
            android:layout_below="@+id/til_login"
            android:layout_marginRight="5dp"
            android:layout_marginTop="2dp"
            android:background="@drawable/btn_login"
            android:clickable="true"
            android:minWidth="0dp"
            android:padding="4dp"
            android:text="@string/activity_login_verify_code"
            android:textSize="12sp"
            style="@style/loginButton"
            />
        <android.support.design.widget.TextInputLayout
            android:id="@+id/til_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >
            //用戶名
            <AutoCompleteTextView
                android:id="@+id/et_username"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:hint="@string/activity_login_username"
                android:inputType="textEmailAddress"
                android:maxLength="24"
                android:maxLines="1"
                android:singleLine="true"
                android:textColor="@drawable/tv_selector"
                android:textColorHint="@color/white"
                />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/til_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/til_login">
            //密碼
            <EditText
                android:id="@+id/et_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/et_login"
                android:ellipsize="end"
                android:hint="@string/activity_login_password"
                android:imeActionId="@+id/login"
                android:imeOptions="actionUnspecified"
                android:inputType="textPassword"
                android:maxLength="24"
                android:maxLines="1"
                android:singleLine="true"
                android:textColor="@color/white"
                android:textColorHint="@color/white"/>
        </android.support.design.widget.TextInputLayout>

        //登錄
        <Button
            android:id="@+id/btn_login"
            android:layout_alignParentEnd="true"
            android:layout_below="@+id/til_password"
            android:background="@drawable/btn_login"
            android:clickable="true"
            android:padding="0dp"
            android:text="@string/activity_login_btnlogin"
            style="@style/loginButton"/>

        //手機(jī)號(hào)登錄
        <Button
            android:id="@+id/btn_phone_login"
            android:layout_width="wrap_content"
            android:layout_below="@+id/btn_login"
            android:layout_marginTop="10dp"
            android:text="@string/activity_login_btnphone"
            android:background="?attr/selectableItemBackground"
            style="@style/loginButton"
            />

        //注冊(cè)新用戶
        <Button
            android:id="@+id/btn_register"
            android:layout_width="wrap_content"
            android:layout_alignEnd="@+id/btn_login"
            android:layout_alignRight="@+id/btn_login"
            android:layout_below="@+id/btn_login"
            android:background="?attr/selectableItemBackground"
            android:layout_marginTop="10dp"
            android:text="@string/activity_login_register"
            style="@style/loginButton"
            />

        <ProgressBar
            android:id="@+id/progressbar"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_alignTop="@+id/btn_login"
            android:layout_centerHorizontal="true"
            android:visibility="gone"/>
    </RelativeLayout>
</RelativeLayout>

二、登錄界面邏輯實(shí)現(xiàn)

2.1尝蠕、類的初始化

創(chuàng)建 LoginActivity 類烘豌,繼承 BaseActivity,實(shí)現(xiàn)其抽象方法看彼。實(shí)例化控件廊佩。

public class LoginActivity extends BaseActivity implements View.OnClickListener{
    //控件
    private ProgressBar progressBar;
    private EditText etPassword;
    private EditText etLogin;
    private Button btnLogin;
    private Button btnPhoneLogin;
    private TextInputLayout tilLogin, tilPassword;
    private Button btnRegister;
    private TextView tvVerifyCode;
    //是否是手機(jī)號(hào)登錄
    private boolean isPhoneLogin = false;
  
    @Override
    protected void setActionBar() {
    }

    @Override
    protected void setListener() {
    }

    @Override
    protected void initData() {
    }

    @Override
    protected void initView() {
        etLogin = obtainView(R.id.et_username);
        etPassword = obtainView(R.id.et_password);
        btnRegister = obtainView(R.id.btn_register);
        btnPhoneLogin = obtainView(R.id.btn_phone_login);
        btnLogin = obtainView(R.id.btn_login);
        progressBar = obtainView(R.id.progressbar);
        tilLogin = obtainView(til_login);
        tilPassword = obtainView(R.id.til_password);
        tvVerifyCode = obtainView(R.id.btn_verify_code);
        //第一次進(jìn)入系統(tǒng)默認(rèn)是用戶名登錄
        userNameLoginViewInit();
    }

    @Override
    protected int getLayoutId() {
        return R.layout.activity_login;
    }
  
    @Override
    public void onClick(View v) {
    }
}

2.2、用戶名登錄實(shí)現(xiàn)

這里實(shí)現(xiàn)邏輯闲昭,解釋一下實(shí)現(xiàn)思路罐寨,而登錄請(qǐng)求網(wǎng)絡(luò)后面介紹。

//用戶名登錄方法
public void userNameLoginViewInit() {
    //用戶名登錄控件初始化
    userLoginTrans();

    //注冊(cè)監(jiān)聽(tīng)
    btnRegister.setOnClickListener(this);
    //這里只是用做切換界面序矩,用戶名登錄情況下點(diǎn)擊按鈕顯示到手機(jī)號(hào)登錄鸯绿,顯示獲取驗(yàn)證碼按鈕
    btnPhoneLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //手機(jī)號(hào)登錄切換
            phoneLoginViewinit();
        }
    });
    //登錄按鈕監(jiān)聽(tīng)
    btnLogin.setOnClickListener(this);
}
//用戶名登錄界面控件顯示
private void userLoginTrans() {
        //將手機(jī)號(hào)登錄設(shè)置為 false
        isPhoneLogin = false;
        //隱藏獲取驗(yàn)證碼按鈕
        tvVerifyCode.setVisibility(View.GONE);
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
        alphaAnimation.setDuration(250);
        tvVerifyCode.setAnimation(alphaAnimation);
        //設(shè)置輸入框輸入類型為 文本輸入
        etLogin.setInputType(EditorInfo.TYPE_CLASS_TEXT);
        //清空輸入框內(nèi)容
        etLogin.setText("");
        etPassword.setText("");
        //設(shè)置用戶名登錄按鈕文字為 手機(jī)號(hào)登錄
        btnPhoneLogin.setText("手機(jī)號(hào)登錄");
        //設(shè)置 TextInputLayout 文字為 用戶名和密碼
        tilLogin.setHint("用戶名");
        tilPassword.setHint("密碼");
}

2.3、手機(jī)號(hào)登錄實(shí)現(xiàn)

如上簸淀,實(shí)現(xiàn)邏輯瓶蝴,登錄請(qǐng)求網(wǎng)絡(luò)接下來(lái)介紹。

//手機(jī)號(hào)登錄方法
public void phoneLoginViewinit() {
    //用戶名登錄控件初始化
    phoneLoginTrans();
    //這里只是用做切換界面租幕,用戶名登錄情況下點(diǎn)擊按鈕顯示到手機(jī)號(hào)登錄舷手,顯示獲取驗(yàn)證碼按鈕
    btnPhoneLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //轉(zhuǎn)換為用戶名登錄界面
            userNameLoginViewInit();
        }
    });
    //登錄按鈕監(jiān)聽(tīng)
    btnLogin.setOnClickListener(this);
}
//手機(jī)號(hào)登錄控件顯示
private void phoneLoginTrans() {
    //將手機(jī)號(hào)登錄設(shè)置為 true
    isPhoneLogin = true;
    //顯示獲取驗(yàn)證碼按鈕
    tvVerifyCode.setVisibility(View.VISIBLE);
    AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
    alphaAnimation.setDuration(250);
    tvVerifyCode.setAnimation(alphaAnimation);
    //設(shè)定點(diǎn)擊優(yōu)先級(jí)于最前(避免被EditText遮擋的情況)
    tvVerifyCode.bringToFront();
    //設(shè)置輸入框輸入類型為 手機(jī)號(hào)
    etLogin.setInputType(EditorInfo.TYPE_CLASS_PHONE);
    //清空輸入框內(nèi)容
    etLogin.setText("");
    etPassword.setText("");
    //手機(jī)號(hào)登錄按鈕文字改為 用戶名登錄
    btnPhoneLogin.setText("用戶名登錄");
    //設(shè)置 TextInputLayout 文字為 手機(jī)號(hào)和密碼
    tilLogin.setHint("手機(jī)號(hào)");
    tilPassword.setHint("密碼");
}

2.4、請(qǐng)求網(wǎng)絡(luò)實(shí)現(xiàn)登錄


2.4.1劲绪、用戶名登錄

之前介紹的工具還沒(méi)用上呢男窟,現(xiàn)在來(lái)請(qǐng)求網(wǎng)絡(luò),看看需要那些數(shù)據(jù)贾富,請(qǐng)求參數(shù)有登錄方式 action歉眷,用戶名 userName 和 密碼 password。


2.4.2颤枪、為如上數(shù)據(jù)創(chuàng)建一個(gè)請(qǐng)求實(shí)體類汗捡。

public class LoginRequest extends IRequest {
   public LoginRequest(int requestId, String userName, String password) {
      mRequestId = requestId;
      mParams.put("action", "login");
      mParams.put("userName", userName);
      mParams.put("password", password);
   }

   //getHost():返回的 API,這里在封裝 OkHttp 框架的時(shí)候有的畏纲,HOST_PUBLIC = "http://live.demo.cniao5.com/Api/";
   @Override
   public String getUrl() {
      return getHost() + "User";
   }

   @Override
   public Type getParserType() {
      return new TypeToken<Response<UserInfo>>() {
      }.getType();
   }
}

2.4.3扇住、網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)用戶名登錄

public void usernameLogin(final String userName, final String password) {
    //檢查網(wǎng)絡(luò)狀態(tài),需要添加網(wǎng)絡(luò)使用權(quán)限:ACCESS_NETWORK_STATE
    if (checkUserNameLogin(userName, password)) {
        // RequestComm.login 是 requestId:值是120盗胀,后臺(tái)提供
        LoginRequest req = new LoginRequest(RequestComm.login, userName, password);
        AsyncHttp.instance().postJson(req, new AsyncHttp.IHttpListener() {
            @Override//請(qǐng)求網(wǎng)絡(luò)之前調(diào)用
            public void onStart(int requestId) {
                //顯示環(huán)形進(jìn)度條
                showOnLoading(true);
            }

            @Override
            public void onSuccess(int requestId, Response response) {
                //RequestComm.SUCCESS 狀態(tài)驗(yàn)證:值是0艘蹋,上面請(qǐng)求網(wǎng)絡(luò)有顯示
                if (response.status == RequestComm.SUCCESS) {
                    Toast.makeText(LoginActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
                }
                //隱藏環(huán)形進(jìn)度條
                showOnLoading(false);
            }

            @Override
            public void onFailure(int requestId, int httpStatus, Throwable error) {
                showOnLoading(false);//隱藏環(huán)形進(jìn)度條
                Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

2.5、手機(jī)登錄實(shí)現(xiàn)

手機(jī)號(hào)登錄先來(lái)測(cè)試網(wǎng)絡(luò)數(shù)據(jù)API票灰,看看實(shí)體類需要的數(shù)據(jù)簿训。請(qǐng)求參數(shù)有登錄方式 action咱娶,手機(jī)號(hào) mobile 和 驗(yàn)證碼 verifyCode。


2.5.1强品、創(chuàng)建手機(jī)登錄請(qǐng)求實(shí)體類

public class PhoneLoginRequest extends IRequest {
   public PhoneLoginRequest(int requestId, String mobile, String verifyCode) {
      mRequestId = requestId;
      mParams.put("action", "phoneLogin");
      mParams.put("mobile", mobile);
      mParams.put("verifyCode", verifyCode);
   }

  //getHost():返回的 API,這里在封裝 OkHttp 框架的時(shí)候有的屈糊,HOST_PUBLIC = "http://live.demo.cniao5.com/Api/";
   @Override
   public String getUrl() {
      return getHost() + "User";
   }

   @Override
   public Type getParserType() {
      return new TypeToken<Response>() {
      }.getType();
   }
}

2.5.2的榛、網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)手機(jī)號(hào)登錄

public void phoneLogin(final String mobile, String verifyCode) {
    //檢查網(wǎng)絡(luò)狀態(tài),需要添加網(wǎng)絡(luò)使用權(quán)限:ACCESS_NETWORK_STATE
    if (checkPhoneLogin(mobile, verifyCode)) {//requestId = 1200,后臺(tái)提供
        PhoneLoginRequest req = new PhoneLoginRequest(1200, mobile, verifyCode);
        AsyncHttp.instance().postJson(req, new AsyncHttp.IHttpListener() {
            @Override//請(qǐng)求網(wǎng)絡(luò)之前調(diào)用
            public void onStart(int requestId) {
                showOnLoading(true);//顯示環(huán)形進(jìn)度條
            }

            @Override
            public void onSuccess(int requestId, Response response) {
                //RequestComm.SUCCESS 狀態(tài)驗(yàn)證:值是0逻锐,上面請(qǐng)求網(wǎng)絡(luò)有顯示
                if (response.status == RequestComm.SUCCESS) {
                    Toast.makeText(LoginActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
                }
                showOnLoading(false);//隱藏環(huán)形進(jìn)度條
            }

            @Override
            public void onFailure(int requestId, int httpStatus, Throwable error) {
                showOnLoading(false);//隱藏環(huán)形進(jìn)度條
                Toast.makeText(LoginActivity.this, "網(wǎng)絡(luò)異常", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

檢查用戶名登錄夫晌、手機(jī)登錄、環(huán)形進(jìn)度條顯示或隱藏代碼

//監(jiān)測(cè)用戶名登錄
public boolean checkUserNameLogin(String userName, String password) {
    if (OtherUtils.isUsernameVaild(userName)) {
        if (OtherUtils.isPasswordValid(password)) {
            if (OtherUtils.isNetworkAvailable(this)) {
                return true;
            } else {
                ToastUtils.showShort(this, "當(dāng)前無(wú)網(wǎng)絡(luò)連接");
            }
        } else {
            ToastUtils.showShort(this, "密碼過(guò)短");
        }
    } else {
        ToastUtils.showShort(this, "用戶名不符合規(guī)范");
    }
    return false;
}
//監(jiān)測(cè)手機(jī)號(hào)登錄
public boolean checkPhoneLogin(String phone, String verifyCode) {
        if (OtherUtils.isPhoneNumValid(phone)) {
            if (OtherUtils.isVerifyCodeValid(verifyCode)) {
                if (OtherUtils.isNetworkAvailable(this)) {
                    return true;
                } else {
                    ToastUtils.showShort(this, "當(dāng)前無(wú)網(wǎng)絡(luò)連接");
                }
            } else {
                ToastUtils.showShort(this, "驗(yàn)證碼錯(cuò)誤");
            }
        } else {
            ToastUtils.showShort(this, "手機(jī)格式錯(cuò)誤");
        }
        return false;
}
//進(jìn)度條顯示與隱藏
public void showOnLoading(boolean active) {
        if (active) {
            //顯示進(jìn)度條
            progressBar.setVisibility(View.VISIBLE);
            //顯示登錄按鈕
            btnLogin.setVisibility(View.INVISIBLE);
            //輸入框設(shè)置不可用
            etLogin.setEnabled(false);
            etPassword.setEnabled(false);
            //手機(jī)號(hào)按鈕和按鈕設(shè)置為不可點(diǎn)擊
            btnPhoneLogin.setClickable(false);
            btnRegister.setClickable(false);
 btnRegister.setTextColor(getResources().getColor(R.color.colorTransparentGray));          btnPhoneLogin.setTextColor(getResources().getColor(R.color.colorTransparentGray));
            
        } else {
            //隱藏進(jìn)度條
            progressBar.setVisibility(View.GONE);
            //隱藏登錄按鈕
            btnLogin.setVisibility(View.VISIBLE);
            //輸入框設(shè)置可用
            etLogin.setEnabled(true);
            etPassword.setEnabled(true);
            //手機(jī)號(hào)按鈕和按鈕設(shè)置為可點(diǎn)擊
            btnPhoneLogin.setClickable(true);
            btnRegister.setClickable(true);
            btnRegister.setTextColor(getResources().getColor(R.color.white));
            btnPhoneLogin.setTextColor(getResources().getColor(R.color.white));
        }
}

2.6昧诱、手機(jī)號(hào)登錄和用戶名登錄切換

@Override
public void onClick(View v) {
    if (isPhoneLogin){
        phoneLogin(etLogin.getText().toString(), etPassword.getText().toString());
    }else {
        usernameLogin(etLogin.getText().toString(), etPassword.getText().toString());
    }

}

三晓淀、完整的代碼實(shí)現(xiàn)

public class LoginActivity extends BaseActivity implements View.OnClickListener {
    private ProgressBar progressBar;
    private EditText etPassword;
    private EditText etLogin;
    private Button btnLogin;
    private Button btnPhoneLogin;
    private TextInputLayout tilLogin, tilPassword;
    private Button btnRegister;
    private TextView tvVerifyCode;
    private boolean isPhoneLogin = false;

    @Override
    protected void setActionBar() {
    }

    @Override
    protected void setListener() {
    }

    @Override
    protected void initData() {
    }

    @Override
    protected void initView() {
        etLogin = obtainView(R.id.et_username);
        etPassword = obtainView(R.id.et_password);
        btnRegister = obtainView(R.id.btn_register);
        btnPhoneLogin = obtainView(R.id.btn_phone_login);
        btnLogin = obtainView(R.id.btn_login);
        progressBar = obtainView(R.id.progressbar);
        tilLogin = obtainView(til_login);
        tilPassword = obtainView(R.id.til_password);
        tvVerifyCode = obtainView(R.id.btn_verify_code);
        userNameLoginViewInit();
    }

    @Override
    protected int getLayoutId() {
        return R.layout.activity_login;
    }

    /**
     * 用戶名密碼登錄界面
     */
    public void userNameLoginViewInit() {
        userLoginTrans();
        btnRegister.setOnClickListener(this);
        btnPhoneLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //手機(jī)號(hào)登錄
                phoneLoginViewinit();
            }
        });
        //用戶名登錄
        btnLogin.setOnClickListener(this);

    }

    public void phoneLoginViewinit() {
        phoneLoginTrans();
                //轉(zhuǎn)換為用戶名登錄界面
                userNameLoginViewInit();
            }
        });
        btnLogin.setOnClickListener(this);
    }

    private void phoneLoginTrans() {
        isPhoneLogin = true;
        tvVerifyCode.setVisibility(View.VISIBLE);
        AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
        alphaAnimation.setDuration(250);
        tvVerifyCode.setAnimation(alphaAnimation);
        tvVerifyCode.bringToFront();
        etLogin.setInputType(EditorInfo.TYPE_CLASS_PHONE);
        etLogin.setText("");
        etPassword.setText("");
        btnPhoneLogin.setText("用戶名登錄");
        tilLogin.setHint("手機(jī)號(hào)");
        tilPassword.setHint("密碼");
    }

    private void userLoginTrans() {
        isPhoneLogin = false;
        tvVerifyCode.setVisibility(View.GONE);
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
        alphaAnimation.setDuration(250);
        tvVerifyCode.setAnimation(alphaAnimation);
        etLogin.setInputType(EditorInfo.TYPE_CLASS_TEXT);
        etLogin.setText("");
        etPassword.setText("");
        btnPhoneLogin.setText("手機(jī)號(hào)登錄");
        tilLogin.setHint("用戶名");
        tilPassword.setHint("密碼");
    }

    /**
     * 手機(jī)登錄和用戶名登錄界面顯示或隱藏
     */
    public void showOnLoading(boolean active) {
        if (active) {
            progressBar.setVisibility(View.VISIBLE);
            btnLogin.setVisibility(View.INVISIBLE);
            etLogin.setEnabled(false);
            etPassword.setEnabled(false);
            btnPhoneLogin.setClickable(false);
 btnRegister.setTextColor(getResources().getColor(R.color.colorTransparentGray));         btnPhoneLogin.setTextColor(getResources().getColor(R.color.colorTransparentGray));
            btnRegister.setClickable(false);
        } else {
            progressBar.setVisibility(View.GONE);
            btnLogin.setVisibility(View.VISIBLE);
            etLogin.setEnabled(true);
            etPassword.setEnabled(true);
            btnPhoneLogin.setClickable(true);
            btnRegister.setClickable(true);
            btnRegister.setTextColor(getResources().getColor(R.color.white));
            btnPhoneLogin.setTextColor(getResources().getColor(R.color.white));
        }
    }

    public void phoneLogin(final String mobile, String verifyCode) {
        if (checkPhoneLogin(mobile, verifyCode)) {
            PhoneLoginRequest req = new PhoneLoginRequest(1200, mobile, verifyCode);
            AsyncHttp.instance().postJson(req, new AsyncHttp.IHttpListener() {
                @Override
                public void onStart(int requestId) {
                    showOnLoading(true);
                }

                @Override
                public void onSuccess(int requestId, Response response) {
                    if (response.status == RequestComm.SUCCESS) {
                        Toast.makeText(LoginActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
                    }
                    showOnLoading(false);
                }
                @Override
                public void onFailure(int requestId, int httpStatus, Throwable error) {
                    showOnLoading(false);
                    Toast.makeText(LoginActivity.this, "網(wǎng)絡(luò)異常", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    public boolean checkPhoneLogin(String phone, String verifyCode) {
        if (OtherUtils.isPhoneNumValid(phone)) {
            if (OtherUtils.isVerifyCodeValid(verifyCode)) {
                if (OtherUtils.isNetworkAvailable(this)) {
                    return true;
                } else {
                    ToastUtils.showShort(this, "當(dāng)前無(wú)網(wǎng)絡(luò)連接");
                }
            } else {
                ToastUtils.showShort(this, "驗(yàn)證碼錯(cuò)誤");
            }
        } else {
            ToastUtils.showShort(this, "手機(jī)格式錯(cuò)誤");
        }
        return false;
    }

    public void usernameLogin(final String userName, final String password) {
        if (checkUserNameLogin(userName, password)) {
            LoginRequest req = new LoginRequest(RequestComm.login, userName, password);
            AsyncHttp.instance().postJson(req, new AsyncHttp.IHttpListener() {
                @Override
                public void onStart(int requestId) {
                    showOnLoading(true);
                }

                @Override
                public void onSuccess(int requestId, Response response) {
                    if (response.status == RequestComm.SUCCESS) {
                        Toast.makeText(LoginActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
                    }
                    showOnLoading(false);
                }

                @Override
                public void onFailure(int requestId, int httpStatus, Throwable error) {
                    showOnLoading(false);
                    Toast.makeText(LoginActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    public boolean checkUserNameLogin(String userName, String password) {
        if (OtherUtils.isUsernameVaild(userName)) {
            if (OtherUtils.isPasswordValid(password)) {
                if (OtherUtils.isNetworkAvailable(this)) {
                    return true;
                } else {
                    ToastUtils.showShort(this, "當(dāng)前無(wú)網(wǎng)絡(luò)連接");
                }
            } else {
                ToastUtils.showShort(this, "密碼過(guò)短");
            }
        } else {
            ToastUtils.showShort(this, "用戶名不符合規(guī)范");
        }
        return false;
    }

    @Override
    public void onClick(View v) {
        if (isPhoneLogin){
            phoneLogin(etLogin.getText().toString(), etPassword.getText().toString());
        }else {
            usernameLogin(etLogin.getText().toString(), etPassword.getText().toString());
        }
    }
}

寫(xiě)得不到位的地方還望大家指正。

添加菜鳥(niǎo)窩運(yùn)營(yíng)微信:yrioyou盏档,備注【菜鳥(niǎo)直播群】入群交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凶掰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜈亩,更是在濱河造成了極大的恐慌懦窘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚配,死亡現(xiàn)場(chǎng)離奇詭異畅涂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)道川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)午衰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冒萄,你說(shuō)我怎么就攤上這事臊岸。” “怎么了宦言?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵扇单,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奠旺,道長(zhǎng)蜘澜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任响疚,我火速辦了婚禮鄙信,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忿晕。我一直安慰自己装诡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鸦采,像睡著了一般宾巍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渔伯,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天顶霞,我揣著相機(jī)與錄音,去河邊找鬼锣吼。 笑死选浑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玄叠。 我是一名探鬼主播古徒,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼读恃!你這毒婦竟也來(lái)了隧膘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狐粱,失蹤者是張志新(化名)和其女友劉穎舀寓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肌蜻,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡互墓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒋搜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篡撵。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豆挽,靈堂內(nèi)的尸體忽然破棺而出育谬,到底是詐尸還是另有隱情,我是刑警寧澤帮哈,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布膛檀,位于F島的核電站,受9級(jí)特大地震影響娘侍,放射性物質(zhì)發(fā)生泄漏咖刃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一憾筏、第九天 我趴在偏房一處隱蔽的房頂上張望嚎杨。 院中可真熱鬧,春花似錦氧腰、人聲如沸枫浙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)箩帚。三九已至真友,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膏潮,已是汗流浹背锻狗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焕参,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓油额,卻偏偏與公主長(zhǎng)得像叠纷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潦嘶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容