New Ribbon
用Canva設計超快超質感(第2版):商業設計、簡報、影片、網頁、電子書與AI應用最速技 AI繪圖工具 × AI視覺設計平台,從圖像生成到專業設計! 最強職場助攻!ChatGPT + AI 高效工作術 短影音制霸:打造TikTok、YT Shorts、IG Reels成功方程式與AI高效創作力 Canva+AI創意設計與品牌應用250招:從商業技巧、社群祕技到AI圖文影音特效 快快樂樂學威力導演2024.影音剪輯與AI精彩創作 Power Automate自動化超效率工作術 Midjourney AI圖像魔導書:搭配ChatGPT魔法加倍 超人氣FB+IG+LINE社群經營與行銷力(第二版) 翻倍效率工作術:不會就太可惜的 Excel × ChatGPT 自動化應用 AppInventor2零基礎入門班中文版(第六版) Python零基礎入門班(第四版) C語言學習聖經 用Canva設計超快超質感:平面、網頁、電子書、簡報、影片製作與AI繪圖最速技 PHP8/MySQL網頁程式設計自學聖經 翻倍效率工作術 - 不會就太可惜的Power BI大數據視覺圖表設計與分析(第三版) 社群經營一定要會的影音剪輯與動畫製作術 Notion高效管理250招:筆記×資料庫×團隊協作,數位生活與工作最佳幫手 Office 2021高效實用範例必修16課(附500分鐘影音教學/範例檔) Excel自學聖經(第二版):從完整入門到職場活用的技巧與實例大全

 

  android初學特訓班 建構式的問題

Pan

Pan
更新時間:2013/2/4 下午 12:38:13

 

書:android 初學特訓班
範例:SQLite3專案

在範例中有提到建構式~

MyDB.java
private Context mCtx = null;
public MyDB(Context ctx){  
    this.mCtx = ctx;
}

SQLite3Activity.java
db =new MyDB(this);      
        db.open();  
        cursor=db.getAll();
        UpdataAdapter(cursor);

不太能理解建構式的概念,有適當的資料可以參考嗎?

文淵閣工作室

文淵閣工作室
更新時間:2013/2/6 上午 11:50:52

 

親愛的讀者:您好
您的問題非常好,這是程式語言中類別與物件的觀念,也是這個範例最重要的觀念。

類別可以說是建立物件的藍圖,根據類別(藍圖),建立的實體就是物件。
例如:建造房屋時會依據設計圖(類別),建出許多相同造型的房子(物件)。
在類別中,會有一個和類別名稱的方法,用於物件的初始化,稱為建構式,如果不自行建立建構式,
系統會自行建立預設的建構式,此外,建構式也可以多載。

您可在網路以 「java 類別和物件」 查詢,應可得到更佳的資訊。

回到問題來,MyDB 是我們自建的類別,public MyDB(Context ctx) 就是自建的建構式,
它接收一個 Context 型別的參數,實際上就是以 db =new MyDB(this); 傳進來的 this,
而 this 又是甚麼呢? 它其實就是建立這個物件的主程式類別,以本程式來說就是 SQLite3Activity.java
我們也可以 db =new MyDB(SQLite3Activity.java); 來建立 MyDB 物件,兩者其實上相同的。
在 java 語言,這樣的關係稱為相依,簡單的說 db =new MyDB(this); 就是請將 MyDB 物件建立在
主程式中,如果不加 this ,就會出現錯誤,您可以試試看。

在建構式中,接收的參數 ctx 是 MyDB 類別的 private 型別的參數,為了讓 MyDB 類別的所有方法都可以使用此 ctx,
我們將接此的 ctx  放入另一個可在 MyDB 類別中使用的全域變數 mCtx (this.mCtx=ctx),
這個 mCtx 就是 ctx ,也是 this ,或是 SQLite3Activity.java。

MyDB.java
private Context mCtx = null;
public MyDB(Context ctx){  
     this.mCtx = ctx;
}

SQLite3Activity.java
db =new MyDB(this);      
        db.open();  
        cursor=db.getAll();
        UpdataAdapter(cursor);

Pan

Pan
更新時間:2013/2/7 上午 08:43:04

 

非常感謝你的回覆~

我試著用範例去設計一個app
有三個class在三個java檔案

main.java
一開始使用MyDB的方法open()開啟資料庫
且顯示每個功能的Button.

db_insert.java
設定要新增資料的layout.並將輸入到EditText資料送到MyDB db_inser()做新增的動作。

MyDB.java裡都是處理DB要做的事

問題:當我將資料送到db_insert(String n, int p)。
在Debug mode時可以看到n, p 可以接收到傳送進來的資料,但在執行 db.execSQL()
卻發生nullpoint的情況。

MyDB.java
public void append(String n,int p) {
String str = "INSERT INTO " + TABLE_NAME + " (" + NAME + "," + PRICE + ") VALUES (" + n +"," + p + ")";
db.execSQL(str);
    }

不知道是哪邊出了問題。

文淵閣工作室

文淵閣工作室
更新時間:2013/2/8 下午 12:19:14

 

親愛的讀者:您好

從經驗看來,可能是 SQL 語法有錯誤,資料中 n 是字串,應該用 引號('n') 括起來。改為:") VALUES ('" + n +"'," + p + ")";
不過,建議您參考 13-22 以 ContentValue 來處理,比較不會出錯。
如果還是解決不了,請 mail to:「 chiou@e-happy.com.tw」我們再協助處理。


原程式對照
public void append(String n,int p) {
String str = "INSERT INTO " + TABLE_NAME + " (" + NAME + "," + PRICE + ") VALUES (" + n +"," + p + ")";
db.execSQL(str);
    }




 

 

Re:android初學特訓班 建構式的問題

請輸入姓名。

已超出字元數目的最大值。


請輸入電子郵件。

格式無效。


請輸入內容。