編輯:關於Android編程
在廈門做Android開發也有兩個月了,快情人節了,我還在弄代碼。在微信平台上開發自己的APP,用到了數據存儲的知識,現在總結一下:
總體的來講,數據存儲方式有三種:一個是文件,一個是數據庫,另一個則是網絡。其中文件和數據庫可能用的稍多一些,文件用起來較為方便,程序可以自己定義格式;數據庫用起稍煩鎖一些,但它有它的優點,比如在海量數據時性能優越,有查詢功能,可以加密,可以加鎖,可以跨應用,跨平台等等;網絡,則用於比較重要的事情,比如科研,勘探,航空等實時采集到的數據需要馬上通過網絡傳輸到數據處理中心進行存儲並進行處理。
對於Android平台來講,它的存儲方式也不外乎這幾種,按方式總體來分,也是文件,數據庫和網絡。但從開發者的角度來講它可以分為以下五種方式:
1.SharedPreferences共享偏好
2.Internal Storage內部存儲空間
3.External Storage外部存儲空間
4.SQLite Database數據庫
5.Internet網絡
這幾種方式各自有各自的優點和缺點,要根據不同的實際情況來選擇,而無法給出統一的標准。下面就各種方式談談它們的優缺點,以及最合適的使用情況:
下面根據自己在開發中,分別做一下測試,先做一下簡單的APP,幫組自己理解Android的數據存儲:
(一)文件
其實這個APP 也是在網上下載的,效果如圖:
實現的功能:將網絡上的一張圖片下載到自己的收集裡面。
現在就貼一下代碼吧:1.MainActivity.java
package com.test.learning;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements Runnable {
private EditText urlText;
private Button button;
private Handler handler; // 聲明一個Handler對象
private boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText = (EditText) findViewById(R.id.editText_url);
button = (Button) findViewById(R.id.button_go);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread t = new Thread(CopyOfMainActivity.this);
t.start(); // 開啟線程
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (flag) {
Toast.makeText(CopyOfMainActivity.this, 文件下載完成!,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(CopyOfMainActivity.this, 文件下載失敗!,
Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
};
}
});
}
@Override
public void run() {
try {
String sourceUrl = urlText.getText().toString();
URL url = new URL(sourceUrl);
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
InputStream is = urlConn.getInputStream(); // 獲取輸入流對象
if (is != null) {
String expandName = sourceUrl.substring(
sourceUrl.lastIndexOf(.) + 1, sourceUrl.length())
.toLowerCase();
String fileName = sourceUrl.substring(
sourceUrl.lastIndexOf(/) + 1,
sourceUrl.lastIndexOf(.));
File file = new File(/sdcard/pictures/ + fileName + .
+ expandName);
FileOutputStream fos = new FileOutputStream(file);
byte buf[] = new byte[128];
while (true) {
int numread = is.read(buf);
if (numread <= 0) {
break;
} else {
fos.write(buf, 0, numread);
}
}
}
is.close(); // 關閉輸入流對象
urlConn.disconnect();
flag = true;
} catch (MalformedURLException e) {
e.printStackTrace();
flag = false;
} catch (IOException e) {
e.printStackTrace();
flag = false;
}
Message m = handler.obtainMessage(); // 獲取一個Message
handler.sendMessage(m); // 發送消息
}
}
2.main.xml代碼
android:background=@drawable/background
android:layout_width=fill_parent
android:layout_height=fill_parent>
android:id=@+id/editText_url
android:layout_height=wrap_content
android:layout_width=0dp
android:text=@string/defaultvalue
android:lines=1 />
IntentService一、IntentService概述??上一篇我們聊到了HandlerThread,本篇我們就來看看HandlerThread在IntentSer
Volley是Google I/O 2013推出的網絡通信庫,在volley推出之前我們一般會選擇比較成熟的第三方網絡通信庫,如:android-async-httpre
前言Promoted Actions是指一種操作按鈕,它不是放在actionbar中,而是直接在可見的UI布局中(當然這裡的UI指的是setContentView所管轄的
在項目開發中,我們經常需要進行動態添加組件,其中可添加的部分有兩項:布局和組件 其中,添加的布局主要有RelativeLayout型(相對布局)的和Linear