發表文章

目前顯示的是 9月, 2017的文章

Thread與Handler淺介紹

Thread簡單來說,就是執行Activity的時候,可以呼叫來幫忙執行一些小工作的分頁 因為是跟Activity一起運行的所以可以看成是一個平行世界(? Thread能動到Activity的部分主要就只有全域變數了,就算是把他叫出來的副程式也是除了呼叫他以外沒有別的互動了 因為這個關係所以Activity在執行的時候沒辦法知道,到底叫Thread處理的事情處理好了沒 萬一猜錯了結果用到了null整個程式就會GG啦 所以這個時候就是Handler出場啦~ Handler作為Thread與Activity的仲介(?),Thread可以把他做好的一些資料用bundle的方式傳給Handler還可以告訴他現在是什麼事做好了,讓他可以告知Activity的下一步動作 這樣就可以不用為了傳值做一堆全域變數啦 這是一個基本的Handler private Handler H= new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: break; case 2: break; case 3: break; default: break; } } }; 這是在Thread告知Handler的樣子 Message msg = new Message(); Bundle b =new Bundle(); b.putInt("version",Integer.parseInt(res)); msg.setData(b); msg.what=1; H.sendMessage(msg); 順帶一提,bundle就像$_POST[]一樣,可以用一個字串來找到當初放的值 再來就是要詳細的介紹一下Thread了(說好的淺介紹!? Thread這貨雖然說是在背後接任物默默執行的,但其實也沒有這麼好用!! 像之...

基本元件Spinner與ListView

圖片
表單是一種蠻常用的功能 就像switch一樣,一行就能搞定多數的選擇了 不過同樣都是顯示多筆資料,Spinner(下拉選單)跟ListView(清單)其實還蠻不一樣的 首先,這個右邊有個小箭頭可以點開的是Spinner 這個一行一行全部顯示的是ListView 不管你要提供的選擇是什麼型態的,都沒問題,下面就用String來做範例 首先一定會先要一個Arratlist ArrayList strlist = new ArrayList (); 以及一個選單的架構,ArrayAdapter ArrayAdapter AAS = new ArrayAdapter (MainActivity.this,R.layout.support_simple_spinner_dropdown_item); AAS.addAll(strlist); 看到泛型<>,就知道他真的放什麼型態都可以了~ 然後不管是Spinner還是ListView,只要把Adapter給set進去就完成了基本的雛型 ListView LV = new ListView(this); LV.setAdapter(AAS); //^ListView vSpinner Spinner SP = new Spinner(this); LV.setAdapter(AAS); 當然除了長相以外,最重要的還是功能 再選擇的地方,兩個View的方法開始產生了分歧 雖然兩個都有setOnItemClickListener,但是Spinner用的卻是OnItemSelectedListener 這是Spinner的Listener SP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { } @Override public void onNothingSel...

使用GoogleMap API

要顯示GoogleMap好像有很多種方法 這裡只介紹我用過的:P 首先要使用GoogleMap要先取得Google的金鑰 建立一個以GoogleMap為主的專案時在res/values/下面會找到一個google_maps_api.xml檔案 打開來會看到一堆註解 找到這一行網址   https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=XXXXXXXX 經過一番波折後弄到金鑰了 回到manifesst.xml中 一方面先確認定位時需要的權限有沒有開啟了 再來加入這一行 最後再回到google_maps_api.xml中把金鑰打在裡面,就能使用GoogleMap啦~ //金鑰打這裡 再來就進到程式的部分了 這是一個基本款的GoogleMap的Activity public class myMap extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mymap ); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = go...

使用SQLite

圖片
SQLite是Android內建的一個小型資料庫 首先我們需要一個 SQLiteOpenHelper 來幫我們架設好基本的資料庫的架構 public class MySQLiteHelper extends SQLiteOpenHelper { private static int version = 1; final private static String DBname = "MyTest.db"; public MySQLiteHelper(Context context) { super(context, DBname, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "CREATE TABLE IF NOT EXISTS " + "info" + " (" + " name TEXT NOT NULL, " + " local DOUBLE , " + " id INTEGER NOT NULL ," + " PRIMARY KEY (id)" + ")" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 這是一個基本的SQLiteOpenHelper的樣子 他會有一個private static int version = 1; 跟final private s...

網路連線(HttpURLConnection)

在進入MainActivity之前 先確認manifest.xml檔中,是否有開啟網路權限 < uses-permission android :name= "android.permission.INTERNET" /> ------------------------------------------------------------------------------ 為了避免網路連線產生的APP問題 所以連線的功能全部都要在Thread中執行 所以要先弄個簡單的Thread框架(如果要自訂的話 可以用inner class自己設定一個Thread) Thread T = new Thread(new Runnable() { @Override public void run() { } }); ------------------------------接著就是主菜了------------------------------- 首先是初始化 把你要連線的網址用URL傳進HttpURLConnection裡 HttpURLConnection hc = null; URL url = new URL("網址"); hc = (HttpURLConnection) url.openConnection(); 再來是設定用POST來傳值 先將瀏覽器的版本設定好 再來是要把setUseCaches關閉 把輸入/輸出的功能打開 hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36"); hc.setUseCaches(false); hc.setRequestMethod("POST"); hc.setDoInput(true); hc.setDoOutput(true); 使用BufferedWri...