2015年5月4日 星期一

[Android] 判斷否有SD卡

1
2
3
4
5
6
7
8
9
10
11
12
13
// 判斷否有SD卡
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
 output = new FileOutputStream("/sdcard/output.txt");
}else{
 output = new FileOutputStream("/data/data/output.txt");
}
String bt = "輸入訊息";
try {
 // 轉byte
 output.write(bt.getBytes());
} catch (IOException e) {
 e.printStackTrace();
}



1
2
3
4
  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



參考網站:
http://blog.csdn.net/xinzheng_wang/article/details/7827775

2015年4月29日 星期三

[Android] 倒數計時功能

第一個參數是總共計時幾秒,以0.001為單位,因此要讓它倒數5秒就要乘上5*1000,
第二個參數是每隔幾秒跳一次,一樣以0.001為單位,因此每隔一秒跳一次就是傳入1000。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
new CountDownTimer(5000, 1000) {

 @Override

 public void onTick(long millisUntilFinished) {
                //倒數秒數中要做的事
  textView.setText("倒數時間:" + new SimpleDateFormat("s").format(millisUntilFinished));
 }

 @Override
 public void onFinish() {
                 //倒數完成後要做的事
 }
}.start();
參考網站:
http://givemepass.blogspot.tw/2011/12/blog-post_08.html

2015年4月10日 星期五

[Android] SQLite

  一般在撰寫SQL的時候會把 Main 與 SQLite 分開
會先把SQLite給編寫好  好讓  撰寫Main的時候可以直接呼叫使用
需要繼承extends SQLiteOpenHelper

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class QRcodeDB extends SQLiteOpenHelper {

//資料庫版本關係到App更新時,資料庫是否要調用onUpgrade()
private static final String DB_NAME = "qrcode_db";
public static final String CONTACTS_COLUMN_IMEI = "IMEI";

public QRcodeDB(Context context) {
               //修改後
              //super(context, name, factory, version);
super(context, DB_NAME, null, 1);

// TODO Auto-generated constructor stub
}

 
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
try{
db.execSQL(
"create table contacts"
+ " (ITEM Integer PRIMARY KEY AUTOINCREMENT,"
+ " IMEI TEXT,"
+ " WIFIMAC TEXT,"
+ " RESULT TEXT,"
+ " PRODUCT TEXT,"
+ " APPVERSION TEXT)");
}catch(Exception e){
db.execSQL("DROP TABLE IF EXISTS contacts");
}
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
                //可有可無一般在更新的時候才會驅動,所以若是把他寫在onCreate的catch會更好
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}

public boolean insertContact(String IMEI, String WIFIMAC, String RESULT, String PRODUCT, String APPVERSION){
//新增資料
SQLiteDatabase db = this.getWritableDatabase();
                //通常都要搭配 ContentValues作使用
ContentValues contentValues = new ContentValues();
contentValues.put("IMEI", IMEI);
contentValues.put("WIFIMAC", WIFIMAC);
contentValues.put("RESULT", RESULT);
contentValues.put("PRODUCT", PRODUCT);
contentValues.put("APPVERSION", APPVERSION);

db.insert("contacts", null, contentValues);
db.close();
return true;
}

public Cursor getData(String IMEI) {
SQLiteDatabase db = this.getReadableDatabase();
                                          //(搜尋語法,條件,搜尋參數)
                                          //("contacts", "IMEI = ? ", new String[] { Integer.toString(IMEI) });
                                          //兩個都可以
Cursor res = db.rawQuery("select * from contacts where IMEI=" + IMEI + "", null);
return res;
}

public int numberOfRows() {
SQLiteDatabase db = this.getReadableDatabase();
int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
db.close();
return numRows;
}

public boolean updateContact(String IMEI, String WIFIMAC, String RESULT, String PRODUCT, String APPVERSION){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("IMEI", IMEI);
contentValues.put("WIFIMAC", WIFIMAC);
contentValues.put("RESULT", RESULT);
contentValues.put("PRODUCT", PRODUCT);
contentValues.put("APPVERSION", APPVERSION);
db.update("contacts", contentValues, "IMEI = ? ", new String[] { IMEI });
return true;
}

          //刪除
public Integer deleteContact (String IMEI) {
     SQLiteDatabase db = this.getWritableDatabase();
     Integer dbDelete = db.delete("contacts", "IMEI = '" + IMEI + "'" , null);
     return dbDelete;
}

public ArrayList getAllCotacts() {
ArrayList array_list = new ArrayList();
// hp = new HashMap();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from contacts", null);
res.moveToFirst();
while (res.isAfterLast() == false) {
array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_IMEI)));
res.moveToNext();
}
return array_list;
}

}



參考網站:http://www.tutorialspoint.com/android/android_sqlite_database.htm

2015年3月26日 星期四

[Android] 強制更新Ui畫面

Activity.runOnUiThread




1
2
3
4
5
6
7
Activity().runOnUiThread(new Runnable() {
    public void run()
    {
        //要讓 UI Therad 執行的動作
        txt.setText("我改變囉!");
    }
});





參考資料:
http://www.allenj.net/archives/2711

[Android] Java 千位分隔符

DecimalFormat decimalFormat=new DecimalFormat("#.00");
decimalFormat.format(a);

注:可使用"#.##";但是这样如果a=123.2,格式化后仍为123.2,"#.00"则会显示为123.20
此方法返回的是字符串,格式化其他数字用法大致相同。

千位分隔符(",###")
百分比("#%")
千分比("#\u2030")
货币符号("\u00A4#")
科学计数法指数("0.###E0")


參考網址:
http://blog.csdn.net/wintersweetsugar/article/details/18762937

2015年3月19日 星期四

[Android] 包裝Json

JSONObject json = new JSONObject();
String imei = "123546563423624";
String wifimac= "0071e2ea9f63";
String result= "ffff";
String product= "stone72_wet_130_jb3:4.2.2";
String appversion= "1.222";
try {

json.put("imei", imei);
json.put("wifimac", wifimac);
json.put("result", result);
json.put("product", product);
json.put("appversion", appversion);

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("jsonjsonjson..." + json.toString());