閱讀972 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 小項目之--數據存儲【Network】(附源碼)

https://www.cnblogs.com/TerryBlog/archive/2010/06/20/1761411.html

將數據保存發送到電子郵件中備份,首要前提應該先在模擬器中設置好電子郵件帳戶,設置如下:

  • 第一步,啟動模擬器,打開“菜單”,選擇“電子郵件”項,填寫相應帳號和密碼。
  • 第二步,點擊NEXT,程序自動配置電子郵件相關信息。
  • 第三步,配置完成後,輸入相應的名稱信息,即可設置完成,接下來程序會默認幫你導入你輸入郵箱帳號的相關信息

業務邏輯如下:示例中有一個文本框用來模擬用戶的信息,當程序退出的時候保存文本檔的信息,並轉到發送郵件的頁麵,讓用戶把信息保存到郵箱 裏麵。具體代碼參考如下:

package com.terry;

import android.app.Activity; 
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; 
import android.view.KeyEvent;
import android.widget.EditText;

public class networkActivity extends Activity { 
    private EditText myEditText;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
        
        myEditText=(EditText)findViewById(R.id.myEditText4); 
        
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            //發送郵件地址
            Uri uri=Uri.parse("mailto:285735942@qq.com");
            //創建intent
            Intent it=new Intent(Intent.ACTION_SENDTO,uri);
            it.putExtra(android.content.Intent.EXTRA_SUBJECT, "網絡存儲");
            it.putExtra(android.content.Intent.EXTRA_TEXT, myEditText.getText());
            startActivity(it);
            this.finish();
            return true;
        }
        
        return super.onKeyDown(keyCode, event);
    }
}

擴展

既然發送數據保存到網絡上,當然也可以獲得網絡上的數據,下麵我們通過一個小例子來實現從網路上加載一個txt文件的小說程序 。如圖:

邏輯代碼如下:首先創建一個我們要訪問的URL地址,然後取鏈接的文件,循環把數據讀取出來。具體代碼參考如下:

package com.terry;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class readxmlActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.readxml);
        
        TextView tv=(TextView)findViewById(R.id.TextView01);
        
        String msg="";
        try {
            URL url=new URL("https://www.az1314.com/txt/00.txt"); //要訪問的數據文件
            URLConnection con=url.openConnection();
            InputStream is=con.getInputStream();
            BufferedInputStream bis=new BufferedInputStream(is);
            ByteArrayBuffer baf=new ByteArrayBuffer(100);
            int current=0;
            while ((current=bis.read())!= -1) {
                 baf.append((byte)current);
            }
            msg=new String(baf.toByteArray());
            
        } catch (Exception e) {
            // TODO: handle exception
            msg=e.getMessage();
        }
        tv.setText(msg);
    }
}

方法講解:

URL共有六種構造方法,分別如下:

  • URL(String spec)
    通過傳進來的字符串分析,創建一個新的URL實例。
  • URL(URL context, String spec)
    通過傳進來的字符串分析,創建一個新的URL實例。需要一個URL的參數
  • URL(URL context, String spec, URLStreamHandler handler)
    通過傳進來的字符串分析,創建一個新的URL實例
  • URL(String protocol, String host, String file)
    使用給定的參數創建一個URL實例,需要指定協議,主機文件名
  • URL(String protocol, String host, int port, String file)
    使用給定的參數創建一個URL實例,需要指定協議,主機,端口和文件名
  • URL(String protocol, String host, int port, String file, URLStreamHandler handler)
    使用給定的參數創建一個URL實例,需要指定協議,主機,端口、文件名和處理程序

URLConnection介紹:

  • 用以來實現提供一個具有特定協議類的連接源。
  • getInputStream 主要用來讀取一個URLConnection的資源數據,返回一個InputStream,本文將使用這個方法獲取數據

在此不多介紹URLConnection此類,感興趣的朋友可以查看一下SDK。代碼如上,運行效果圖:

因為在模擬器運行。 出現亂碼了,如果你有真機不妨在真機上試試。

Tip: 訪問外部網絡需要在配置文件中給予權限,如果你沒有權限將會出現如下界麵:


配置文件中給予權限:

<uses-permission android:name="android.permission.INTERNET"/>


最後更新:2017-04-02 17:51:23

  上一篇:go Android中資源文件assets和res下麵raw文件的使用不同點
  下一篇:go Android-ListView中嵌套(ListView)控件時的問題