2013年4月21日 星期日

android facebook api

此處將我使用過的 facebook android api 記錄下來,持續增加中

1. 取得 facebook 朋友清單
//取得朋友清單需要的權限 read_friendlists


public void GetFriendsList(){
//取得朋友清單方法
try {
//facebook.request("me/Friends") 取回來的資料是 json 格式,直接轉 json 比較方便
//要用字串也行,使用方式為 String data = facebook.request("me/Friends");
//只是直接用字串的話就是一整堆資料,要切
JSONObject json = new JSONObject(facebook.request("me/Friends"));
//取回來的資料是包在 data 裡,所以將 data 裡的資料放進 array 裡面
JSONArray array = json.getJSONArray("data");

if(array != null){
for(int i=0;i<array.length();i++){
String id = array.getJSONObject(i).getString("id");
String name = array.getJSONObject(i).getString("name");
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


2. 將訊息自動發佈到塗鴉牆上


//發佈到塗鴉牆上需要的權限 publish_stream



public void postToWall() {
    //此處是會自動發佈至塗鴉牆的寫法
    //另外還有一種寫法是會跳出一訊息框讓使用者自行填寫要發布的消息
   Bundle params = new Bundle();

   params.putString("message", "此處為發佈至塗鴉牆上的訊息" );
   try {
facebook.request("/me/feed", params, "POST");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}




2012年12月25日 星期二

Android WebView 使用紀錄

之前在玩 PhoneGap 的時候,就有想過能不能在 javascript 裡面就直接調用 Android Java 的 class,答案是可以的,Android 的官方文件的 WebView 教學,就有教怎麼去使用,下面稍微做個範例


1. 在要執行的頁面 (XXX.XML) 檔裡放入一個 WebView 如下

<WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />


2. 進入 AndroidManifest.xml 檔裡開啟權限

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


3. 在執行的 java 檔裡 (src/your_package/你要執行的 java 檔案 ex. MainActivity.java) 寫入下列程式碼

//先把在頁面中呈現的 WebView 註冊,接著就能用 webview 執行底下的方法
WebView webview= (WebView) findViewById(R.id.webView);

//設定一個 Javascript 的 Interface,前面是指這邊這個物件,後面是要註冊的名稱,這邊先將它取名為 test
webview.addJavascriptInterface(this, "test");

//接著將 JavaScript 的設定開起來
webview.getSettings().setJavaScriptEnabled(true);

//指向設定預定呈現的頁面,此處我是將檔案放在 assets/www/ 底下,www 資料夾為自行創建
webview.loadUrl("file:///android_asset/www/index.html");

//在 onCreate() 外面創建一個 function,也是在同一支程式檔裡,上面 addJavascriptInterface this 就代表指向的檔案

public void javascripCall(){
log.d("javascrip_call","test");
}



4. 在 index.html 裡,可直接執行 javascript 程式碼,也可使用 <script type="text/javascript" src="js/xxx.js"></script> 檔案引入的方式,都是可行的

而在 index,html 裡的 javascript 碼,只要照著剛剛設定的名稱進行呼叫,就可以直接調用 Java 的 function

<script type="text/javascript">

callAndroidJava = function(){
test.javascripCall();
}

</script>




2012年11月27日 星期二

Java ArrayList<Object>的用法,Android 寫法

ArrayList<Object>是一種還蠻方便的定義存放資料的方法,可支援存放不同屬性的物件在裡面

首先先設定一個類別存放資料


class Object_list{
// TODO 設定 List Object
String first_string;
String second_string;
int first_number;
}

設定好了之後,可撰寫一個呼叫此類別的方法,之後會比較方便


class Object_list_example {

public List<Object_list> call_list_example(){
// TODO 存值入 List<Object_list_example>

List<Object_list> li = new ArrayList<Object_list>();

Object_list ob;  //如果class Object_list不是在同一個頁面的話記得要new Object_list 出來                              

for(int i = 0; i< 5 ; i++){
ob = new Object_list();          //NEW 一個物件,如果不寫在迴圈裡便會重複寫入
ob.first_string = " "+i;             //將資料存入 Object_list 裡的 first_string
ob.first_number = i;                //將資料存入 Object_list 裡的 first_number
li.add(ob);                              //將資料塞進 List<Object> 裡
}
return li;
}
}

設定好資料內部屬性以及呼叫方法之後,接下來便是實作


public class Call_list_object{

public void call_list_object(){
// TODO 呼叫 List<Object_list_example>
Object_list_example li_example = new Object_list_example();
List<Object_list> li = li_example.call_list_example();

for(int i =0; i<li.size(); i++){
// 印出 li 裡的 first_string 字串,這會出現在Logcat裡,如果是Java可直接print出來
Log.d("List print first_string value", li.get(i).first_string);
}
}
}


印出結果為
     List print first_string value 0
     List print first_string value 1
     List print first_string value 2
     List print first_string value 3
     List print first_string value 4

PS.前面有提過的,如果不把這段 ob = new Object_list(); 加在程式碼裡,便會重複寫入最後一個數字印出結果為
     List print first_string value 4
     List print first_string value 4

     List print first_string value 4
     List print first_string value 4
     List print first_string value 4

與資料庫的搭配用法之後會再繼續寫