[Android]Android Layout元件
[Android] layout_weight的妙用-讓View的大小以百分比率顯示(proportionate size)
2013年7月14日 星期日
mssql - 刪除或編輯現有資料時出現 "沒有刪除任何資料列。 嘗試刪除資料列3時發生問題....."
參考:資料重複無法修改或刪除
今天使用ms-sql時遇到個問題,刪除某些現有的資料列與編輯,都會出現下列錯誤:
沒有刪除任何資料列。
嘗試刪除資料列3時發生問題。
錯誤來源:Microsoft VisualStudio.DataTools。
錯誤訊息:已更新或刪除的資料列值不會使資料列成為唯一,而是會修改多個資料列(2個資料列)。
解答是:應該要設定PK,這樣在編輯/刪除全部相同的資料列時,資料庫才不會因為無法識別修改而產生錯誤
2013年7月13日 星期六
android - 如何在目標頁面有redirect的情形下判斷頁面是否確實loading finished?
參考:How can I know that my WebView is loaded 100%?
遇到一個需求:需要在頁面讀取完成後通知使用者(使用Alert或是Toast)
一開始只是很簡單的implement WebViewClinet中的:
@Override
public void onPageFinished(WebView view, String url)
onPageFinished()可以在Page 讀取完畢後獲得通知,但發現一個問題,若這個頁面進行多次(1次以上)的redirect,那麼,每redirect一次,就會notify一次onPageFinished(),這似乎無法達成我想要的動作。
假設我的頁面的流程如下:
利用redirect前會先notify shouldOverrideUrlLoading()來判定是否為redirect,若是,則在onPageFinished()時就不代表結束;而在每一次onPageFinished()時reset redirect flag;因此,上述範例的流程的flag變化如下:
loadingFinished=true, redirect=false
遇到一個需求:需要在頁面讀取完成後通知使用者(使用Alert或是Toast)
一開始只是很簡單的implement WebViewClinet中的:
@Override
public void onPageFinished(WebView view, String url)
onPageFinished()可以在Page 讀取完畢後獲得通知,但發現一個問題,若這個頁面進行多次(1次以上)的redirect,那麼,每redirect一次,就會notify一次onPageFinished(),這似乎無法達成我想要的動作。
假設我的頁面的流程如下:
- 開啟 http://DNS/app/test.jsp
- redirect to http://DNS/app/afterTest.jsp
直接以Logcat Log進行流程如下:
- onPageStarted() http://DNS/app/test.jsp
- shouldOverrideUrlLoading() http://DNS/app/afterTest.jsp
- onPageFinished() http://DNS/app/afterTest.jsp
- onPageStarted() http://DNS/app/afterTest.jsp
- onPageFinished() http://DNS/app/afterTest.jsp
因此原先只有直接implement onPageFinished()的作法會導致還沒進行到最後的afterTest.jsp就直接通知使用者;網路上找到建議作法如下,我自己也順利成功:
boolean loadingFinished = true;
boolean redirect = false;
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
webView.loadUrl(urlNewString);
return true;
}
@Override
public void onPageStarted(WebView view, String url) {
loadingFinished = false;
//SHOW LOADING IF IT ISNT ALREADY VISIBLE
}
@Override
public void onPageFinished(WebView view, String url) {
if(!redirect){
loadingFinished = true;
}
if(loadingFinished && !redirect){
//HIDE LOADING IT HAS FINISHED
} else{
redirect = false;
}
}
});
利用redirect前會先notify shouldOverrideUrlLoading()來判定是否為redirect,若是,則在onPageFinished()時就不代表結束;而在每一次onPageFinished()時reset redirect flag;因此,上述範例的流程的flag變化如下:
loadingFinished=true, redirect=false
- onPageStarted() http://DNS/app/test.jsp
loadingFinished=false , redirect=false - shouldOverrideUrlLoading() http://DNS/app/afterTest.jsp
loadingFinished=false , redirect=true - onPageFinished() http://DNS/app/afterTest.jsp
loadingFinished=false , redirect=false - onPageStarted() http://DNS/app/afterTest.jsp
loadingFinished=false , redirect=false - onPageFinished() http://DNS/app/afterTest.jsp
loadingFinished=true , redirect=false
android - 使用WebViewClient時一直 onReceivedError() :-1,發生網路錯誤
檢查希望執行的url並沒有任何問題,後來發現是AndroidManifest.xml中忘記開啟permission:
<uses-permission android:name="android.permission.INTERNET" />
加上後OK順利運作
android - R.java沒有自動產生
就算使用project->clean依然無自動產生,
這時需要檢查res下的.xml或是AndroidManifest.xml的配置是否有錯誤,例如<activity>下的android:name的package是否有錯誤
AndroidManifest.xml的錯誤會顯示於Console中
這時需要檢查res下的.xml或是AndroidManifest.xml的配置是否有錯誤,例如<activity>下的android:name的package是否有錯誤
AndroidManifest.xml的錯誤會顯示於Console中
2013年7月12日 星期五
android - eclipse debug時出現 INSTALL_PARSE_FAILED_NO_CERTIFICATES
[2013-07-12 19:35:48 - XXXProject] Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES
[2013-07-12 19:35:48 - XXXProject] Please check logcat output for more details.
[2013-07-12 19:35:48 - XXXProject] Launch canceled!
若有include 3rd的.jar 有可能是因為.jar中有與現有專案重複名稱的檔案存在(ex: resource file)
[2013-07-12 19:35:48 - XXXProject] Please check logcat output for more details.
[2013-07-12 19:35:48 - XXXProject] Launch canceled!
若有include 3rd的.jar 有可能是因為.jar中有與現有專案重複名稱的檔案存在(ex: resource file)
2013年7月10日 星期三
android初體驗 - 如何將lib打包為.jar後還能存取到其中的activity與resource
繼上一篇的使用Lib
前情提要:
最近因為案子需要開始接觸android,完全沒碰過android的我只能硬者頭皮上架,第一個就遇到問題:
因為我的lib有activity,所以如果直接做成.jar供Client呼叫,如下方式:
Intent intent = new Intent(v.getContext(), LibMainActivity.class);
intent.putExtra("userid", "breeze");
intent.putExtra("facextra", "server_1");
startActivity(intent);
會在執行時出現 classdefnotfound exception!
後來找了一下文章,官方提到以下面的方式使用lib:(看友方(?)的使用文件也是一樣方式)
Setting up a Library Project
但很明顯的..這個等於完全將我的
然後後來看到facebook sdk也是一樣這樣做法,心想可能真的就得如此做了吧,再加上隔天就要交差實在找不到解法的情況下,第二天只好這樣子交給廠商了,結果......
第二天廠商表明他們使用U3D開發,不是純android project,所以無法這樣include Lib,但是因為我真的不懂要怎麼弄成jar還能順利將activity成功啟動...因此他就自己做掉了,厚者臉皮詢問下他跟我說只要將R.id.xxx的resource拿掉改成如下方式:
public static int getLayoutId(Context ctx,String paramString){
return ctx.getResources().getIdentifier(paramString, "layout", ctx.getPackageName());
}
就可以了,我照者試做,的確把所有的R.id.xxx的引用點改掉,原先為:TextView text = (TextView) findViewById(R.id.noticeText);
改為:
int rid = ResourceUtil.getId(LibMainActivity.this,"noticeText"); TextView text = (TextView) findViewById(rid);
的確可以運作成功,可是!!!打包成.jar一樣會有錯誤阿!!!
找了半天終於找到解答了,簡單說明就是(明明打了很多廢話還簡單說明...)
- 將所有R.id.xxx的引用方式改為上述使用
- 所有資源檔的名字不能重複:例如預設的activity_main.xml就最好不要使用,因為使用的client也有可能很偷懶用了預設名稱
- 將所有lib會使用到的activity在Client的AndroidManifest.xml中也一併宣告,請參考下方的Declaring library components in the manifest file
- lib打包成jar時,除了選擇src以外其他都不能選擇
- 將打包好的jar置放(貼)於client project的 libs/ 底下
- 將所有會引用到的resource一併手動複製貼到client端的resource對應位置(資料夾下),例如res/layout/...
所以這麼一來雖然每次release時都要給出lib.jar與resource,但的確感覺比直接給出整個lib project要來的好得多了。
詳細圖文請參考Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
p.s剛剛才發現這篇文章是2013/7/6發布的耶!!!今天是2013/7/10,我真要感謝他剛好在我有問題前幾天發文...
p.s剛剛才發現這篇文章是2013/7/6發布的耶!!!今天是2013/7/10,我真要感謝他剛好在我有問題前幾天發文...
訂閱:
文章 (Atom)