2.規范化
3.命名合理
SharedPreferences是Android平臺上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平臺常規的Long長 整形、Int整形、String字符串型的保存,它是什么樣的處理方式呢?SharedPreferences類似過去Windows系統上的ini配置文件,但是它分為多種權限,可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,對于常規的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對于內存資源占用比較好。
這種方式應該是用起來最簡單的Android讀寫外部數據的方法了。他的用法基本上和 J2SE(java.util.prefs.Preferences)中的用法一樣,以一種簡單、 透明的方式來保存一些用戶個性化設置的字體、顏色、位置等參數信息。一般的應用程序都會提供“設置”或者“首選項”的這樣的界面,那么這些設置最后就可以 通過Preferences來保存,而程序員不需要知道它到底以什么形式保存的,保存在了什么地方。當然,如果你愿意保存其他的東西,也沒有什么限制。只是在性能上不知道會有什么問題。
在Android系統中,這些信息以XML文件的形式保存在 /data/data/PACKAGE_NAME /shared_prefs 目錄下。
下面舉個例子如何高效的應用該類,比如QQ登錄
public class SharePreferenceUtil {
private SharedPreferences sp;
private SharedPreferences.Editor editor;
public SharePreferenceUtil(Context context, String file) {
sp = context.getSharedPreferences(file, context.MODE_PRIVATE);
editor = sp.edit();
}
// 用戶的密碼
public void setPasswd(String passwd) {
editor.putString("passwd", passwd);
editor.commit();
}
public String getPasswd() {
return sp.getString("passwd", "");
}
// 用戶的id,即QQ號
public void setId(String id) {
editor.putString("id", id);
editor.commit();
}
public String getId() {
return sp.getString("id", "");
}
// 用戶的昵稱
public String getName() {
return sp.getString("name", "");
}
public void setName(String name) {
editor.putString("name", name);
editor.commit();
}
// 用戶的郵箱
public String getEmail() {
return sp.getString("email", "");
}
public void setEmail(String email) {
editor.putString("email", email);
editor.commit();
}
// 用戶自己的頭像
public Integer getImg() {
return sp.getInt("img", 0);
}
public void setImg(int i) {
editor.putInt("img", i);
editor.commit();
}
// ip
public void setIp(String ip) {
editor.putString("ip", ip);
editor.commit();
}
public String getIp() {
return sp.getString("ip", Constants.SERVER_IP);
}
// 端口
public void setPort(int port) {
editor.putInt("port", port);
editor.commit();
}
public int getPort() {
return sp.getInt("port", Constants.SERVER_PORT);
}
// 是否在后臺運行標記
public void setIsStart(boolean isStart) {
editor.putBoolean("isStart", isStart);
editor.commit();
}
public boolean getIsStart() {
return sp.getBoolean("isStart", false);
}
// 是否第一次運行本應用
public void setIsFirst(boolean isFirst) {
editor.putBoolean("isFirst", isFirst);
editor.commit();
}
public boolean getisFirst() {
return sp.getBoolean("isFirst", true);
}
}
應用如下所示:
mAccounts = (EditText) findViewById(R.id.lgoin_accounts);
mPassword = (EditText) findViewById(R.id.login_password);
if (mAutoSavePassword.isChecked()) {
SharePreferenceUtil util = new SharePreferenceUtil(
LoginActivity.this, Constants.SAVE_USER);
mAccounts.setText(util.getId());
mPassword.setText(util.getPasswd());
}
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
}
public void testabc(){
int[] str = new int[4];
int[] a = new int[]{1,2};
int[] b = new int[]{3,4};
hel(a,b, str);
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
} 1.字節數組取反











2.查找字節數組中字數組的位置















3.字節數組轉換為16進制




















