Favor库简述
来源:互联网 发布:google tensorflow应用 编辑:程序博客网 时间:2024/06/16 21:08
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方法, 名称相同, 可以提供默认值.
@AllFavorpublic 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!
2 0
- Favor库简述
- CSDN! My favor
- Favor composition over inheritance
- some resource favor
- 【最小生成树】优惠 favor
- Android SharePreference框架Favor详解
- 库简述----曹太强学库
- Favor static member classes over nonstatic
- Design Principle: Favor Composition Over Inheritance
- Favor the Simple Over the Complex
- Should we always favor xrange() over range()
- 面向对象的设计法则1[Favor Composition Over Inheritance]
- Why is FreeBSD deprecating GCC in favor of Clang/LLVM?
- 动态链接库的使用简述
- Closure教程一: Closure库简述
- SCTP 库的简述和代码
- [cookbook笔记一] OpenCV库简述
- 简述C++中STL标准模板库
- lightoj Answering Queries 1369 (数学转换&&技巧)
- (转)mongodb 解决 couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 错误
- Activity生命周期
- iOS:KVO的概述与使用
- word2vec使用说明
- Favor库简述
- HDU 1560DNA sequence
- [iOS基础]从使用UIPopoverController到UIViewController弹出模态
- 如何手工释放linux内存
- 前期深入
- 在 Struts 2 中自定义支持 OGNL 的标签
- poj 2392 Space Elevator dp 多重背包
- 使用 RxAndroid 处理异步任务
- 自定义View绘制圆形进度条