編輯:Android開發實例
最近那個茫然啊,工作不如意,感情不如意,感覺事事不順,在android上又荒廢了些時日。最近因為想做一個APK,主要涉及到網絡方面的應用,所以也開始學習之前沒怎麼涉及到的模塊。
今天實現要實現的其實很簡單,通過網絡獲取服務端一個文件(可以是txt、png、mp3等等),因為之前是做c#開發的,所以操起老本行,模擬一個服務器,通過url去獲取服務器的一個資源,就這麼簡單,所以大家千萬千萬不要被嚇著,沒有什麼post請求、沒有什麼get請求,也就是說沒有驗證直接獲取,所有這些post、get通通不涉及。
Android中實現網絡連接提供了三種接口以供我們使用:
1、標准java.net.*接口
2、org.Apache.*接口
3、android.net.*接口
我的示例就是使用第一種接口來實現,來實現從服務器下載一個txt文檔,我們要實現這個功能要通過幾個步驟實現
1、在sdcard中創建一個文件,將網絡流保存為txt的最終文本文件
2、實現網絡連接,獲取網絡流,保存到sdcard中的txt文件中
3、新建線程下載服務器txt文檔
4、模擬一個web服務器(C#)
第一步工作實現過程:首先驗證sdcard狀態(是否載入並且是否可以讀寫),其次獲得(新建)文件目錄和新建txt文件,最後初始化一個FileOutputStream對象,他就是實現從數據流到文件的關鍵紐帶,還有sdcard操作權限。
參考:http://tdq222.javaeye.com/blog/701962 代碼:
File dir=null;
File file=null;
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Log.v("tag", "---------create file");
//獲得sdcard目錄
dir=Environment.getExternalStorageDirectory();
//在指定目錄新建文件
file=new File(dir, "test.txt");
}
FileOutputStream fos=null;
try {
fos=new FileOutputStream(file);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
<!-- 在SDCard中創建與刪除文件權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步工作內容實現過程:首先創建Url連接對象,其次配置連接屬性(是否可以讀取,連接超時、讀取超時),最後打開連接獲取數據流保存到文件,還有網絡連接權限。參考:http://java-cofi.javaeye.com/blog/734185 代碼:
//緩存
byte[] bf=new byte[8192];
int current=0;
try {
//創建一個URL對象
URL url=new URL(spec);//spec:資源連接地址
HttpURLConnection connect=(HttpURLConnection)url.openConnection();
//從服務端下載Http資源,設置讀取權限
connect.setDoInput(true);
// //上傳資源到服務端,設置寫入權限
// connect.setDoOutput(true);
//設置連接服務器超時時間
connect.setConnectTimeout(5*1000);
//設置從服務器讀取數據超時時間
connect.setReadTimeout(30*1000);
//獲得網絡連接狀態碼
int code=connect.getResponseCode();
//判斷是否連接成功(HttpURLConnection.HTTP_OK==200,0-200都屬正常)
if(code==HttpURLConnection.HTTP_OK){
// //打開連接獲取資源(不寫也沒關系,調用getInputStream()默認會打開連接 // connect.connect();
InputStream is=connect.getInputStream();
BufferedInputStream bis=new BufferedInputStream(is);
while((current=bis.read(bf))!=-1){
fos.write(bf, 0, current);
}
bis.close();
fos.close();
//斷開連接
connect.disconnect();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<!-- 在SDCard中創建與刪除文件權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第三步主要是為了不使下載資源時造成主UI堵塞
private Handler handler=new Handler(){
public void handleMessage(Message msg){
//提示用戶下載完成
if(msg.what==1){
Toast.makeText(Main.this, "down succes", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(Main.this, "down fail", Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
};
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("tag", "------------onclick");
//開啟下載線程
Thread thread=new Thread(new downThread());
thread.start();
}
class downThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
//下載資源
download();
Message msg=new Message();
msg.what=1;
handler.sendMessage(msg);
}
}
第四步就簡單了,新建一個網站提供一個鏈接就ok了例如:http://localhost:7643/WebSite1/data/test.txt,但是有一點要注意,將
localhost換成10.0.2.2,這就是本機的意思吧(未確認),至此從服務器獲取資源就實現了,打開DDMS中sdcard,把test.txt取出來,打開如圖:
程序員很多,遍地都是,高手也很多,但是懂設計的程序員並不多,我覺得我們不僅要成為一個coder還要成為一個designer。 我是一個比較注重ued的人,如果對一
工作中有做過手機App項目,前端和android或ios程序員配合完成整個項目的開發,開發過程中與ios程序配合基本沒什麼問題,而android各種機子和rom的
不知道大家是否用過天天動聽,對於它界面上的半透明Menu效果,筆者感覺非常漂亮
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個