java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
1.出現這個問題的原因有可能的其中一點就是spring的jar包沒有被加載,有的時候沒有拷spring的jar包會出現這個錯誤,但是當你拷了以后這個錯誤并沒有消失的時候就說明jar包沒有被加載,切記spring的jar包一定要放在工程的lib下這樣才能避免這個錯誤的發生。
2.使用了重復的類庫,且版本不一致。導致低版本的被優先使用。比如今天遇到一種情況在tomcat服務器使用了axis2.war包,當啟動tomcat的時候,axis2.war包會自動解壓,之后再該項目包里有相關的spring包,所以當有另外一個工程要到spring時,就有可能要到axis2的spring包,如果版本不一致就會導致該問題,解決的方法就是讓該項目不受axis2項目包的影響。
https 雙向認證配置:
1、生成服務器端密鑰庫 :
keytool -genkey -keyalg RSA -dname "cn=rtsm.nfcstore.com.cn,ou=a,o=a,l=a,st=a,c=cn" -alias server -keypass 123456 -keystore rhg_server.keystore -storepass 123456 -validity 365
2、導出服務端證書:
keytool -export -alias server -file nxp.crt -keystore rhg_server.keystore -storepass 123456 -rfc
3、生成瀏覽器(只能是PKCS12格式)證書
keytool -genkey -keyalg RSA -dname "cn=abc,ou=a,o=a,l=a,st=a,c=cn" -alias mock -storetype PKCS12 -keypass 123456 -keystore mock.p12 -storepass 123456 -validity 365
4. 導出瀏覽器證書
keytool -export -alias mock -file mock.crt -keystore mock.p12 -storepass 123456 -storetype PKCS12 -rfc
5、添加客戶端證書到服務器中
keytool -import -v -alias mock -file mock.crt -keystore rhg_server.keystore -storepass 123456
6、添加服務端證書到客戶端中
keytool -import -v -alias server -file nxp.crt -keystore mockTrust -storepass 123456
7. 查看證書內容
keytool -list -v -keystore rkmsTrust.keystore -storepass 123456
8. 刪除證書
keytool -delete -alias xxx -keystore xxxx.keystore -storepass 123456
9. 修改keypass
keytool -keypasswd -alias xxx -keypass xxx -new 12345 -keystore xxx.keystore -storepass 123456
10. 修改storepass
keytool -storepasswd -keystore xxx.keystore -storepass 123456 -new xxx
Android BKS 證書
keytool -genkey -alias android -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore android.keystore -storepass 123456 -dname "cn=android, ou=a, o=a, l=a, c=CN" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
keytool -export -alias android -file android.crt -keystore android.keystore -storetype BKS -storepass 123456 -provider org.bouncycastle.jce.provider.BouncyCastleProvider
keytool -import -v -alias rhgkms -file rhgkms.crt -keystore androidTrust.keystore -storetype BKS -storepass 123456 -provider org.bouncycastle.jce.provider.BouncyCastleProvider
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:488)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
com.adtech.libraryunion.filter.LoginFilter.doFilter(LoginFilter.java:54)
解決:用記事本打開調用的文件,另存為UTF-8格式即可解決
2.web.xml中
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>時
applicationContext.xml文件的位置在tomcat6.0.35\webapps\axis2\WEB-INF\classes目錄下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
applicationContext.xml文件的位置在tomcat6.0.35\webapps\axis2\WEB-INF\目錄下 摘要: pull解析器 xml解析器有很多種,常見的有Jdom,dom4j等,pull解析xml為android系統所用到的解析器,是android自帶的解析器。 preparation 1.項目結構 2... 閱讀全文
下面這個異常導致的原因可能為:用子線程更新的UI控件的值,比如:在一個線程中執行了Toast.makeText(this,"richhouse",5000);
UI控件畫面的重繪(更新)是由主線程負責的,如果在子線程中更新UI控件的值,更新后的值不會重繪到屏幕上,一定要在主線程里更新UI控件的值,這樣才能在屏幕上顯示出來,不能在子線程中更新UI控件的值。
CRASH: com.richhouse.nfccenter (pid 2719)
// Short Msg: java.lang.IllegalStateException
// Long Msg: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131230759, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
// Build Label: HTC/m7cdwg/m7cdwg:4.1.2/JZO54K/eng.buildteam.20130530.092435:userdebug/test-keys
// Build Changelist: eng.buildteam.20130530.092435
// Build Time: 1369877182000
// java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131230759, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
// at android.widget.ListView.layoutChildren(ListView.java:1734)
// at android.widget.ListView.setSelectionInt(ListView.java:2157)
// at android.widget.AbsListView.resurrectSelection(AbsListView.java:5608)
// at android.widget.AbsListView.resurrectSelectionIfNeeded(AbsListView.java:5497)
// at android.widget.ListView.commonKey(ListView.java:2319)
// at android.widget.ListView.onKeyDown(ListView.java:2243)
// at android.view.KeyEvent.dispatch(KeyEvent.java:2719)
// at android.view.View.dispatchKeyEvent(View.java:7147)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1365)
// at android.widget.ListView.dispatchKeyEvent(ListView.java:2228)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.support.v4.view.ViewPager.dispatchKeyEvent(Unknown Source)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2013)
// at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1490)
// at android.app.Activity.dispatchKeyEvent(Activity.java:2414)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1940)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.widget.TabHost.dispatchKeyEvent(TabHost.java:298)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1369)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2013)
// at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1490)
// at android.app.Activity.dispatchKeyEvent(Activity.java:2414)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1940)
// at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:4093)
// at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:4063)
// at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3232)
// at android.os.Handler.dispatchMessage(Handler.java:99)
// at android.os.Looper.loop(Looper.java:155)
// at android.app.ActivityThread.main(ActivityThread.java:5536)
// at java.lang.reflect.Method.invokeNative(Native Method)
// at java.lang.reflect.Method.invoke(Method.java:511)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
// at dalvik.system.NativeStart.main(Native Method)
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | |||
6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
27 | 28 | 29 | 30 | 31 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
常用鏈接
留言簿(2)
隨筆分類
- Android(49)
- Androidpn(2)
- hibernate(1)
- Https(1)
- JavaCard(3)
- jQuery(6)
- netty
- NFC(1)
- react框架(1)
- spring(2)
- SpringBoot(1)
- Tomcat+Eclipse(18)
- WebService(2)
- 一些心得(1)
隨筆檔案
- 2020年4月 (4)
- 2015年7月 (5)
- 2015年6月 (6)
- 2015年5月 (4)
- 2015年4月 (3)
- 2015年3月 (1)
- 2015年2月 (1)
- 2015年1月 (4)
- 2014年12月 (1)
- 2014年11月 (2)
- 2014年10月 (2)
- 2014年9月 (2)
- 2014年5月 (5)
- 2014年3月 (3)
- 2014年2月 (2)
- 2014年1月 (8)
- 2013年12月 (2)
- 2013年7月 (2)
- 2013年6月 (4)
- 2013年5月 (16)
- 2012年7月 (1)
- 2012年3月 (2)
- 2011年7月 (6)
文章分類
文章檔案
相冊
收藏夾
Java
搜索
最新隨筆
最新評論

- 1.?re: Android JSON的簡單例子
- 評論內容較長,點擊標題查看
- --JSON.COM
- 2.?re: androidpn(本文服務器為tomcat)
- 評論內容較長,點擊標題查看
- --Deepak Singh