2013年1月23日 星期三

Java 使用JDBC存取MySQL


Java 存取資料庫是很常見的一種應用,紀錄一下Java存取 MySQL範例說明 ,這裏使用Connector/J來連接MySQL,所以要先下載Connector/J(http://www.mysql.com/downloads/connector/j/),下載完成後解壓縮,可以得要一個mysql-connector-java-5.1.17-bin.jar就是MySQL的JDBC-Driver了, 接著在Eclipse建立一個Java Project,簡易步驟如下:

2013年1月20日 星期日

[Android]取得相機照片後儲存方法

在開發Android相機應用時,處理照片檔案是必經的過程,首先要面對的相片儲存的位置,依應用程式的需求,可將照片儲存至外部的SDCard裡,或是內部的記憶體(內存)中,這兩種儲存位置的做法不太相同,分別介紹兩種方法。

儲存至內部記憶體(內存):

以下程式碼是將照片以.JPG檔的形式儲存至內部記憶體中

PictureCallback camJpegCallback = new PictureCallback() {
  public void onPictureTaken(byte[] data, Camera camera) {
  // 用來接收壓縮成jpeg格式的影像資料
  
  FileOutputStream outStream = null;
  try {
   //儲存在內部記憶體
   Bitmap bm =BitmapFactory.decodeByteArray(data, 0, data.length);
   outStream = openFileOutput("photo.jpg", Context.MODE_PRIVATE);
   bm.compress(CompressFormat.JPEG, 80, outStream);
   outStream.flush();
   outStream.close();
   Toast.makeText(PKActivity.this, "存檔完成!", Toast.LENGTH_SHORT)
   .show();
   Intent intent=new Intent();
   intent.setClass(PKActivity.this, PK_ResultActivity.class);
   startActivity(intent);
   PKActivity.this.finish(); 
  
  
  } catch (IOException e) {
   Toast.makeText(PKActivity.this, "影像檔儲存錯誤!", Toast.LENGTH_SHORT)
   .show();
  }


程式說明:


Bitmap bm =BitmapFactory.decodeByteArray(data, 0, data.length);

將char[] 轉換成Bitmap 的形式。


FileOutputStream outStream = openFileOutput("FileName",MODE_WORLD_READABLE);


使用openFileOutput來建立FileOutputStream 。
FileName只要檔名即可,不用完整路徑。
Context.MODE_PRIVATE:代表該檔是私有資料,只能被APP本身存取。如果檔案已存在,會覆蓋原檔。 Context.MODE_APPEND:會檢查檔案是否存在,檔案存在會將內容新增檔案內;如檔案不存在就建立新檔。 Context.MODE_WORLD_READABLE:其它應用程式也可以讀取。如果要在APP中使用 intent.ACTION_SEND,要使用此模式。
Context.MODE_WORLD_WRITEABLE:其它應用程式也可以寫入此檔。 Context.MODE_PRIVATE:代表該檔是私有資料,只能被APP本身存取。如果檔案已存在,會覆蓋原檔。
Context.MODE_APPEND:會檢查檔案是否存在,檔案存在會將內容新增檔案內;如檔案不存在就建立新檔。 Context.MODE_WORLD_READABLE:其它應用程式也可以讀取。如果要在APP中使用 intent.ACTION_SEND,要使用此模式。
Context.MODE_WORLD_WRITEABLE:其它應用程式也可以寫入此檔。
Context.MODE_APPEND:會檢查檔案是否存在,檔案存在會將內容新增檔案內;如檔案不存在就建立新檔。 Context.MODE_WORLD_READABLE:其它應用程式也可以讀取。如果要在APP中使用 intent.ACTION_SEND,要使用此模式。
Context.MODE_WORLD_WRITEABLE:其它應用程式也可以寫入此檔。 Context.MODE_WORLD_READABLE:其它應用程式也可以讀取。如果要在APP中使用 intent.ACTION_SEND,要使用此模式。
Context.MODE_WORLD_WRITEABLE:其它應用程式也可以寫入此檔。 Context.MODE_WORLD_WRITEABLE:其它應用程式也可以寫入此檔。

bm.compress(CompressFormat.JPEG, 80, outStream);


將Bitnap以80%的壓縮存成JPG檔,用FileOutputStream 方式存入。


儲存至SD卡


PictureCallback camJpegCallback = new PictureCallback() {
  public void onPictureTaken(byte[] data, Camera camera) {
  // 用來接收壓縮成jpeg格式的影像資料
  FileOutputStream outStream = null;
  try {
   //儲存在外部SD
   outStream = new FileOutputStream("/sdcard/photo.jpg");
   outStream.write(data);
   outStream.close();
   Toast.makeText(PKActivity.this, "存檔完成!", Toast.LENGTH_SHORT)
   .show();
   Intent intent=new Intent();
   intent.setClass(PKActivity.this, PK_ResultActivity.class);
   startActivity(intent);
   PKActivity.this.finish(); 
  
  
  } catch (IOException e) {
   Toast.makeText(PKActivity.this, "影像檔儲存錯誤!", Toast.LENGTH_SHORT)
   .show();
  }

2013年1月17日 星期四

使用AXIS2建立WebService Client

 Axis2 是一個WebService的核心支援引擎。 AXIS2對舊有的AXIS重新設計及重寫,並提供兩種語言Java 及 C 的開發版本,這裡介紹使用Eclipse配合AXIS2建立WebService Client專案 。

2013年1月16日 星期三

AXIS2 WebService Client存取Server憑證過期解決方法

當Server端的憑證過期,無法直接用Eclipse直接連接https的URL時,可利用瀏覽器將.wsdl檔下載至Local端,再將檔案匯入Eclipse中,使用axis2建立一個WebServiceClient的project,詳細建立步驟

由於Server憑証過期,Client端要存取Server時會造成錯誤,在axis2中可加入以下程式碼,忽略憑証過期的警告。程式碼如下:

public static void trustAllSSL() {
   TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
                public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
                public X509Certificate[] getAcceptedIssuers() { return null; }
            }
    };
    HostnameVerifier hostVerify = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(hostVerify);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在Client初始化前執行 trustAllSSL(),就可正常存取WebService了。