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)