Android開發常用功能
new Thread(new MyThread()).start();
4.取消的話將isLive設定為false就行了
2.Android延時操作
下面是三種方法:
跟上面的定時操作異曲同工
一、執行緒
new Thread(new Runnable(){
public void run(){
Thread.sleep(XXXX);
handler.sendMessage();----告訴主執行緒執行任務
}
}).start
二、延時器
TimerTask task = new TimerTask(){ public void run(){ //execute the task } }; Timer timer = new Timer(); timer.schedule(task, delay);
三、android訊息處理
new Handler().postDelayed(new Runnable(){
public void run() {
//execute the task
}
}, delay);
3.資料加密
參考:
為了確保資料傳輸和資料儲存的安全,我們可以通過特定的演算法,將資料明文加密成複雜的密文。
眾多的加密手段大致可以分為單項加密和雙向加密。單向加密指通過對資料進行摘要計算生成密文,密文不可逆推還原,比如有Base64、MD5、SHA等;雙向加密則相反,指可以把密文逆推還原成明文,其中雙向加密又分為對稱加密
【密碼學常用術語】
明文:未加密的資料
密文:明文經過加密後的資料
加密:將明文轉換為密文的過程
解密:將密文轉換為明文的過程
加密演算法:將明文轉換為密文的轉換演算法
解密演算法:將密文轉換為明文的轉換演算法
加密金鑰:用於加密演算法進行加密操作的金鑰
解密金鑰:用於解密演算法進行解密操作的金鑰
單向加密(資訊摘要)
Java一般需要獲取物件MessageDigest來實現單項加密(資訊摘要)。
1.MD5
即Message-Digest Algorithm 5(資訊-摘要演算法 5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、雜湊演算法),主流程式語言普遍已有MD5實現。將資料(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD5的前身有MD2、MD3和MD4。MD5的作用是讓大容量資訊在用數字簽名軟體簽署私人金鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進位制數字串)。
除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class EncrypMD5 {
public byte[] eccrypt(String info) throws NoSuchAlgorithmException{
//根據MD5演算法生成MessageDigest物件
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] srcBytes = info.getBytes();
//使用srcBytes更新摘要
md5.update(srcBytes);
//完成雜湊計算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
}
public static void main(String args[]) throws NoSuchAlgorithmException{
String msg = "郭XX-精品相聲技術";
EncrypMD5 md5 = new EncrypMD5();
byte[] resultBytes = md5.eccrypt(msg);
System.out.println("密文是:" + new String(resultBytes));
System.out.println("明文是:" + msg);
}
}
2.SHA
是一種資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預對映或資訊),並把它們轉化為長度較短、位數固定的輸出序列即雜湊值(也稱為資訊摘要或資訊認證程式碼)的過程。雜湊函式值可以說時對明文的一種“指紋”或是“摘要”所以對雜湊值的數字簽名就可以視為對此明文的數字簽名。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class EncrypSHA {
public byte[] eccrypt(String info) throws NoSuchAlgorithmException{
MessageDigest md5 = MessageDigest.getInstance("SHA");
byte[] srcBytes = info.getBytes();
//使用srcBytes更新摘要
md5.update(srcBytes);
//完成雜湊計算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
}
/**
* @param args
* @throws NoSuchAlgorithmException
*/
public static void main(String[] args) throws NoSuchAlgorithmException {
String msg = "郭XX-精品相聲技術";
EncrypSHA sha = new EncrypSHA();
byte[] resultBytes = sha.eccrypt(msg);
System.out.println("明文是:" + msg);
System.out.println("密文是:" + new String(resultBytes));
}
}
雙向加密
(一)、對稱加密
採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。 需要對加密和解密使用相同金鑰的加密演算法。由於其速度,對稱性加密通常在訊息傳送方需要加密大量資料時使用。
對稱性加密也稱為金鑰加密。 所謂對稱,就是採用這種加密方法的雙方使用方式用同樣的金鑰進行加密和解密。金鑰是控制加密及解密過程的指令。
演算法是一組規則,規定如何進行加密和解密。因此對稱式加密本身不是安全的。
常用的對稱加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES演算法等
對稱加密一般java類中中定義成員
Java程式碼
//KeyGenerator 提供對稱金鑰生成器的功能,支援各種演算法
private KeyGenerator keygen;
//SecretKey 負責儲存對稱金鑰
private SecretKey deskey;
//Cipher負責完成加密或解密工作
private Cipher c;
//該位元組陣列負責儲存加密的結果
private byte[] cipherByte;
在建構函式中初始化
Java程式碼
1.Security.addProvider(new com.sun.crypto.provider.SunJCE());
2.//例項化支援DES演算法的金鑰生成器(演算法名稱命名需按規定,否則丟擲異常)
3.keygen = KeyGenerator.getInstance("DES");//
4.//生成金鑰
5.deskey = keygen.generateKey();
6.//生成Cipher物件,指定其支援的DES演算法
7.c = Cipher.getInstance("DES");
1.DES 演算法為密碼體制中的對稱密碼體制,又被成為美國資料加密標準,是1972年美國IBM公司研製的對稱密碼體制加密演算法。 明文按64位進行分組, 金鑰長64位,金鑰事實上是56位參與DES運算(第8、16、24、32、40、48、56、64位是校驗位,
使得每個金鑰都有奇數個1)分組後的明文組和56位的金鑰按位替代或交換的方法形成密文組的加密方法。
Java程式碼
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class EncrypDES {
//KeyGenerator 提供對稱金鑰生成器的功能,支援各種演算法
private KeyGenerator keygen;
//SecretKey 負責儲存對稱金鑰
private SecretKey deskey;
//Cipher負責完成加密或解密工作
private Cipher c;
//該位元組陣列負責儲存加密的結果
private byte[] cipherByte;
public EncrypDES() throws NoSuchAlgorithmException, NoSuchPaddingException{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
//例項化支援DES演算法的金鑰生成器(演算法名稱命名需按規定,否則丟擲異常)
keygen = KeyGenerator.getInstance("DES");
//生成金鑰
deskey = keygen.generateKey();
//生成Cipher物件,指定其支援的DES演算法
c = Cipher.getInstance("DES");
}
/**
* 對字串加密
*
* @param str
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Encrytor(String str) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
// 加密,結果儲存進cipherByte
cipherByte = c.doFinal(src);
return cipherByte;
}
/**
* 對字串解密
*
* @param buff
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Decryptor(byte[] buff) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,DECRYPT_MODE表示加密模式
c.init(Cipher.DECRYPT_MODE, deskey);
cipherByte = c.doFinal(buff);
return cipherByte;
}
/**
* @param args
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws Exception {
EncrypDES de1 = new EncrypDES();
String msg ="郭XX-搞笑相聲全集";
byte[] encontent = de1.Encrytor(msg);
byte[] decontent = de1.Decryptor(encontent);
System.out.println("明文是:" + msg);
System.out.println("加密後:" + new String(encontent));
System.out.println("解密後:" + new String(decontent));
}
}
2.3DES
3DES(即Triple DES)是DES向AES過渡的加密演算法(1999年,NIST將3-DES指定為過渡的加密標準),是DES的一個更安全的變形。它以DES為基本模組,通過組合分組方法設計出分組加密演算法,其具體實現如下:
設Ek()和Dk()代表DES演算法的加密和解密過程,K代表DES演算法使用的金鑰,P代表明文,C代表密文,
這樣,
3DES加密過程為:C=Ek3(Dk2(Ek1(P)))
3DES解密過程為:P=Dk1((EK2(Dk3(C)))
又稱Triple DES,是DES加密演算法的一種模式,它使用3條56位的金鑰對3DES 資料進行三次加密。資料加密標準(DES)是美國的一種由來已久的加密標準,它使用對稱金鑰加密法,並於1981年被ANSI組織規範為ANSI X.3.92。DES使用56位金鑰和密碼塊的方法,而在密碼塊的方法中,文字被分成64位大小的文字塊然後再進行加密。比起最初的DES,3DES更為安全。
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class EncrypDES3 {
// KeyGenerator 提供對稱金鑰生成器的功能,支援各種演算法
private KeyGenerator keygen;
// SecretKey 負責儲存對稱金鑰
private SecretKey deskey;
// Cipher負責完成加密或解密工作
private Cipher c;
// 該位元組陣列負責儲存加密的結果
private byte[] cipherByte;
public EncrypDES3() throws NoSuchAlgorithmException, NoSuchPaddingException {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
// 例項化支援DES演算法的金鑰生成器(演算法名稱命名需按規定,否則丟擲異常)
keygen = KeyGenerator.getInstance("DESede");
// 生成金鑰
deskey = keygen.generateKey();
// 生成Cipher物件,指定其支援的DES演算法
c = Cipher.getInstance("DESede");
}
/**
* 對字串加密
*
* @param str
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Encrytor(String str) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
// 加密,結果儲存進cipherByte
cipherByte = c.doFinal(src);
return cipherByte;
}
/**
* 對字串解密
*
* @param buff
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Decryptor(byte[] buff) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,DECRYPT_MODE表示加密模式
c.init(Cipher.DECRYPT_MODE, deskey);
cipherByte = c.doFinal(buff);
return cipherByte;
}
/**
* @param args
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws Exception {
EncrypDES3 des = new EncrypDES3();
String msg ="郭XX-搞笑相聲全集";
byte[] encontent = des.Encrytor(msg);
byte[] decontent = des.Decryptor(encontent);
System.out.println("明文是:" + msg);
System.out.println("加密後:" + new String(encontent));
System.out.println("解密後:" + new String(decontent));
}
}
3.AES
密碼學中的高階加密標準(Advanced Encryption Standard,AES),又稱 高階加密標準 Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高階加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日釋出於FIPS PUB 197,並在2002年5月26日成為有效的標準。2006年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。
該演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以Rijndael之命名之,投稿高階加密標準的甄選流程。(Rijdael的發音近於 "Rhinedoll"。)
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class EncrypAES {
//KeyGenerator 提供對稱金鑰生成器的功能,支援各種演算法
private KeyGenerator keygen;
//SecretKey 負責儲存對稱金鑰
private SecretKey deskey;
//Cipher負責完成加密或解密工作
private Cipher c;
//該位元組陣列負責儲存加密的結果
private byte[] cipherByte;
public EncrypAES() throws NoSuchAlgorithmException, NoSuchPaddingException{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
//例項化支援DES演算法的金鑰生成器(演算法名稱命名需按規定,否則丟擲異常)
keygen = KeyGenerator.getInstance("AES");
//生成金鑰
deskey = keygen.generateKey();
//生成Cipher物件,指定其支援的DES演算法
c = Cipher.getInstance("AES");
}
/**
* 對字串加密
*
* @param str
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Encrytor(String str) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] src = str.getBytes();
// 加密,結果儲存進cipherByte
cipherByte = c.doFinal(src);
return cipherByte;
}
/**
* 對字串解密
*
* @param buff
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Decryptor(byte[] buff) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根據金鑰,對Cipher物件進行初始化,DECRYPT_MODE表示加密模式
c.init(Cipher.DECRYPT_MODE, deskey);
cipherByte = c.doFinal(buff);
return cipherByte;
}
/**
* @param args
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws Exception {
EncrypAES de1 = new EncrypAES();
String msg ="郭XX-搞笑相聲全集";
byte[] encontent = de1.Encrytor(msg);
byte[] decontent = de1.Decryptor(encontent);
System.out.println("明文是:" + msg);
System.out.println("加密後:" + new String(encontent));
System.out.println("解密後:" + new String(decontent));
}
}
(二)、非對稱加密
1976年,美國學者Dime和Henman為解決資訊公開傳送和金鑰管理問題,提出一種新的金鑰交換協議,允許在不安全的媒體上的通訊雙方交換資訊,安全地達成一致的金鑰,這就是“公開金鑰系統”。相對於“對稱加密演算法”這種方法也叫做“非對稱加密演算法”。 與對稱加密演算法不同,非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰 (privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。
1.RSA
公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰資料加密標準。RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
public class EncrypRSA {
/**
* 加密
* @param publicKey
* @param srcBytes
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
protected byte[] encrypt(RSAPublicKey publicKey,byte[] srcBytes) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
if(publicKey!=null){
//Cipher負責完成加密或解密工作,基於RSA
Cipher cipher = Cipher.getInstance("RSA");
//根據公鑰,對Cipher物件進行初始化
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] resultBytes = cipher.doFinal(srcBytes);
return resultBytes;
}
return null;
}
/**
* 解密
* @param privateKey
* @param srcBytes
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
protected byte[] decrypt(RSAPrivateKey privateKey,byte[] srcBytes) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
if(privateKey!=null){
//Cipher負責完成加密或解密工作,基於RSA
Cipher cipher = Cipher.getInstance("RSA");
//根據公鑰,對Cipher物件進行初始化
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] resultBytes = cipher.doFinal(srcBytes);
return resultBytes;
}
return null;
}
/**
* @param args
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
EncrypRSA rsa = new EncrypRSA();
String msg = "郭XX-精品相聲";
//KeyPairGenerator類用於生成公鑰和私鑰對,基於RSA演算法生成物件
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//初始化金鑰對生成器,金鑰大小為1024位
keyPairGen.initialize(1024);
//生成一個金鑰對,儲存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
//得到私鑰
RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
//得到公鑰
RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();
//用公鑰加密
byte[] srcBytes = msg.getBytes();
byte[] resultBytes = rsa.encrypt(publicKey, srcBytes);
//用私鑰解密
byte[] decBytes = rsa.decrypt(privateKey, resultBytes);
System.out.println("明文是:" + msg);
System.out.println("加密後是:" + new String(resultBytes));
System.out.println("解密後是:" + new String(decBytes));
}
}
2.DSA
Digital Signature Algorithm (DSA)是Schnorr和ElGamal簽名演算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。(感覺有點複雜,沒有附程式碼)
詳見http://63938525.iteye.com/blog/1051565
4.設定圓角按鈕和邊框
圓角的按鈕實現扁平化的UI很有美感,但是實現起來也不算太難。
在res目錄下的drawable-mdpi建立xml檔案shape.xml,如下圖所示:
Shapeone.xml (圓角)
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的顏色 -->
<solid android:color="#FFFFFF" />
<!-- 設定按鈕的四個角為弧形 -->
<!-- android:radius 弧形的半徑 -->
<corners android:radius="5dip" />
<!-- padding:Button裡面的文字與Button邊界的間隔 -->
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
Shapetwo.xml (邊框)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!--背景色-->
<solid android:color="#FFFFFF" />
<!—-邊框色-->
<stroke
android:width="0.01dp"
android:color="#FFFFFF" />
<padding
android:bottom="1dp"
android:left="0.5dp"
android:right="0.5dp"
android:top="0dp" />
</shape>
main.xml
在android:background="@drawable/shape"就使用了shape.xml資源
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/roundButton"
android:text=" 圓角按鈕 "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape"
/>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, RoundButtonDemoActivity!</string>
<string name="app_name">RoundButtonDemo</string>
</resources>
5.android studio 裝置除錯及Logcat檢視
現在android的開發工具基本上都改用android studio而慢慢棄用eclipse了,那麼android studio的除錯裝置該怎麼設定和檢視程式的Logcat呢?
首先點選專案上方app右邊的小箭頭,然後選擇"Edit Configurations...",如下圖:
然後選擇
Show chooser dialog : 彈出視窗,可選擇真機除錯或虛擬機器除錯。
Use same device for futrue launches : 選中的話,當下次除錯時,會使用之前相同的除錯方式。
USB device : 使用真機除錯。
Emulator : 使用虛擬機器除錯。
Prefer Android Virtual Device : 可選擇已經存在的虛擬機器,點選右邊"..." 彈出AVD Manager(要在選擇Emulator後才可點選)。
當程式執行後,我們需要在除錯的時候檢視Logcat的資訊,點選android studio 底部的Android按鈕,會彈出一個除錯的視窗。