tag:blogger.com,1999:blog-62426674090550778132023-11-15T07:32:37.256-08:00Soundnet InternationalSoundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.comBlogger37125tag:blogger.com,1999:blog-6242667409055077813.post-30233315727668376692012-01-06T22:19:00.000-08:002013-10-09T01:12:30.561-07:00eclipse找不到HTC Desire<div class="separator" style="clear: both; text-align: left;">
使用HTC開發程式, 可是 Windows | View | Device 看不到我可愛的HTC Device,
該安裝的都安裝了, 手機也沒有問題, 因為手機接在另一台 Win7 的電腦上時, 可以正常debug 程式,
在網上爬,...過程就不說了,
結果是,
在安裝移除程式, 把HTC的三個驅動都移除, 然後重新安裝.....OK,搞定
(移除前後, 看安裝移除程式,一個樣,看不出有何不同)</div>
<div class="separator" style="clear: both; text-align: center;">
<br /> <img border="0" height="128" src="http://2.bp.blogspot.com/-s9p0EQpl7Cg/Twfje66QQeI/AAAAAAAAAIo/szZy5LRteFg/s320/before-remove-drivers.jpg" width="320" /></div>
<br />Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-82683679124187479282012-01-03T19:25:00.000-08:002013-10-09T01:15:13.857-07:00proguard and drawable not found加上proguard後, 有一些resource/drawable找不到了, 因為, 在程式中是使用字串名稱去反查圖檔, 經過了 proguard, 名稱換了, 就找不到了, 有趣的是, 在apk中, 檔案都在, 名稱也沒有換, 看起來, proguard有作一個對照檔。怎麼辦? 在 proguard.cfg 加上幾行<br />
-keepclassmembers class **.R$* {<br />
public static int back;<br />
public static int log;<br />
public static int click;<br />
}<br />
搞定 !!<br />
這也讓我思考,是否有必要保留以名稱來找圖檔。Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-44879382957626850972012-01-03T16:27:00.001-08:002012-01-03T16:58:11.998-08:00proguard使用混淆器,proguard
<br />
1.從R12之後, default.properties 改名為 project.properties
<br />
2.project.properties的檔頭上說:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-8EqKaoEfRKI/TwOgpO0y-II/AAAAAAAAAHs/BAbWewxnwBg/s1600/prject.properties.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="68" src="http://1.bp.blogspot.com/-8EqKaoEfRKI/TwOgpO0y-II/AAAAAAAAAHs/BAbWewxnwBg/s320/prject.properties.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
檔案上說 "Do not modify this files",不要理他,加上一行</div>
<div class="separator" style="clear: both; text-align: left;">
proguard.config = proguard.cfg</div>
<div class="separator" style="clear: both; text-align: left;">
也可以加上路徑 ".\proguard.cfg" 或是絕對路徑。</div>
<div class="separator" style="clear: both; text-align: left;">
3.要Export Package才起作用(專案|右鍵Android Tools)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-qX23TmO1P2E/TwOi3qwmjxI/AAAAAAAAAIE/2iBNtuVDnIM/s1600/Export+Application+Package.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="http://1.bp.blogspot.com/-qX23TmO1P2E/TwOi3qwmjxI/AAAAAAAAAIE/2iBNtuVDnIM/s320/Export+Application+Package.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
4.用新版的proguard</div>
<div class="separator" style="clear: both; text-align: left;">
原先的錯誤是</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-anj6X7eUfao/TwOhiW0Fl2I/AAAAAAAAAH4/vOvbND3y2QU/s1600/Coversion+to+Dalvik+format+failed+with+error+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="http://1.bp.blogspot.com/-anj6X7eUfao/TwOhiW0Fl2I/AAAAAAAAAH4/vOvbND3y2QU/s320/Coversion+to+Dalvik+format+failed+with+error+1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
爬文,說proguard不支援路徑中帶有空白字元,要修改SDK location, </div>
<div class="separator" style="clear: both; text-align: left;">
又說,修改 android-sdk路徑下,proguard路徑下,proguard.bat,</div>
<div class="separator" style="clear: both; text-align: left;">
將 %* 改成 %1,%2,...,%9,...看到一篇說,改成新版的progrard就好, </div>
<div class="separator" style="clear: both; text-align: left;">
試著下載新版(4.7),解壓縮,直接覆蓋到adroid-sdk下之proguard,</div>
<div class="separator" style="clear: both; text-align: left;">
搞定。</div>
<div class="separator" style="clear: both; text-align: left;">
中間還有一個插曲,使用Export unsigned..產生的APK複製到我的HTC Desire手機,無法安裝,但是使用Export signed就好了,APK檔案,從756K 降至 568K, BinGo!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
別忘了,將專案下,proguard路徑下的對照檔,與產生的APK放在一起,以備偵錯使用。</div>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-80824405013023679632011-12-08T17:26:00.001-08:002011-12-08T18:06:06.627-08:00AIDL, couldn't find import for class sni.lib.Note.GestureOperation這個問題與路徑有關, 在函式庫的配合時,<br />
sni.lib.Note..........class GestureOperation<br />
com.sni.Note.......package to host the Service<br />
sni.lib.Page..........package as Client to link the Service<br />
<br />
製作了一個AIDL在com.sni.Note, <br />
package com.sni.Note;<br />
import com.sni.Note.GestureOperation;<br />
interface INoteService {<br />
GestureOperation[] getOperations();<br />
}<br />
出現<br />
couldn't find import for class sni.lib.Note.GestureOperation<br />
的錯誤,<br />
<br />
然後, 加上GestureOperation.aidl的AIDL檔:<br />
parcelable GestureOperation;<br />
原來的錯誤沒有了, <br />
但是所產生(gen)的java檔報錯,<br />
GestureOperation cannot be resolved to a type<br />
並要求import,<br />
如果用了import, 那就違反了檔頭所說的:<br />
* This file is auto-generated. DO NOT MODIFY.<br />
這是因為 GestureOperation.aidl 和GestureOperation.java不在一起,<br />
怎麼辦?<br />
<br />
將GestureOperation.aidl移至sni.lib.Note, 讓他們生活在一起,<br />
當然, import的路徑要改,<br />
import com.sni.Note.GestureOperation<br />
結果, 原來import的錯誤又回來了,<br />
如果在GestureOperation前加上package, 如:<br />
package sni.lib.Note;<br />
parcelable GestureOperation;<br />
結果出現新的錯誤:<br />
interface GestureOperation should be declared in a file called sni\lib\Note\GestureOperation.aidl.<br />
<br />
所以, 暫時看起來沒有解, 有網路文章說, 與路徑有關, 就是GestureOperation放到sni.lib.Note, 但是 aidl compiler找不到, 目前有一個解, 是可以用, 但是如果有多個class要同時使用時, 就要費一點腦子,<br />
sni.lib.Note .............. 放 GestureOperation (java & aidl), INoteGesture.aidl<br />
com.sni.Note ........... 定義Service, 這是因為所需的資料在這個類別裡,<br />
sni.lib.Page .............. 執行 bindService<br />
這樣子, 是可以正常執行的, 因為<br />
INoteGesture ..... GestureOpeartion.aidl ....... GestureOperation.java<br />
都在一起, 避開了路徑的問題<br />
<br />
另外在Serivce, action的定義名稱是自取的, 可以與package名稱不相干.<br />
<br />
在bindService時也出現錯誤, (回傳 false), 這是因為在GroupActivity底下的Activity是無法使用bindService, 在我的個案中, 使用 <br />
getApplicationContext().bindService 依然不行, 但是使用<br />
getParent().bindService就可以了, 這個在網路上有比較完整的討論,<br />
<a href="http://blog.tourizo.com/2009/04/binding-services-while-in-activitygroup.html">http://blog.tourizo.com/2009/04/binding-services-while-in-activitygroup.html</a><br />
<a href="http://randomizedsort.blogspot.com/2010/11/service-binding-workaround-in-tab.html">http://randomizedsort.blogspot.com/2010/11/service-binding-workaround-in-tab.html</a><br />
<br />
還有一點必須注意的是, bindService傳回true, 不代表就可以使用service interface, 必須等onConnection完成. 這是容易理解.<br />
<br />
<br />
<br />Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-15141088205679706302011-12-06T16:39:00.001-08:002011-12-06T16:48:02.020-08:00getLaunchIntentForPackage return null1.確定被呼叫的APP有安裝 (getInstalledPackage)<br />
2.確定被呼叫的APP可以正常執行 (MAIN, LAUNCHER有設定)<br />
<action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br />
可是....就是回傳null,<br />
<br />
結果發現是:<br />
<data android:scheme="id" /><br />
在作怪, 只要有這一行, 就回傳null, 換句話說, 若是有 data/scheme就不能用getLauncherForPackage, <br />
<br />
所以, 就改用 setClass<br />
Intent intent = new Intent(Intent.ACTION_MAIN);<br /> intent.setClassName(packageName, activityName); <br /> intent.setData(Uri.parse("id://"+id));<br /> startActivity(intent);<br />搞定Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-32597716991682748722011-12-06T16:19:00.001-08:002011-12-06T16:20:54.227-08:00attempt to write a readonly database錯誤:<span style="font-family: 新細明體;">
</span><br />
<div class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US"><span style="font-family: Calibri;">12-06 10:16:43.523: E/AndroidRuntime(286):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{sni.Note.Comm/sni.Note.Comm.CommActivity}:
android.database.sqlite.SQLiteException: attempt to write a readonly database:
BEGIN EXCLUSIVE;</span></span></div>
<span style="font-family: 新細明體;">
</span><br />
1.確定是以ReadWrite的方式開啟的,<br />
2.不應該要設定檔案夾或是檔案的權限, 因為這是在手機, 使用者是可能不會設定, 而且, 以前也不用,<br />
<br />
搞了很久, 真是要去撞牆, 原來是權限忘了設:<br />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-70426748063647037622011-11-13T21:43:00.001-08:002011-11-13T22:03:37.873-08:00AsyncTask & notifyDataChangedadapter 的notifyDataChanged()必須在UI thread 中呼叫, 如果不是, 例如, 如果在adapter中, 自行呼叫 notifyDataChanged() 將會造成許多問題, 例如, 按鍵無法接受。在我的個案中,按鍵無法接受,不管是長按或是短按,但是,滑動光學滑鼠之後,就正常了,查網,的確有這個問題。<br />
<a href="http://stackoverflow.com/questions/4566101/how-to-fix-notifydatasetchanged-listview-problems-in-dynamic-adapter-wrapper-and">http://stackoverflow.com/questions/4566101/how-to-fix-notifydatasetchanged-listview-problems-in-dynamic-adapter-wrapper-and</a><br />
<br />
解決的方法是使用AsyncTask, 例如:<br />
class AppendTask extends AsyncTask<Integer, Float, Exception> {<br />
@Override<br /> protected void onPreExecute() {<br /> ... run in UI thread<br />
<br />
<br />
return float-value; <br />
}<br /> @Override<br /> protected Exception doInBackground(Integer... params) {<br />
...<br /> ... run in WORKING thread<br />
...publishProgress(a,b,c);<br />
}<br />
<br />
@Override<br /> protected void onProgressUpdate(Float progress) {<br /> ...run in UI thread<br />
}<br />
@Override<br /> protected void onPostExecute(Exception e) {<br /> ... run in UI thread<br />
}<br /> AsyncTask 的三個參數中,第一個參數(Integer), 是doInBackground()的輸入參數類別,是不定個數的參數。第二個參數(Float) 是onProgressUpdate的輸入參數類別,也是不定個數。第三個參數(如例中之Exception)則為doInBackground的傳回值類別,也是onPostExecute()的輸入類別。<br />
四個函數,只有doInBackground在Working thread(沒有UI的thread)中執行,onPreExecute()第一個被執行,接著就執行doInBackground(), 這是不能省略的函數,在函數中可呼叫(也可以不呼叫)onProgressUpdate一次或多次。onPostExecute()則是在doInBackground結束後執行。<br />Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-63551979236867690612011-11-08T15:42:00.000-08:002011-11-08T15:42:51.969-08:00CharBuffer.toString() trap-Example: int32toHex使用CharBuffer.toString()時, 要注意, 輸出的字串, 是從指標所在的位置開始寫的, 因此, 在輸出之前, 要加上: position(0), 如:<br />
以下是一個範例, 將32位元有正負的整數, 傳成十六進位數字,<br />
/**<br />
* Convert 32 bits integer number to hex-decimal string<br />
* @param num number to convert<br />
* @return hex-decimal string <br />
*/<br />
public static String Int32ToHex(int num) {<br />
final int BUFFER_SIZE=8;<br />
final int BITS=32;<br />
String pattern="0123456789ABCDEF";<br />
CharBuffer digits=CharBuffer.allocate(BUFFER_SIZE);<br />
int digit=0;<br />
int ref=0x80000000;<br />
int bitValue=0x8;<br />
for(int i=0;i<BITS;++i) {<br />
int offset=i%4;<br />
if(offset==0 && i!=0) {<br />
digits.append(pattern.charAt(digit));<br />
digit=0;<br />
bitValue=0x8;<br />
}<br />
if((num & ref)!=0) digit += bitValue;<br />
bitValue >>= 1;<br />
<span style="font-size: xx-small;"> /***<br /> * Notice that, </span><br />
<span style="font-size: xx-small;"> * 0x80000000(-2147483648) >> 1 is NOT 0x40000000, but 0xC0000000(-1073741824) <br /> * (-->E0000000(536870912)-->F0000000(268435456)-->F8000000(-134217728))<br /> * Always divide by 2, no matter positive or negative number<br /> * and 0xFFFFFFFF(-1) >> 1 is NOT 0x7FFFFFFF, but still 0xFFFFFFFF<br /> * For the positive integer, the bit operation is running just as expectation.<br /> */</span> if(ref==0x80000000) ref=0x40000000;<br />
else ref >>= 1;<br />
}<br />
digits.append(pattern.charAt(digit));<br />
digits.position(0);<br />
return digits.toString();<br />
}Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-90764777860198238592011-11-03T06:46:00.000-07:002011-11-03T06:46:49.076-07:00Spinner trap發現spinner設定OnItemSelectedListener時, 會自動呼叫一次,<br />
而且是選項0, 在網站上有找到類似的說法, <br />
<a href="http://blog.csdn.net/androidbluetooth/article/details/6670153">http://blog.csdn.net/androidbluetooth/article/details/6670153</a><br />
結果解決的方法, 有點怪異,<br />
原來是,<br />
spinner.setSelection(itemID);<br />
spinner.setOnItemSelectedListener(...);<br />
結果在執行時, 會自動呼叫listener, 傳入的選項是0,<br />
將這兩行交換,<br />
先設定Listener, 再設定選項,<br />
一切就OK了 !!Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-87989371613349140482011-11-02T08:25:00.000-07:002011-11-02T08:25:36.060-07:00reference link在Java 中都是用物件的連結,<br />
例如:<br />
Date a;<br />
Date b=a;<br />
則常a的值改變時,b也會跟著變,<br />
此時, 用以下兩個指令:<br />
(1) a=new Date(); 和<br />
(2) a.setTime(new Date().getTime());<br />
將會有不一樣的效果,<br />
用前者, 則中斷了b 與 a 的連結, 原來, b 指向 a 的位址, 但是new 指令, 結束了 a 原來的位址, 而產生了一個新的位址(與本體), 因此, a, b 成為獨立的兩個變數.<br />
進一步地探討, 如果:<br />
a=b;<br />
c=a;<br />
那麼b-->a-->c 三個會連動, 但是如果,<br />
a=b;<br />
b=c;<br />
則 a 將獨立, 而b,c 連動.<br />
<br />
這一點在函數傳遞時也有影響,<br />
<br />
a=null;<br />
func(a); 在執行時, a 改變了, 外面的a 是不會變的, 但是如果<br />
Date a;<br />
func(a);<br />
如果在函數中, 使用 a=b, 則連動就結束了,<br />
但如果用a.setTime(...), 那函數結束後, a 的值也改了,<br />
但如果用 b=a, 那a, b 就會連動,<br />
<br />
有趣!!Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-18154730549840052902011-10-27T07:13:00.000-07:002011-10-27T07:15:26.884-07:00自行設計的可視元件在Eclipse的layout中報錯程式執行正常, 可是在Eclipse的layout中報錯,<br />
<a href="http://4.bp.blogspot.com/-Zw6Mx588Q6Q/TqllCTNIaSI/AAAAAAAAAGE/nGK0D4j9W7g/s1600/count+not+be+instantiated+%2528eclipse%2529.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="99" src="http://4.bp.blogspot.com/-Zw6Mx588Q6Q/TqllCTNIaSI/AAAAAAAAAGE/nGK0D4j9W7g/s640/count+not+be+instantiated+%2528eclipse%2529.JPG" width="640" /></a><br />
<br />
<br />
無法產生元件, 查看 Winodws > Show View > Error Log 可以看到<br />
<span style="font-size: xx-small;">android.content.res.Resources$NotFoundException: String array resource ID #0x7f050001<br /> at android.content.res.Resources.getStringArray(Resources.java:385)<br /> at com.sni.Task.DateIcon.init(DateIcon.java:72)<br /> at com.sni.Task.DateIcon.<init>(DateIcon.java:47)<br /> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br /> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)<br /> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)<br /> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:387)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:155)<br /> at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:198)<br /> at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:126)<br /> at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)<br /> at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)<br /> at android.view.LayoutInflater.inflate(LayoutInflater.java:407)<br /> at android.view.LayoutInflater.inflate(LayoutInflater.java:296)<br /> at com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:397)<br /> at com.android.ide.common.rendering.LayoutLibrary.createLegacySession(LayoutLibrary.java:492)<br /> at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:337)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1510)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1347)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1078)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener.reloadLayoutSwt(GraphicalEditorPart.java:1716)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener.access$0(GraphicalEditorPart.java:1654)<br /> at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener$1.run(GraphicalEditorPart.java:1648)<br /> at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)<br /> at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)<br /> at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)<br /> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)<br /> at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)<br /> at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)<br /> at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)<br /> at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)<br /> at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)<br /> at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)<br /> at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)<br /> at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)<br /> at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)<br /> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)<br /> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)<br /> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)<br /> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br /> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br /> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br /> at java.lang.reflect.Method.invoke(Method.java:597)<br /> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)<br /> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)<br /> at org.eclipse.equinox.launcher.Main.run(Main.java:1410)<br /> at org.eclipse.equinox.launcher.Main.main(Main.java:1386)</span><br />
看這一長串可怕的資料, 其實指到一行:<br />
weekDays = this.getResources().getStringArray(R.array.week_short);<br />
(resource ID #0x7f050001)當然, 資源是有的, 否則程式不能執行正常, 但是在Eclipse的Layout中讀不到陣列的資料, 因此就報錯了, 發現, 所有使用Context的資料都會報錯, 解決的方法就是用 this.isInEditMode()包起來, 如:<br />
if (! this.isInEditMode()) {<br />
....(使用到Context的Code, 或是, 全部包起來)<br />
}<br />
然後就在Eclipse和執行都正常了, 當然, 是在constructor中使用.Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-34326642278983072242011-10-26T06:28:00.000-07:002011-10-27T07:13:25.743-07:00Dialog 中的 ListView 只顯示文字長度在Dialog中, 使用ListView, 乖乖, 選項只有半截, 或者說, 只有文字的長度, 選擇時, 也只能選擇文字所在的區域, 選擇後面的空白就變成無效的選擇, 如下圖:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-_f1kJLkWe8Q/TqgJCuJ4W0I/AAAAAAAAAF0/3HFVRjxsU7M/s1600/device-2011-10-26-170531-shorted-selection-item.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-_f1kJLkWe8Q/TqgJCuJ4W0I/AAAAAAAAAF0/3HFVRjxsU7M/s320/device-2011-10-26-170531-shorted-selection-item.png" width="213" /></a></div>
怎麼會這樣, 一直都是好好的呀, 只好一行一行去試, 結果發現, 是 FEATURE_NO_TITLE,<br />
只要設定這個選項時, 就會有這個錯誤, 如下例:<br />
<span style="color: blue;">Dialog dlg = new Dialog(this);<br /><span style="color: red;">dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);</span></span><br />
<span style="color: blue;">ArrayList<HashMap<String,Object>> laHelp=new ArrayList<HashMap<String,Object>>();<br />HashMap<String,Object> map=new HashMap<String,Object>();<br />map.put(HelpDialog.ICON_KEY, R.drawable.task_cancelled);<br />map.put(HelpDialog.TEXT_KEY, "test");<br />laHelp.add(map);<br />ListView lvw=new ListView(this);<br />lvw.setAdapter(new SimpleAdapter(this,laHelp, R.layout.help_item, <br /> new String[] {HelpDialog.ICON_KEY, HelpDialog.TEXT_KEY}, new int[] {R.id.HelpItemImage, R.id.HelpItemText} ));<br />dlg.setContentView(lvw);<br />dlg.show(); </span><span style="color: black;">關鍵就在紅字那一行, 如果刪除, 就正常了, 但是多了抬頭, 怎麼辦呢? 我的方向就是不用SimpleAdapter, 改寫自己的 Adapter, 就正常了.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-L4J_Jv7rq7w/TqgKwfK0sKI/AAAAAAAAAF8/FONN7xZaErg/s1600/device-2011-10-26-212645-good-selection-item.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-L4J_Jv7rq7w/TqgKwfK0sKI/AAAAAAAAAF8/FONN7xZaErg/s320/device-2011-10-26-212645-good-selection-item.png" width="213" /></a></div>
<br />Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-57733860828202947532011-10-20T19:44:00.000-07:002011-10-20T20:34:14.820-07:00Re-indent如果你的原代碼所有的指令都在一行, 只有一行, 很長的一行, 好啦, 許多行也行, 反正就是格式亂七八糟, 如何在Eclipse中排整齊,<br />
使用 Ctrl-Shift-F, 如果有 "//" 就麻煩一點, 必須先將 // 刪除, 或是改成 /* ... */, Ctrl-Shift-F 的選項在,<br />
Source / Format<br />
<br />
<a href="http://stackoverflow.com/questions/1207264/how-do-i-reindent-all-my-codes-in-eclipse">http://stackoverflow.com/questions/1207264/how-do-i-reindent-all-my-codes-in-eclipse</a>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-26960403247653791872011-10-19T20:57:00.000-07:002011-10-19T20:57:11.765-07:00plurals 只支援 one, other發現, 量詞竟然只支援 one, other,<br />
其他都是唬人的, 真是欺騙觀眾,<br />
<a href="http://code.google.com/p/android/issues/detail?id=8287">http://code.google.com/p/android/issues/detail?id=8287</a><br />
改用 MessageFormat 處理<br />
<a href="http://stackoverflow.com/questions/5651902/android-plurals-treatment-of-zero">http://stackoverflow.com/questions/5651902/android-plurals-treatment-of-zero</a>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-47989713361609264682011-10-17T18:25:00.000-07:002011-10-17T18:25:35.598-07:00query like使用Android 的query指令時,<br />
使用, "Title like ?%", new String[] { string } <br />
或是, "Title like '?%'", new String[] { string }<br />
都是錯誤的, 前者在全部符合時才傳回, 後者根本找不到,<br />
或是改成, "Title like ?", new String { string+"%" }<br />
就可以了,<br />
異哉 !! (應該是 % 的處理, 但是改成 \% 則文法錯誤)Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-46056157053943509622011-10-13T20:29:00.000-07:002011-10-13T20:29:21.911-07:00SQLite 的效能要寫入近二百條的資料到數據庫, 很慢, 受不了, 後來查網路文章, 竟然後發, 將指令包在transaction之內, 就變得很快了, 差有百倍以上,<br />
真是好.<br />Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-18446767922186396732011-09-21T16:37:00.000-07:002011-09-21T16:37:54.981-07:00Button Background按鍵如果設定背景色, 將會從按鍵形狀, 變成一個方型,<br />
如果要透過程式變會原來的按鍵形狀, 並沒有清除背景的設定,<br />
可以用<br />
<code><br />
Button btn=new Button(this);<br />
...<br />
btn.setBackgroundResource(android.R.drawable.btn_default);<br />
</code>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-75910404926931176842011-09-21T15:22:00.000-07:002011-10-13T20:26:57.282-07:00Eclipse start but return exit code=1環境: Win 7, 64 bits, eclipse 1.6.26 64 bits<br />
錯誤: <br />
在 eclipse.ini 中加入這一行, 就搞定了,<br />
-XX:-UseCompressedOops<br />
其中 -UseCompressed Oops中的減號, 代表 "不要用",<br />
因此, 讓是元件(Oops)壓縮(Compress)程解壓縮的錯誤,<br />
<br />
找到一些說明:<br />
<div class="help_breadcrumbs">
<a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/collection-welcome.html">IBM User Guides for Java v6 on 64-bit AIX</a> > <a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/user/userguide.html">User Guide</a> > <a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/user/appendixes.html">Appendixes</a> > <a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/diag/appendixes/cmdline/cmdline.html">Command-line options</a> > <a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/diag/appendixes/cmdline/commands_jvm.html">JVM command-line options</a></div>
<a href="http://www.blogger.com/" name="xxcommand-lineoptions"></a> <br />
<h1 class="title topictitle1">
-XX command-line options</h1>
<br />
<div class="body">
<div class="shortdesc">
JVM command-line options that are specified with -XX are not stable and are not recommended for casual use.</div>
<div class="p">
These options are subject to change without notice.</div>
<dl class="dl parml">
<dt class="dt pt dlterm"><span class="keyword parmname parmname">-XXallowvmshutdown:[false|true]</span> </dt>
<dd class="dd pd">This option is provided as a workaround for customer applications that cannot shut down cleanly, as described in APAR IZ59734. Customers who need this workaround should use <span class="keyword parmname parmname">-XXallowvmshutdown:false</span>. The default option is <span class="keyword parmname parmname">-XXallowvmshutdown:true</span> for<span class="ph">Java 6 SR5 onwards.</span> </dd>
<dt class="dt pt dlterm"><span class="keyword parmname parmname">-XX:MaxDirectMemorySize=</span><var class="keyword varname"><size></var> </dt>
<dd class="dd pd">Sets the maximum size for an nio direct buffer. By default, the maximum size is 64 MB. </dd>
<dt class="dt pt dlterm"><span class="keyword parmname parmname">-XX:-StackTraceInThrowable</span> </dt>
<dd class="dd pd">This option removes stack traces from exceptions. By default, stack traces are available in exceptions. Including a stack trace in exceptions requires walking the stack and that can affect performance. Removing stack traces from exceptions can improve performance but can also make problems harder to debug. <br />
<div class="p">
When this option is enabled, <span class="keyword apiname">Throwable.getStackTrace()</span> returns an empty array and the stack trace is displayed when an uncaught exception occurs. <span class="keyword apiname">Thread.getStackTrace()</span> and <span class="keyword apiname">Thread.getAllStackTraces()</span> are not affected by this option.</div>
</dd>
<dt class="dt pt dlterm"><span class="keyword parmname parmname">-XX:+UseCompressedOops</span> </dt>
<dd class="dd pd"><strong class="ph b"><em class="ph i">(64-bit only)</em></strong> This option enables compressed references in 64-bit JVMs and is provided to help when porting applications from the Sun JVM to the IBM® JVM. This option might not be supported in subsequent releases. The <span class="keyword parmname parmname">-XX:+UseCompressedOops</span> option is similar to specifying <span class="keyword parmname parmname">-Xcompressedrefs</span>, which is detailed in the topic <a class="xref" href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.user.aix64.60/diag/appendixes/cmdline/commands_jvm.html" title="Use these options to configure your JVM. The options prefixed with -X are nonstandard.">JVM command-line options</a> . </dd>
<dt class="dt pt dlterm"><span class="keyword parmname parmname">-XX:-UseCompressedOops</span> </dt>
<dd class="dd pd"><strong class="ph b"><em class="ph i">(64-bit only)</em></strong> This option prevents the use of compressed references in 64-bit JVMs. The option is provided to help when porting applications from the Sun JVM to the IBM JVM, and might not be supported in subsequent releases.</dd></dl>
</div>
Reference:<br />
<a href="http://stackoverflow.com/questions/5054035/eclipse-cdt-crashes-java">http://stackoverflow.com/questions/5054035/eclipse-cdt-crashes-java</a><br />
<a href="http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix64.60%2Fdiag%2Fappendixes%2Fcmdline%2Fcommands_jvm_xx.html">http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix64.60%2Fdiag%2Fappendixes%2Fcmdline%2Fcommands_jvm_xx.html</a><br />
<br />
*******<br />
其實這個問題並沒有解決, 偶爾還是會, 後來配置又作了一些修改:<br />
-startup<br />plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar<br />--launcher.library<br />plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502<br />-vm <br />C:/Program Files/Java/jdk1.6.0_26/bin/javaw.exe <br />-product<br />org.eclipse.epp.package.java.product<br />--launcher.defaultAction<br />openFile<br />--launcher.XXMaxPermSize<br />256M<br />-showsplash<br />org.eclipse.platform<br />--launcher.XXMaxPermSize<br />512m<br />--launcher.defaultAction<br />openFile<br />-vmargs <br />-server <br />-Xss2m <br />-XX:+DoEscapeAnalysis <br />-XX:+UseConcMarkSweepGC <br />-Dosgi.requiredJavaVersion=1.5 <br />-Xms200m <br />-Xmx1024m<br />-XX:-UseCompressedOops<br />-XintSoundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-59026240797182787992011-08-29T16:00:00.000-07:002011-08-29T16:01:32.530-07:00無法上傳程式至安卓市集從星期日開始,就無法上傳程式到安卓市集,出現以下的錯誤。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-I4pUHdJzu7A/TlwXk1NHmXI/AAAAAAAAAFI/SRaIUxt7JiA/s1600/fail%2Bto%2Bupload%2BAPK.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="http://1.bp.blogspot.com/-I4pUHdJzu7A/TlwXk1NHmXI/AAAAAAAAAFI/SRaIUxt7JiA/s320/fail%2Bto%2Bupload%2BAPK.JPG" width="320" /></a></div>想,可能是谷歌服務器的關係,就不理會,等一陣子再說吧! 等了一天,還是如此,想,會不會是週末放假了! 或是我們白天,美國晚上的關係,又等了一天,也上網查一下,是否有這方面的訊息或報導。結果,並沒有發現,到了今天早上,想,不該如此的,就換了一部電腦,結果....上傳正常。那就是電腦的問題了!!接著想,那換一個瀏覽器看看,換成火狐,卻出現另外一個問題。無法報到,出現如下訊息:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-J0-xux_gijI/TlwYoFiEYzI/AAAAAAAAAFQ/XoSeJ2V_tZQ/s1600/fail%2Bto%2Bupload%2BAPK-2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="86" src="http://3.bp.blogspot.com/-J0-xux_gijI/TlwYoFiEYzI/AAAAAAAAAFQ/XoSeJ2V_tZQ/s320/fail%2Bto%2Bupload%2BAPK-2.JPG" width="320" /></a></div>上面說,是Cookie的問題,或許是,就到IE去,把Cookie給刪了...結果仍然相同,看火狐上面的解釋,都是舊版本的說明,是否是IE9.0的原因呢???但是上傳圖片是好的,是權限的問題嗎?<br />
先治標吧,到火狐,上傳程式,就正常了。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-6QkT_kORgp4/TlwaEVizifI/AAAAAAAAAFY/elGl3zQq_cg/s1600/fail%2Bto%2Bupload%2BAPK-3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="184" src="http://3.bp.blogspot.com/-6QkT_kORgp4/TlwaEVizifI/AAAAAAAAAFY/elGl3zQq_cg/s320/fail%2Bto%2Bupload%2BAPK-3.JPG" width="320" /></a></div><br />
<br />
<br />
<br />
Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-14912167373631213522011-08-09T17:15:00.001-07:002011-08-09T17:17:15.233-07:00invalidate 部分畫面寫了一個程式, 自己設計了一個view, MyView 繼承至View<br />
在畫圖(onDraw())時, 座標的計算是相對座標, 例如, (0,0) 對應的是畫布的左上角, 但是在整個螢幕上, 並不是左上角。<br />
在整個螢幕上,有二行,一行是系統的狀態行,一行是標題行。<br />
找Google, 很容易可以找到指令。<br />
<code><br />
Rect rectgle= new Rect(); <br />
Window window= getWindow(); <br />
window.getDecorView().getWindowVisibleDisplayFrame(rectgle); <br />
int StatusBarHeight= rectgle.top; <br />
int contentViewTop= <br />
window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); <br />
int TitleBarHeight= contentViewTop - StatusBarHeight; </code><br />
重點是:<font color=”00ffee”>這些指令必須在view所在的thread中執行</font>, 因此,如果你想要在Activity中執行,必須加上:<br />
<code><br />
MyView.post(new Runnable() {<br />
@Override<br />
public void run() {<br />
/* 將執行程式放在此處 */<br />
}<br />
});<br />
</code><br />
另外一個方式是,直接放在View的onDraw()函數。<br />
看起來好像可以用了, 但是,<br />
Invalidate()會調用onDraw(), 沒有錯,<br />
但限定範圍的Invalidate(範圍), 產生的結果卻很怪異,<br />
通常前幾次 (幾乎都是三次,也出現過部分是一次),會畫整個畫面,如同invalidate() (没有參數),造成整個畫布的重劃,這些次數過後,就正常了,只重劃指定的部分。改成postInvalidate()也是相同,只是怪。<br />
指定的操作是:<br />
<ol><li>設定繪畫方法為call back</li>
<li>執行invalidate調用onDraw</li>
<li>onDraw呼叫設定的繪畫方法</li>
</ol><code><br />
/**<br />
* Show item is checked<br />
* @param canvas<br />
* @param date<br />
* @param id<br />
*/<br />
public void ShowChecked(Canvas canvas, int date, int id) {<br />
XY xy=this.getXY(date, id);<br />
if(checked==null) {<br />
checked = BitmapFactory.decodeResource(getResources(),R.drawable.yes);<br />
checked = Bitmap.createScaledBitmap(checked,(int)(unit_width*0.8),(int)(unit_height*0.8), true);<br />
}<br />
canvas.drawBitmap(checked, xy.x+(unit_width*0.1f), xy.y, new Paint());<br />
}<br />
/**<br />
* Call the ShowChecked from outside<br />
* @param date<br />
* @param id<br />
*/<br />
public void ShowChecked(final int date, final int id) {<br />
action.add(new Action() {<br />
@Override<br />
public void GoDraw(Canvas canvas) {<br />
ShowChecked(canvas,date,id);<br />
}<br />
});<br />
this.invalidate(region(date,id)); <br />
}<br />
</code>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-42920261043423744962011-08-08T06:32:00.000-07:002011-08-08T06:32:23.955-07:00態度養成進度: 畫面花了將近半天的時間, 調整了一個不錯的結果, 效率, 其實可以更好一點。這個工作主要是:<br />
1. 把手機螢幕調成橫的(landscape)。<br />
2. 把這個畫面畫出來。<br />
所謂態度養成,就是每天追蹤。讓我們的思想,變成習慣。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-10oPM5YSN0Y/Tj_lYcyYuPI/AAAAAAAAAE4/qXM6rcPCkhY/s1600/AttitudeBuilder-2011-08-08-212459.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="192" width="320" src="http://3.bp.blogspot.com/-10oPM5YSN0Y/Tj_lYcyYuPI/AAAAAAAAAE4/qXM6rcPCkhY/s320/AttitudeBuilder-2011-08-08-212459.png" /></a></div><br />
Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-23340231881252192502011-08-08T00:47:00.000-07:002011-08-08T01:01:42.532-07:00防弊不如興利我是一個正版軟體的擁護者,尤其是國內的軟體。<br />
我買過許多軟體,大家可能沒聽到。<br />
中文Window 3.0,這是只有三天壽命,由資策會開發的軟天,說來話長了,花了NT$ 3000元。二十年前。<br />
我曾是新翰藝的整套系統的用戶,從霹靂卡、彩虹卡到新翰藝雷射印表機,這是倚天正紅的時候的產品,花了就不知道多少個十萬了,在二十年前。<br />
現在,我依然是。<br />
Dr. Eyes, 譯典通, 因著微軟版本的不斷更新,我也不斷更新,也買了近十套的正版軟體,一般都在一千元上下。因著電腦的不穩定,總是要備份。備份,當然,就連著譯典通一起備份了下來。<br />
問題來了,系統重貫時,這個譯典通一直無法註冊。<br />
當然,我估計是這樣一個原因,譯典通把某一個驗證碼存到特定的地方,在備份時,並沒有備份下來,因此,一直保留在電腦裡,只是,系統回復時,譯典通程式認為要重新註冊,但是拿原來那一組註冊碼去註冊時,與電腦裡的儲存相同,拒絕接受,因此,就卡住了。<br />
<font color="#ff0099">打擊罪犯,可能效果相反。為了防範小人,卻造成許多守法的人的不方便。</font>就像是台北市政府,說要保護消費者,結果消費者不能買安卓市集的付費產品。就像許多政客,口口聲聲愛台灣,卻一步一步把台灣逼到死地。人生就是這麼吊詭。<br />
如此一來,每次要回覆之後,都必須把譯典通移除重裝。真是不方便。與客服人員溝通,其實她不能決定什麼,問題是,這個大陸人,連話都不明白。也難為她了。客服人員難為。只是,如果用盜版,反而沒有問題,真是!@#$%︿&<br />
記得高中老師說,人與人之間,70%的時間,用在防弊與猜忌。是嗎?<br />
負擔得起的狀況下,我依然用正版。(負擔不起就考慮不要用)。<br />
勿以善小而不為<br />
勿以惡小而為之<br />
願自己自我警惕 !!<br />
<br />
以下是Google Sense廣告:<br />
<script type="text/javascript"><!-- google_ad_client = "pub-2966378125551072"; /* 300x250, 已建立 2011/8/8 */
google_ad_slot = "5010581914"; google_ad_width = 300; google_ad_height = 250; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-82977022020686216262011-08-07T17:13:00.000-07:002011-08-07T17:15:34.501-07:00態度養成(Attitude Builder)今天,開始《態度養成》應用軟件的開發。態度,就是思考的習慣。我們的判斷與決策,95%來自直覺。也就是習慣。也就是態度。態度決定了我們的決策品質。至關重要,我們明白,然而,如何改善我們的態度呢?<br />
《心理制約》決定了我們的態度。<br />
然而,又如何改變我們的《心理制約》呢?<br />
答案是《間隔重覆》<br />
換句話說:<br />
【間隔重覆】 >> 【心理制約】 >> 【態度】<br />
透過手機工具,追蹤我們的進行,進而養成態度。<br />
例如每天希望早5點早起,每日早起,就在態度追蹤表上,打個勾。<br />
連續實行了21次,就養成習慣了。<br />
如果沒有做到呢? 就要思考一下,這個習慣真的是我們要的嗎? 還是可有可無。思考一下,養成了,有什麼好處?為什麼要養成這個習慣。如果沒有養成呢?有什麼損失,如果是可有可無,那就把它劃掉,我們不必列出來 “給別人看”。或是不斷提醒自己一件,自己不想做的事。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-HH6YRKvs2tA/Tj8qH08T6fI/AAAAAAAAAEw/qbEtPJcZaz0/s1600/Attitude%2BBuilder.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="136" width="320" src="http://4.bp.blogspot.com/-HH6YRKvs2tA/Tj8qH08T6fI/AAAAAAAAAEw/qbEtPJcZaz0/s320/Attitude%2BBuilder.png" /></a></div><br />
<br />
計劃在8/15日前上線. 定價 US$ 0.99元Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-62119578514893293402011-08-07T16:51:00.001-07:002011-08-07T17:17:31.837-07:00珍珠生命(Pearly Life)發展計劃夢想是人生的源頭。有幾個字,是有關的:<br />
夢想、願望、願景、異像。有人說,由人來的,實際的是願望,虛幻的是夢想;由神來的是異像?是或不是,我不知道。天主教曾是追殺基督徒的元兇,基督徒之間,彼此的攻擊也不少,那些大牧者,或許就是作亂的源頭。或許有人明白,但是,我不明白。一切真理的源頭是神。因此,一切真理的實際操作是,禱告。佐之以讀經、交通。保持柔軟謙卑。<br />
這是<a href="https://market.android.com/details?id=com.sni.Prayer"><font color=”#00ff00”>『我的禱告簿(com.sni.Prayer)』</font></a>的由來。朋友的姪女,得到總統奬,二十萬,高中生。他說,他的姪女,每天禱告一個小時,一個小時,拿出禱告單,與神切切地交通,尋求神的旨意。這是我應該學習的。每天,依著禱告簿,好好的禱告。<br />
禱告是與神交通,與神交通的目的是尋求神的旨意。神要我們做什麼?我們該做什麼?我們又不該做什麼?我們現在所行所是,對嗎?需要調整嗎?那些該做的我們沒有做?那些沒有做的我們該做?神的旨意,就是異像(我以為是)。異像的抽像,或是統整,就是『人生使命』這就是<a href="https://market.android.com/details?id=com.sni.Prayer"><font color=”#00ff00”>『我的願景板(com.sni.Vision)』</font></a>的由來,我的願景板中包含了<u>願景清單</u>及<u>人生使命</u>。<br />
有了願景,必須要有行動,因此有了以下,正在開發中的軟體:<br />
<ol><li>分析評估:要達到目標,永遠有三個步驟:<ol><li>了解,清楚了解,確實想要,要去那裡?</li>
<li>了解,深入了解,徹底明白,我在那裡?</li>
<li>思考,找到,從這裡如何到那裡?</li>
</ol></li>
<li>有了評估分析,接著要採取行動,行動有三個要素:<ol><li>目標與計劃,即是行動計劃,行動方案。</li>
<li>每個月的計劃,這是開始落實。</li>
<li>正確態度(思考的習慣)的養成</li>
</ol></li>
<li>而所有的行動,都必須要落實在兩件事上<ol><li>每日的行程規劃與進行。這就是行事曆。</li>
<li>每日的工作清單,工作清單來自於『月計劃』『目標計劃』『態度養成』等。</li>
</ol></li>
</ol><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-LikP5J0AMvQ/Tj8mmd30a_I/AAAAAAAAAEo/cNiSO8Phyy0/s1600/Peraly%2BLife.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="237" width="320" src="http://3.bp.blogspot.com/-LikP5J0AMvQ/Tj8mmd30a_I/AAAAAAAAAEo/cNiSO8Phyy0/s320/Peraly%2BLife.png" /></a></div><br />
<br />
<br />
這就是我想要開發的Pearly Life (珍珠生命)的系統。人生的每一天,都應該像珍珠一般地去珍惜,妥善運用。Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0tag:blogger.com,1999:blog-6242667409055077813.post-87894358888152443422011-08-07T04:23:00.000-07:002011-08-07T04:23:32.821-07:00Android案例開發完全講義(共694頁)今天,K完這本書,這是一本不錯的書。內容很紮實,而作者是一個有實際設計經驗的人,因此,讀起來,不空洞,很實在,也實際有收獲。對Android沒有認識想認識的人,或是有一些認識想更認識的人,至於高手,那就要看高到什麼程度了。<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-bw4n9oZaw7E/Tj51rdZKrDI/AAAAAAAAAEg/enKpWALKCzM/s1600/phpThumb_generated_thumbnailjpg.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="280" width="200" src="http://4.bp.blogspot.com/-bw4n9oZaw7E/Tj51rdZKrDI/AAAAAAAAAEg/enKpWALKCzM/s320/phpThumb_generated_thumbnailjpg.jpg" /></a></div>Soundnet Internationalhttp://www.blogger.com/profile/16697849297818583476noreply@blogger.com0