Favor庫簡述

jopen 8年前發布 | 5K 次閱讀 Android開發 移動開發

Favor是一個第三方庫, 可以簡化SharedPreferences, 使用依賴注入的方式聲明. 我們根據常見的輸入框, 把賬戶信息存在Favor的類中, 來看看這個庫怎么用.

1. 準備

配置build.gradle

    compile 'com.cocosw:favor:0.2.0'
    compile 'com.jakewharton:butterknife:7.0.1'

布局, 輸入賬戶和密碼, 下面兩行小字顯示保存在SharedPreferences中的數據.

<LinearLayout
    ....>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/user_name_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Username"
            android:inputType="textEmailAddress"/>
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/password_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Password"
            android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/commit_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="8dp"
        android:background="@color/colorAccent"
        android:text="登錄"
        android:textColor="@android:color/white"/>

    <TextView
        android:id="@+id/user_name_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="username"/>

    <TextView
        android:id="@+id/password_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="password"/>

</LinearLayout>

使用TextInputLayout來繪制輸入框.

頁面邏輯, 驗證郵箱和密碼, 當輸入正確時, 保存在SharedPreference里面, 并顯示, 使用Favor庫進行保存.

public class MainActivity extends AppCompatActivity {

    private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";

    @Bind(R.id.user_name_wrapper) TextInputLayout mUserNameWrapper;
    @Bind(R.id.password_wrapper) TextInputLayout mPasswordWrapper;
    @Bind(R.id.user_name_show) TextView mUserNameShow;
    @Bind(R.id.password_show) TextView mPasswordShow;

    private Account mAccount; // 賬戶類

    @OnClick(R.id.commit_button) void commitAccount(View view) {
        hideKeyboard();

        String username = mUserNameWrapper.getEditText().getText().toString();
        String password = mPasswordWrapper.getEditText().getText().toString();

        if (!validateEmail(username)) {
            mUserNameWrapper.setError("郵箱地址錯誤");
        } else if (!validatePassword(password)) {
            mUserNameWrapper.setErrorEnabled(false);
            mPasswordWrapper.setError("密碼錯誤");
            mPasswordWrapper.getEditText().setText("");
        } else {
            mUserNameWrapper.setErrorEnabled(false);
            mPasswordWrapper.setErrorEnabled(false);

            doLogin(username, password);
            mUserNameShow.setText(mAccount.getUserName());
            mPasswordShow.setText(mAccount.getPassword());
        }

    }

    private void doLogin(String username, String password) {
        mAccount.setUserName(username);
        mAccount.setPassword(password);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        mAccount = new FavorAdapter.Builder(this).build().create(Account.class);

        mUserNameShow.setText(mAccount.getUserName());
        mPasswordShow.setText(mAccount.getPassword());
    }

    // 隱藏鍵盤
    private void hideKeyboard() {
        View view = getCurrentFocus();
        if (view != null) {
            ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

    // 驗證郵箱
    private boolean validateEmail(String email) {
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    // 驗證密碼
    private boolean validatePassword(String password) {
        return password.length() > 7;
    }

    ...
}

2. Favor

初始化Favor類, 傳入Context和Favor類型的類.

mAccount = new FavorAdapter.Builder(this).build().create(Account.class);

Account類, 必須要設定set和get方法, 名稱相同, 可以提供默認值.

@AllFavor
public interface Account {
    void setUserName(String userName);

    @Default("No Name") String getUserName();

    void setPassword(String password);

    @Default("000000") String getPassword();
}

設置Favor類

    private void doLogin(String username, String password) {
        mAccount.setUserName(username);
        mAccount.setPassword(password);
    }

使用Favor類

        mUserNameShow.setText(mAccount.getUserName());
        mPasswordShow.setText(mAccount.getPassword());

Github下載地址

聲明Favor的Interface, 就可以方便地使用SharedPreferences了.
Enjoy it!

來自: http://blog.csdn.net//caroline_wendy/article/details/49721575

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!