做安卓開發時一定要註意,主線程不能更改UI界面,如果出現程式運行時崩潰的情況,如果沒有明顯的語法錯誤,請檢查自己的進程是否出現衝突,崩潰。如果有與後臺的連接,即請求向伺服器發送請求的時尤其需要註意,或出現沒有報錯,但就是網路請求這段代碼不會執行,這種情況下,如果設置的參數或者其他地方沒有什麼問題,但 ...
做安卓開發時一定要註意,主線程不能更改UI界面,如果出現程式運行時崩潰的情況,如果沒有明顯的語法錯誤,請檢查自己的進程是否出現衝突,崩潰。如果有與後臺的連接,即請求向伺服器發送請求的時尤其需要註意,或出現沒有報錯,但就是網路請求這段代碼不會執行,這種情況下,如果設置的參數或者其他地方沒有什麼問題,但就是網路連接這段代碼不執行,這個時候就需要檢查自己的進程之間是否衝突。
我一般會在主線程中,實例化一個Thread類,開啟另一個線程,然後在這裡面進行操作,併在得到數據之後利用handle進行值的傳遞。具體的用法如下:
//定義一個handler,用於線程之間數據的傳遞,如果定義全局變數的話有局限性,因為進程之間是非同步載入,往往會出現,頁面顯示數據時,還沒有捕獲到數據,所以建議使用handler進行數據的傳遞
private Handler myHandler =new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
switch (msg.what){
case 1:
.....
break;
}
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
......
new Thread(new Runnable() {
@Override
public void run() {
......
Message msg = new Message();
msg.what = 1;
msg.obj = ...(傳遞的值);
myHandler.sendMesage(msg);
//如果沒有要傳遞的數值,只是需要根據狀態進行響應的操作,可以直接用sendEmptyMessageDelayed();第一個參數相當於msg.what,用於狀態的判斷選擇。第二個參數是延遲時間,就是這條語句延遲多長時間執行(毫秒)。
myHandler.sendEmptyMessageDelayed(1,0);
//如果直接在進程中更改UI界面,沒有反應的話,試試在語句的前後用Looper.prepare();Looper.loop();包裹一下,例如:
Looper.prepare();
Toast.makeText(getContext,"獲取數據成功",Toast.LENGTH_SHORT).show();
Looper.loop();
}
//如果進程沒有反應的話,首先檢查是否設置了進程啟動,即在實例化類的時候寫入.start();啟動
}).start();
}
android 輸入框提示文字點擊消失
在輸入框中加入屬性 android:hint="提示文字" 即可。
android 讓TexiView裡面的文字居中顯示
android:gravity="center";
Activity_xml視圖模式不顯示以及錯誤提示
Error:Error: 'B' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore
此類錯誤提示,主要是項目中有的文件名,不符合該系統的命名規範,就像是我的這個錯誤提示中,就有在這個文件名中不應該有大寫字母,而我的出現了大寫的字母"B",所以報錯,導致Activity_xml文件的視圖模式無法正常顯示