標籤:des android class blog c code
在Android開發中我們經常要遇到的一個問題就是資料在不同的Activity之間的共用。在Android開發中有很多種方法可以達到這個目地。
這裡介紹一種比較常見、又常用的一種方法就是使用剪下板。我們都有用過Window、Linux上的Copy。這裡介紹的就是這種。
調用服務
[java] view plaincopy
- ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
這裡需要注意的是,在android版本11之前,利用剪下板傳遞資料是使用setText和getText方法,但在版本11以後,這兩個 getText和set方法就被丟棄了,轉而代替的是需要用到ClipData對象來傳遞資料。相比於getText和setText方法,利用 ClipData對象來傳遞資料,更符合物件導向的編程思維,且所能傳遞資料的類型也更多。關於ClipData對象的說明,請參閱ClipData對象說明。
這裡介紹的是利用ClipData傳遞字串
1.將值寫入剪下板
[java] view plaincopy
- ClipData cd = ClipData.newPlainText("label", baseToString);
- clipboardManager.setPrimaryClip(cd);
2.讀取剪下板的值
[java] view plaincopy
- if(cm.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
- {
- ClipData cd = cm.getPrimaryClip();
- Item item = cd.getItemAt(0);
- txtView.setTextitem.getText().toString());
- }
這樣就可以利用剪下板來傳遞資料了。
這裡需要說明的是在實際編程中,如真需要利用剪下板來傳值,需要在調用服務之前來判斷android系統的版本。
[java] view plaincopy
- Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB
如需要利用自訂對象來傳值。則在利用剪下板時,須對對象進行轉換。這裡我們需要用到base64這個工具類。關於此類的用法,請參閱Base64類。
1.讀取自訂對象,並將其轉換為字串,寫入剪下板
[java] view plaincopy
- //自訂一個對象
- MyData md = new MyData("kimifdw",26);
- //定義字串
- String baseToString ="";
- //1.將對象轉換成字串
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- try
- {
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
- objectOutputStream.writeObject(md);
- baseToString = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
- objectOutputStream.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
2.讀取剪下板的字串,並將其轉換為對象
[java] view plaincopy
- //將base64轉換成toString
- byte[] base64ToString = Base64.decode(item.getText().toString(), Base64.DEFAULT);
- //從流中讀取資料
- ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64ToString);
- try
- {
- ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
- MyData md = (MyData)objectInputStream.readObject();
- objectInputStream.close();
- txtView.setText(md.toString());
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
這裡,主要用到了IO中一些流的操作。需要注意的是,無論是讀取流還是寫入流,在使用完之後,都必須關閉