歡迎訂閱杜仲教學頻道: https://www.youtube.com/channel/UCElwt6s8Ea_V-gnu9sZZT5g?sub_confirmation=1 杜仲教學部落格: https://derekcctu.blogspot.com/
2019年2月28日 星期四
[Java基礎程式設計]ch5.5_[猜數字遊戲1~10]
[Java基礎程式設計]ch5.5_[猜數字遊戲1~10]
import java.io.*;
public class Demo
{
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
int pc=(int)(Math.random()*10+1),usr;
System.out.println("pc="+pc);
do{
if(pc>5)
System.out.print("請輸入6~10: ");
else
System.out.print("請輸入1~5: ");
String s1=br.readLine();
usr=Integer.parseInt(s1);
if(usr==pc)
System.out.println("恭喜答對!");
else
System.out.println("抱歉答錯!");
}while(usr!=pc);
System.out.println("遊戲結束...");
}
}
2019年2月27日 星期三
[Android]_ch8.4_讀取外部資料庫
[Android]_ch8.4_讀取外部資料庫
public ArrayList<String> queryDB(Context context){
SQLiteDatabase db=context.openOrCreateDatabase("NCTU.db", Context.MODE_WORLD_WRITEABLE, null);
String args[]={"Taipei","Hsinchu"};
Cursor cursor=db.rawQuery("SELECT * FROM student WHERE address=?;", args);
ArrayList<String> list=new ArrayList<String>();
StringBuilder sb=new StringBuilder("查詢筆數:"+cursor.getCount()+"筆"+"\n欄位:"+cursor.getColumnCount()+"欄\n");
while(cursor.moveToNext()){
sb.append(cursor.getString(0)+"\t");
sb.append(cursor.getString(1)+"\t");
sb.append(cursor.getString(2)+"\t");
sb.append(cursor.getString(3)+"\n");
}
list.add(sb.toString());
return list;
}
btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> list=dbhp.queryDB(MainActivity.this);
if(list.size()>0){
tv1.setText(list.get(0));
}else{
tv1.setText("查詢不到資料...");
}
}
});
[Android]_ch8.3_SQLite3資料庫語法介紹
[Android]_ch8.3_SQLite3資料庫語法介紹
C:\Gjun135>sqlite3 NCTU.db
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> CREATE TABLE student (id TEXT,name TEXT,phoneNO TEXT,addres
sqlite> .table
student
sqlite> .schema
CREATE TABLE student (id TEXT,name TEXT,phoneNO TEXT,address TEXT);
sqlite> INSERT INTO student VALUES('1','Derek','0912345678','Taipei
sqlite> INSERT INTO student VALUES('2','Merry','0912345678','Hsinch
sqlite> INSERT INTO student VALUES('3','Jerry','0912345678','Hsinch
sqlite> INSERT INTO student VALUES('4','Tom','0912345678','Taipei')
sqlite> INSERT INTO student VALUES('5','Vicky','0912345678','Taipei
sqlite> SELECT * FROM student;
1|Derek|0912345678|Taipei
2|Merry|0912345678|Hsinchu
3|Jerry|0912345678|Hsinchu
4|Tom|0912345678|Taipei
5|Vicky|0912345678|Taipei
sqlite> SELECT name,address FROM student;
Derek|Taipei
Merry|Hsinchu
Jerry|Hsinchu
Tom|Taipei
Vicky|Taipei
sqlite> SELECT name,address FROM student WHERE address='Taipei';
Derek|Taipei
Tom|Taipei
Vicky|Taipei
2019年2月25日 星期一
[Android]_ch8.2_SQLite資料庫查詢
[Android]_ch8.2_SQLite資料庫查詢
public ArrayList<String> queryDB(){
SQLiteDatabase db=getWritableDatabase();
Cursor cursor=db.rawQuery("SELECT * FROM teacher;", null);
ArrayList<String> list=new ArrayList<String>();
while(cursor.moveToNext()){
String msg="";
for (int i = 0; i < cursor.getColumnCount(); i++) {
msg=msg+cursor.getString(i)+"\t";
}
list.add(msg);
}
return list;
}
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> list=dbhp.queryDB();
StringBuilder sb=new StringBuilder("查詢結果"+list.size()+"筆如下:\n");
if(list.size()>0){
for(int i=0;i<list.size();i++){
sb.append(list.get(i)+"\n");
}
}else{
sb.append("查詢不到資料...");
}
tv1.setText(sb);
}
});
[Android]_ch8.1_SQLite資料庫建置
[Android]_ch8.1_SQLite資料庫建置
1. DBHP.java
package com.derek.ch24_sqlitedb;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHP extends SQLiteOpenHelper{
public DBHP(Context context){
super(context, "Gjun", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE teacher(id TEXT,name TEXT,phoneNo TEXT,address TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS teacher");
onCreate(db);
}
public void insertDB(){
SQLiteDatabase db=getWritableDatabase();
db.execSQL("INSERT INTO teacher VALUES('1','杜仲','0912-345678','新竹');");
db.execSQL("INSERT INTO teacher VALUES('2','張三','0912-345678','台北');");
db.execSQL("INSERT INTO teacher VALUES('3','李四','0912-345678','台中');");
db.execSQL("INSERT INTO teacher VALUES('4','王五','0912-345678','新竹');");
db.execSQL("INSERT INTO teacher VALUES('5','陳二','0912-345678','台南');");
}
}
2.MainActivity.java
package com.derek.ch24_sqlitedb;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView tv1;
Button btn1,btn2,btn3;
DBHP dbhp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button)findViewById(R.id.button1);
btn2=(Button)findViewById(R.id.button2);
btn3=(Button)findViewById(R.id.button3);
tv1=(TextView)findViewById(R.id.textView1);
if(dbhp==null)
dbhp=new DBHP(MainActivity.this);
else
Toast.makeText(MainActivity.this, "資料庫已存在", Toast.LENGTH_SHORT).show();
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dbhp.insertDB();
tv1.setText("新增資料完成!");
Toast.makeText(MainActivity.this, "新增資料完成!", Toast.LENGTH_SHORT).show();
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv1.setText("");
}
});
}
}
2019年2月22日 星期五
[Android]_ch7.5_存取行動裝置外部儲存媒體(私有區)
[Android]_ch7.5_存取行動裝置外部儲存媒體(私有區)
package com.derek.ch23_externalstorage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn1,btn2;
TextView tv1;
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)findViewById(R.id.imageView1);
tv1=(TextView)findViewById(R.id.textView1);
btn1=(Button)findViewById(R.id.button1);
btn2=(Button)findViewById(R.id.button2);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);// /storage/sdcard/DCIM
File file=new File(path,"derek.jpg"); // /storage/sdcard/DCIM/derek.jpg
saveImage(file);
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File path=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File file=new File(path,"derek.jpg"); // /storage/sdcard/DCIM/derek.jpg
saveImage(file);
}
});
}
public void MediaScan(String paths[]){
MediaScannerConnection.scanFile(MainActivity.this, paths, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.v("MediaScanner", "path="+path+" uri="+uri);
}
});
}
public void saveImage(File file){
File path=file.getParentFile();
if(!isSDCARDExit())
Toast.makeText(MainActivity.this, "SD CARD未裝置!", Toast.LENGTH_SHORT).show();
if(!path.exists())
path.mkdirs();
if(file.exists())
file.delete();
Resources resources=getResources();
InputStream is=resources.openRawResource(R.drawable.a16);
try {
int num=is.available();
byte data[]=new byte[num];
FileOutputStream fos=new FileOutputStream(file);
is.read(data);
fos.write(data);
is.close();
fos.close();
Toast.makeText(MainActivity.this, "1.公有區寫入成功", Toast.LENGTH_SHORT).show();
tv1.setText("檔案大小:"+num+"位元組\n檔案位置:"+file.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String paths[]={file.toString()};
MediaScan(paths);
}
public boolean isSDCARDExit(){
String state=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED))
return true;
else
return false;
}
}
[Android]_ch7.7_ExternalStorage(公有區)
[Android]_ch7.7_ExternalStorage(公有區)
package com.derek.ch23_externalstorage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn1;
TextView tv1;
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)findViewById(R.id.imageView1);
tv1=(TextView)findViewById(R.id.textView1);
btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);// /storage/sdcard/DCIM
File file=new File(path,"derek.jpg"); // /storage/sdcard/DCIM/derek.jpg
if(!isSDCARDExit())
Toast.makeText(MainActivity.this, "SD CARD未裝置!", Toast.LENGTH_SHORT).show();
if(!path.exists())
path.mkdirs();
if(file.exists())
file.delete();
Resources resources=getResources();
InputStream is=resources.openRawResource(R.drawable.a16);
try {
int num=is.available();
byte data[]=new byte[num];
FileOutputStream fos=new FileOutputStream(file);
is.read(data);
fos.write(data);
is.close();
fos.close();
Toast.makeText(MainActivity.this, "1.公有區寫入成功", Toast.LENGTH_SHORT).show();
tv1.setText("檔案大小:"+num+"位元組\n檔案位置:"+file.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public boolean isSDCARDExit(){
String state=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED))
return true;
else
return false;
}
}
2019年2月20日 星期三
[Android]_ch7.6_存取res目錄內的資源
[Android]_ch7.6_存取res目錄內的資源
存取res目錄內的資源基本上都必須透過該資源的resource
ID,說明如下:
ID,說明如下:
存取文字檔:透過「R.string 」
存取圖形檔:透過「R.drawable」
存取多媒體檔:透過「R.raw」
存取layout檔:透過「R.layout」
Resources resources=getResources();
CharSequence s1=resources.getText(R.string.s2);
String s2=resources.getString(R.string.s2);
tv4.setText(s1);
tv5.setText(s2);
Drawable drawable=resources.getDrawable(R.drawable.a11);
iv.setImageDrawable(drawable);
MediaPlayer mediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.lee);
mediaPlayer.start();
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="s1">杜仲教學,Adorid手機程式,2019年</string>
<string name="s2"><B>杜仲教學</B>,<i>Adorid手機程式</i>,<U>2019年</U></string>
</resources>
[Android]_ch7.2_internal storage:存取行動裝置的記憶體。
[Android]_ch7.2_internal storage:存取行動裝置的記憶體。
可以將檔案儲存在行動裝置的記憶體內,這種方式稱為內部儲存,說明如下:
呼叫Context的openFileOutput()可以輸出資料
呼叫FileOutputStream的write()將資料寫入檔案內
呼叫FileOutputStream的close()關閉寫入檔案的資料串流
呼叫Context的openFileInput()可以讀取資料
呼叫FileInputStream的read()讀入檔案資料
呼叫FileInputStream的close()關閉讀取檔案的資料串流
package com.derek.ch22_internalstorage;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView tv4;
Button btn1,btn2,btn3;
EditText et1,et2;
RadioButton rb1,rb2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.editText1);
et2=(EditText)findViewById(R.id.editText2);
rb1=(RadioButton)findViewById(R.id.radioButton1);
rb2=(RadioButton)findViewById(R.id.radioButton2);
btn1=(Button)findViewById(R.id.button1);
btn2=(Button)findViewById(R.id.button2);
btn3=(Button)findViewById(R.id.button3);
tv4=(TextView)findViewById(R.id.textView4);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String name=et1.getText().toString();
boolean sex=(rb1.isChecked())?true:false;
int phone=Integer.parseInt(et2.getText().toString());
FileOutputStream fos = null;
try {
fos=openFileOutput("Derek.txt",MODE_PRIVATE);
fos.write(name.getBytes());
fos.write(Boolean.toString(sex).getBytes());
fos.write(Integer.toString(phone).getBytes());
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(MainActivity.this, "1.存檔成功!位置:"+fos.toString(), Toast.LENGTH_SHORT).show();
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String name=et1.getText().toString();
boolean sex=(rb1.isChecked())?true:false;
int phone=Integer.parseInt(et2.getText().toString());
FileOutputStream fos = null;
try {
fos=openFileOutput("Derek.txt",MODE_APPEND);
fos.write((name+"\n").getBytes());
fos.write((Boolean.toString(sex)+"\n").getBytes());
fos.write((Integer.toString(phone)+"\n").getBytes());
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(MainActivity.this, "2.附加寫入!", Toast.LENGTH_SHORT).show();
}
});
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream fis=openFileInput("Derek.txt");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
StringBuilder sb=new StringBuilder("讀取內容如下:\n");
String msg="";
while((msg=br.readLine())!=null){
sb.append(msg+"\n");
}
br.close();
isr.close();
fis.close();
tv4.setText(sb);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(MainActivity.this, "3.讀取完畢!", Toast.LENGTH_SHORT).show();
}
});
}
}
2019年2月18日 星期一
[Android]_ch7.3_存取assets目錄內的資源
取得assets目錄內的檔案內容是透過較低階的IO方式,並使用AssetManager類別的功能
btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AssetManager AM=getAssets();
try {
InputStream is=AM.open("A2019.txt");
int num=is.available();
byte data[]=new byte[num];
is.read(data);
String string=new String(data);
tv4.setText("檔案大小:"+num+"位元組\n"+string);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
2019年2月15日 星期五
Android ch6 5 隱含意圖1
[Android]_ch6.5_隱含意圖1
package com.derek.ch20_implictintent;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
public class MainActivity extends Activity {
Spinner sp1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp1=(Spinner)findViewById(R.id.spinner1);
String items[]={"隱含意圖介紹","網頁查詢","播號面板","直接撥號","簡訊傳送","地圖定位"};
ArrayAdapter<String> AA=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, items);
AA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(AA);
sp1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
switch(position){
case 1:
Intent i1=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.104.com.tw"));
startActivity(i1);
break;
case 2:
Intent i2=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:0912345678"));
startActivity(i2);
break;
case 3:
Intent i3=new Intent(Intent.ACTION_CALL,Uri.parse("tel:0912345678"));
startActivity(i3);
break;
case 4:
Intent i4=new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:0912345678"));
i4.putExtra("sms_body", "今晚東北季風又來了!");
startActivity(i4);
break;
case 5:
Intent i5=new Intent(Intent.ACTION_VIEW,Uri.parse("geo:24.801597559005653,120.97159624099731"));
startActivity(i5);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
}
2019年2月13日 星期三
[Android]_ch6.4_活動的外觀與方向設定
[Android]_ch6.4_活動的外觀與方向設定
樣式名稱 |
說明 |
Theme.NoTitleBar |
活動視窗沒有標題列 |
Theme.NoTitleBar.Fullscreen |
活動視窗全螢幕顯示 |
Theme.Dialog |
讓活動視窗看起來像對話方塊 |
Theme.Wallpaper |
在活動視窗套用使用者選擇的桌布,需要API層級6之上才支援 |
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.derek.ch19__bundle"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Act01"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="Act02" android:theme="@android:style/Theme.NoTitleBar"></activity>
<activity android:name="Act03" android:theme="@android:style/Theme.Dialog"></activity>
</application>
</manifest>
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
});
btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
訂閱:
文章 (Atom)
Ether.fi Cash Card 一張所有人必備的加密貨幣信用卡 [Ether.fi Cash Card] : https://www.ether.fi/app/cash/sign-up?ref_code=d27f8523 ------國際交易所------ [Bitg...
-
22.Hamster Kombat Daily Combo倉鼠戰鬥_DailyCombo0620 ------國際交易所------ [Bitget 交易所]: https://partner.bitget.com/bg/DCA888 邀請碼:DCA888 [Bybit交...
-
[CATS coin每日任務(Ton區塊鏈游戲伏擊百倍幣)] https://t.me/catsgang_bot/join?startapp=FXvTt0OIdo7NJ4jxDutEV ------國際交易所------ [Bitget 交易所]: https://partn...