2012年2月11日 星期六

【DWR】集合物件與JavaBean


最後的範例綜合前面的所介紹的,底下程式提供一個遠端服務,

能夠取得所有書籍(BookBean),並放到Java的List集合內以回傳給前端網頁的Javascript

先來看一下BookBean.java的內容

package org.bean;

/**
 * @author allen
 *
 */
public class BookBean 
{
 private String title;
 private int price;
 
 public BookBean(){}

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public int getPrice() {
  return price;
 }

 public void setPrice(int price) {
  this.price = price;
 }
}

2012年2月9日 星期四

【DWR】陣列運用

如果我們需要透過DWR呼叫遠端還取得多筆的資料

可以用以下範例在網頁中有一個select-option的下拉式選單

當網頁在載入的過程中透過DWR呼叫遠端服務,並回傳一個字串陣列

取得四個季節的選項並加入到下拉式選單中。

首先,先提供一個遠端的服務SeasonService.java 

package org.service;
/**
 * @author allen
 *
 */
public class SeasonService
{
 public String[] getSeason(){
  return new String[]{"春","夏","秋","冬"};
 }
}

2012年2月5日 星期日

【Android】android java.net.ConnectException: localhost/127.0.0.1 - Connection refused

延續前一篇,在環境中我弄了一個簡單的 Java Web project

以實現檔案上傳的動作,但是在 Android 的應用程式中卻發生這樣的錯誤

原因是因為 Tomcat 上已經有我寫好的web 程式

URL路徑類似 http://localhost:8080/Android_Demo/UploadServlet.do

但是 Android 一旦判別到 localhost 或是 127.0.0.1時,他會把這段路徑當作是自己(也就是模擬器)

所以如果要在模擬器上訪問你的電腦的路徑,記得用10.0.2.2吧。


2012年2月4日 星期六

【Android】android.os.NetworkOnMainThreadException

今天在寫Android 程式模擬檔案上傳到遠端的時候遇到的問題

以下是程式片段:

HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
//...
OutputStream os = conn.getOutputStream();  //拋出例外

在Android的應用程式中,如果要訪問遠端的資源,必須在/AndroidManifest.xml

加入以下這行標籤:

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

如果已經加上去之後還是有例外,可以嘗試在 Activity 中的 onCreate(Bundle) 中

加入以下的片段程式:


StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()    
             .detectDiskReads()    
             .detectDiskWrites()    
             .detectNetwork() 
             .penaltyLog()    
             .build());    
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()    
             .detectLeakedSqlLiteObjects()    
             .detectLeakedClosableObjects()    
             .penaltyLog()    
             .penaltyDeath()    
             .build());


或許可以幫助你解決問題

2012年2月3日 星期五

【Android】java.io.filenotfoundexception permission denied

當程式需要存取SD卡的時候,遇到類似如下問題:

java.io.FileNotFoundException: /mnt/sdcard/test.txt (Permission denied) 
at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 
at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 

或是:

(No such file or directory) 之類的

那麼先檢查一下 /AndroidManifest.xml 有沒有加入以下兩行


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


如果加了還是有問題,那注意一下你的虛擬機一開始配置的時候有沒有給SD卡足夠的空間

在 Eclipse 中的上方功能列 > Window > AVD manager > 選擇你的虛擬機 > 按下Edit >

配置你的SD卡一些空間 > Edit AVD > 完成

在這分享一下。

2012年2月2日 星期四

【Android】Widget 介紹


Button
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/app_add"
     />

介紹一些可能常用的屬性:
android:enabled=”[true|false]” 表示按鈕是否有效(能不能按)
android:onClick="[Your method name]" 表示按鈕按下後的觸發事件

在之前的程式裡,我們要處理Button的時候都是在Activity建立一個OnClickListener 並實作 onClick(View) 方法來解決按鈕按下後要做的事情
例如:

button.setOnClickListener(new OnClickListener(){
              public void onClick(View view) {
                  // TODO Auto-generated method stub
                  // Your code           }
        });


這樣有時候當程式碼多的時候是蠻不好看也不好維護的,

所以可以直接在layout下設定Buttonandroid:onClick屬性,

2012年2月1日 星期三

【Android】Activity 間的資料傳遞


接下來要來說明一下在Activity之間切換時,該如何傳遞資料?

主要是需要透過Bundle物件來達成,先來看以上範例中如何在FirstActivity傳到SecondActivity

以下來看一下傳過去的程式實做:

傳送:
Bundle bundle = new Bundle();
bundle.putInt("id", id);
bundle.putString("name", account);
intent.putExtras(bundle);
startActivity(intent);


接收:
Bundle bundle = getIntent().getExtras();
bundle.getInt("id");
bundle.getString("name");



其實Intent也內建了Bundle物件,因此你也可以如下這樣寫

傳送: