1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo $arr2=json_encode($arr); $stdin=get_object_vars(json_decode($arr2)); foreach ($stdin as $k => $v) { echo "$k = \"$v\"\n"; // print json_decode key => value. } ?>
2011年12月14日
[PHP]JSON的使用
2011年12月9日
[Android] 開發小問題
1. indexOf判斷中文字串
2.使用正規表示法判斷數字
//indexOf的句子,不知道為什麼第一個字不會去找,怪災。 replaced=" "+result.get(i); //年 if(replaced.indexOf("年")>0) { score[i]=score[i]+1; }
2.使用正規表示法判斷數字
//判斷數字 Pattern p=Pattern.compile("[0-9]{1,2}"); Matcher m=p.matcher(replaced); if(m.find()){ //正確 } //{n,m} 表示前一個字元或者前一個RE出現n到m次 //[0-9] 0-9的集合
2011年12月5日
[Android]Activity返回上一頁
page1
page2
package Demo; /* import相關class */ import java.text.DecimalFormat; import java.text.NumberFormat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Page1 extends Activity { Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 載入mylayout.xml Layout */ setContentView(R.layout.myalyout); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /* 回傳result回上一個activity */ Page1.this.setResult(RESULT_OK, intent); /* 關閉activity */ Page1.this.finish(); } }); } }
page2
package Demo; /* import相關class */ import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; public class Page2 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 載入main.xml Layout */ setContentView(R.layout.main); /*new一個Intent物件,並指定class*/ Intent intent = new Intent(); intent.setClass(Page2.this,Page1.class); /*呼叫Activity EX03_11_1*/ startActivityForResult(intent,0); } /* 覆寫 onActivityResult()*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case RESULT_OK: //回上一頁囉 break; default: break; } } }
2011年11月27日
[PHP] 程式小技巧
[迴圈的使用]
[簡查重覆的資料]
SELECT username,COUNT(*)/*重複出現的次數*/ FROM member GROUP BY username HAVING COUNT(*) > 1 /*列出重複出現一次以上的資料*/
//PHP3 or old
reset($attributes);
while (list($key, $value) = each($attributes)) {
//do something
}
//PHP4
foreach ($attributes as $key => $value){
//do something
}
[簡查重覆的資料]
SELECT username,COUNT(*)/*重複出現的次數*/ FROM member GROUP BY username HAVING COUNT(*) > 1 /*列出重複出現一次以上的資料*/
2011年11月24日
[Android] 取得檔案位置
package tw.Goocue; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Main extends Activity { @Override public void onCreate(Bundle icicle) { // TODO Auto-generated method stub super.onCreate(icicle); setContentView(R.layout.main); Button b = (Button)this.findViewById(R.id.b1); b.setOnClickListener( new OnClickListener(){ public void onClick(View arg0) { // TODO Auto-generated method stub // 建立 "選擇檔案 Action" 的 Intent Intent intent = new Intent( Intent.ACTION_GET_CONTENT ); // 過濾檔案格式 intent.setType( "*/*" ); // 建立 "檔案選擇器" 的 Intent (第二個參數: 選擇器的標題) Intent destIntent = Intent.createChooser( intent, "選擇檔案" ); // 切換到檔案選擇器 (它的處理結果, 會觸發 onActivityResult 事件) startActivityForResult( destIntent, 0 ); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); // 有選擇檔案 if ( resultCode == RESULT_OK ) { // 取得檔案的 Uri Uri uri = data.getData(); if( uri != null ) { Cursor cursor = this.getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); for (int i = 0; i < cursor.getColumnCount(); i++) { setTitle( i+"-"+cursor.getString(1)); } // 利用 Uri 顯示 ImageView 圖片 // setTitle( uri.toString() ); } else { setTitle("無效的檔案路徑 !!"); } } else { setTitle("取消選擇檔案 !!"); } } }
[PHP] 清除網頁快取
//變成Function function nocache_headers() { @ header('Expires: Thu, 01 Jan 1970 00:00:01 GMT'); @ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); @ header('Cache-Control: no-cache, must-revalidate, max-age=0'); @ header('Pragma: no-cache'); } nocache_headers();
2011年10月2日
[Android]直向、橫向的設定
問題:
Android 螢幕的直向?橫向?
一、程式碼
Android 螢幕的直向?橫向?
一、程式碼
Activity.java
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //強置為橫向 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //強置為直向
[Android] 動畫的實現
Activity.java
package tw.G000E004; import android.app.Activity; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; public class G000E004Activity extends Activity { Animation myanimation; ImageView img; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myanimation=AnimationUtils.loadAnimation(this, R.anim.myanim); img=(ImageView)findViewById(R.id.img); img.startAnimation(myanimation); } }
myanim.xml(記得加入)
android:fillafter="false"
android:fromxscale="0.0"
android:fromyscale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotx="50%"
android:pivoty="50%"
android:toxscale="1.4"
android:toyscale="1.4">
android:fromxdelta="30"
android:fromydelta="30"
android:toxdelta="0"
android:toydelta="50">
android:fromdegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotx="50%"
android:pivoty="50%"
android:todegrees="+350">
main.xml(記得加入)
android:layout_width="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
android:layout_width="fill_parent"
android:text="@string/hello">
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/icon">
2011年9月25日
[PHP]在網頁中加入 Google Map
- [ 按此進入 ] Google Maps API Key申請頁面。
- 申請Google Mass API的網址填入
- 取得 Key。
- 最後會出現三個方塊,分別是你取得的 Key,你指定的 URL,以及一個範例。
- 將JavaScript需放至之間。
2011年8月28日
[Android]OnItemClick的使用方法
一、簡介
(2)OnItemClick的使用方式。
二、方法
三、程式碼
a.顯示的Intent
在建構Intent時已經指定接收者,類似函式調用的方式。
b.隱藏式的Intent
在建構Intent時並沒有指定接收者,之後在傳送。
在建構Intent時已經指定接收者,類似函式調用的方式。
b.隱藏式的Intent
在建構Intent時並沒有指定接收者,之後在傳送。
Activity.java
package tw.test2; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Gallery; import android.widget.Toast; public class Test2Activity extends Activity { private Gallery gallery; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gallery=(Gallery)findViewById(R.id.gallery); //希宣告一個類別,用來設定圖片資訊 ImageAdapter imageAdapter=new ImageAdapter(this); //加入圖片 Integer[] mImageIds={R.drawable.icon,R.drawable.ha}; //設定圖片位置 imageAdapter.setmImageIds(mImageIds); //圖片高度 imageAdapter.setHeight(100); //圖片寬度 imageAdapter.setWidth(200); gallery.setAdapter(imageAdapter); //當按下圖片時,所觸發的事件 gallery.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // TODO Auto-generated method stub Toast.makeText(Test2Activity.this, "您選的是第"+position+"張圖", Toast.LENGTH_LONG).show(); //換頁 Intent intent = new Intent(); intent.setClass(Test2Activity.this, Report.class); /* * 這邊是你要帶過去的資料 */ intent.putExtra("test", "第二頁囉"); startActivity(intent); }}); } }ImageAdapter.java
package tw.test2; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context mContext; private Integer width; private Integer height; private Integer[] mImageIds; public ImageAdapter(Context c) { mContext = c; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(mContext); //設定圖片來源 imageView.setImageResource(mImageIds[position]); //設定圖片的寬、高 imageView.setLayoutParams(new Gallery.LayoutParams(width, height)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); return imageView; } public Integer getHeight() { return height; } public void setHeight(Integer height) { this.height = height; } public Integer[] getmImageIds() { return mImageIds; } public void setmImageIds(Integer[] mImageIds) { this.mImageIds = mImageIds; } public Integer getWidth() { return width; } public void setWidth(Integer width) { this.width = width; } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } }Report.java
package tw.test2; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; public class Report extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.report); Intent intent = this.getIntent(); String showtest=intent.getStringExtra("test"); Toast.makeText(Report.this,showtest.toString(), Toast.LENGTH_LONG).show(); } }記得加入(AndroidManifest.xml)
2011年8月26日
[Android]以背景服務的方式錄製聲音
一、簡介
現在大部份使用者所看見的執行畫面都是前端的程式(Activity),但是還有很多的服務需要在背景中執行,這個功能則需要使用到Service。
由於背景執行所以是要寫在Service而不是Activity,因此需要在權限頁面(AndroidManifest)中新增一個Service的服務。
二、方法
三、程式碼
(1) Service:這個服務本身是無介面,也並非一個獨立的Process,只是有需要長時間執行的獨立程序為了不影響主程式的運行,就會使用Service。
(2) MediaRecorder:這個類別主要是 Android錄音錄影所使用到的,詳細資料可以參詳官方網站。
Activity.java
package tw.Recording; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class RecordingActivity extends Activity { private Button start,stop; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start=(Button)findViewById(R.id.start); stop=(Button)findViewById(R.id.stop); start.setOnClickListener(new OnClickListener(){ //執行背景作業 @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(RecordingActivity.this, RecordingService.class); startService(intent); }}); stop.setOnClickListener(new OnClickListener(){ //停止背景作業 @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(RecordingActivity.this, RecordingService.class); stopService(intent); }}); } }Service.java
package tw.Recording; import java.io.File; import java.io.IOException; import android.app.Service; import android.content.Intent; import android.media.MediaRecorder; import android.os.Environment; import android.os.IBinder; public class RecordingService extends Service { private MediaRecorder mediaRecorder = null; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override //錄音 public void onStart(Intent intent,int startId) { //設定錄音檔名 String fileName = "test.amr"; try{ File SDCardpath=Environment.getExternalStorageDirectory(); File myDataPath=new File(SDCardpath.getAbsolutePath()+"/download"); if( !myDataPath.exists() ) myDataPath.mkdirs(); File recodeFile = new File(SDCardpath.getAbsolutePath() + "/download/"+fileName); mediaRecorder = new MediaRecorder(); //設定音源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //設定輸出檔案的格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); //設定編碼格式 mediaRecorder .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //設定錄音檔位置 mediaRecorder.setOutputFile(recodeFile.getAbsolutePath()); mediaRecorder.prepare(); //開始錄音 mediaRecorder.start(); } catch(IOException e){ e.printStackTrace(); } super.onStart(intent, startId); } @Override //停止背景時 public void onDestroy() { if(mediaRecorder != null) { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; } super.onDestroy(); } }AndroidManifest.xml(記得加入)
訂閱:
文章 (Atom)