android利用剪下板來實現資料的傳遞

來源:互聯網
上載者:User

標籤:des   android   class   blog   c   code   

在Android開發中我們經常要遇到的一個問題就是資料在不同的Activity之間的共用。在Android開發中有很多種方法可以達到這個目地。

這裡介紹一種比較常見、又常用的一種方法就是使用剪下板。我們都有用過Window、Linux上的Copy。這裡介紹的就是這種。

調用服務

[java] view plaincopy
  1. 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
  1. ClipData cd = ClipData.newPlainText("label", baseToString);  
  2. clipboardManager.setPrimaryClip(cd);  

2.讀取剪下板的值

[java] view plaincopy
  1. if(cm.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))  
  2. {  
  3.     ClipData cd = cm.getPrimaryClip();  
  4.     Item item = cd.getItemAt(0);  
  5.         txtView.setTextitem.getText().toString());  
  6. }  

這樣就可以利用剪下板來傳遞資料了。
這裡需要說明的是在實際編程中,如真需要利用剪下板來傳值,需要在調用服務之前來判斷android系統的版本。

[java] view plaincopy
  1. Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB  

如需要利用自訂對象來傳值。則在利用剪下板時,須對對象進行轉換。這裡我們需要用到base64這個工具類。關於此類的用法,請參閱Base64類。

1.讀取自訂對象,並將其轉換為字串,寫入剪下板

[java] view plaincopy
  1. //自訂一個對象  
  2. MyData md = new MyData("kimifdw",26);  
  3. //定義字串  
  4. String baseToString ="";  
  5. //1.將對象轉換成字串  
  6. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
  7. try  
  8. {  
  9.     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);  
  10.     objectOutputStream.writeObject(md);  
  11.     baseToString = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);  
  12.     objectOutputStream.close();  
  13. }  
  14. catch(Exception e)  
  15. {  
  16.     e.printStackTrace();  
  17. }  

2.讀取剪下板的字串,並將其轉換為對象

[java] view plaincopy
  1. //將base64轉換成toString  
  2. byte[] base64ToString = Base64.decode(item.getText().toString(), Base64.DEFAULT);  
  3. //從流中讀取資料  
  4. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64ToString);  
  5. try  
  6. {  
  7.       ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);  
  8.       MyData md = (MyData)objectInputStream.readObject();  
  9.      objectInputStream.close();  
  10.       txtView.setText(md.toString());  
  11. }  
  12. catch(Exception e)  
  13. {  
  14.       e.printStackTrace();  
  15. }  

 這裡,主要用到了IO中一些流的操作。需要注意的是,無論是讀取流還是寫入流,在使用完之後,都必須關閉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.