討論區快速選單
知識庫快速選單
討論區最近新進100則主題 CRM雲端平台必備Salesforce認證
[ 回上頁 ] [ 討論區發言規則 ]
J2ME作業問題
更改我的閱讀文章字型大小
作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/17 下午 09:28:54
我再手機程式開發實務看到一篇程式,我想把它的預設的阿珠.阿花.老伯.年齡改成電話號碼,但是我用很久用不出來,可以請大大幫我這個新手嗎?
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;
public class FriendList extends MIDlet implements CommandListener{
 Display display;
 RecordStore store;
 List list;
 Command exitCmd;
 Command okCmd;
 Command editCmd;
 Form editor;
 TextField nameField;
 TextField ageField;
 ChoiceGroup badFriendChooser;
 Friend[] friends;
public FriendList(){
  
  display = Display.getDisplay(this);
  try{
   store = RecordStore.openRecordStore("Friend", true);
   list = new List("我的朋友", Choice.IMPLICIT);
   if(store.getNumRecords() <= 0){
    /* 建立三筆記錄 */
    friends = new Friend[3];
    friends[0] = new Friend("阿珠", 8, false);
    friends[1] = new Friend("阿花", 12, false);
    friends[2] = new Friend("老伯", 65, false);
    for(int i = 0; i < friends.length; i++){
     friends[i].write(store);
    }
   }
  }
  catch(RecordStoreException rse){}
  
  exitCmd = new Command("離開", Command.EXIT, 1);
  okCmd = new Command("確定", Command.OK, 1);
  editCmd = new Command("新增好友", Command.SCREEN, 1);
  list.addCommand(exitCmd);
  list.addCommand(editCmd);
  list.setCommandListener(this);
  
  editor = new Form("加入新的朋友");
  nameField = new TextField("名字", "", 4, TextField.ANY);
  ageField = new TextField("年齡", "", 3, TextField.NUMERIC);
  badFriendChooser = new ChoiceGroup("是損友嗎?", Choice.EXCLUSIVE);
  badFriendChooser.append("不是", null);
  badFriendChooser.append("是", null);
   
  editor.append(nameField);
  editor.append(ageField);
  editor.append(badFriendChooser);
  editor.addCommand(okCmd);
  editor.setCommandListener(this);
 }

 
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 上午 12:23:53
Friend 物件 的定義在哪裡?

你貼上的程式裡面沒有看到

你想要改的是 Friend 的 construtor

所以必須把 source 找出來修改

同一目錄下應該有一個叫做 Friend.java 的原始碼檔案

作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 12:51:43
因為限制字數的關係,所以我只貼上半部,我把下半部補上
 public void startApp(){
  show();
 }
 
 public void show(){
  /* 每次都取讀取RecordStore內的所有Friend的資料 */
  list.deleteAll();
  try{
   int num = store.getNumRecords();
   for(int id = 1; id <= num; id++){
    Friend friend = new Friend();
    friend.read(store, id);
    if(friend.isBad == false){//只顯示非損友的朋友
     list.append(friend.name + "," + friend.age + "歲", null);
    }
   }
   display.setCurrent(list);
  }
  catch(RecordStoreException rse){}
 }

 public void pauseApp(){}
 
 public void destroyApp(boolean unconditional){
  try{
   /* 記得離開前關閉RecordStore */
   store.closeRecordStore();
  }
  catch(RecordStoreException rse){}
 }

 public void commandAction(Command c, Displayable d){
  if(c == exitCmd){
   destroyApp(true);
   notifyDestroyed();
  }
  else if(c == editCmd){
   nameField.setString(null);
   ageField.setString(null);
   badFriendChooser.setSelectedIndex(0, true);
   display.setCurrent(editor);
  }
  else if(c == okCmd){
   String name = nameField.getString();
   int age = Integer.parseInt(ageField.getString());
   boolean isBad = (badFriendChooser.getSelectedIndex() == 0 ? false : true);
   Friend friend = new Friend(name, age, isBad);
   friend.write(store);
   show();
  }
 }
 
}

/* 定義一個Friend類別來進行讀取及寫入的操作 */
class Friend{

 String name;
 int age;
 boolean isBad = false;
 
 public Friend(){}

 public Friend(String name, int age, boolean isBad){
  this.name = name;
  this.age = age;
  this.isBad = isBad;
 }
 
作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 12:52:26
public void write(RecordStore store){
  byte[] data = null;
  try{
   /* 利用輸出串流寫入記錄 */
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   DataOutputStream dos = new DataOutputStream(baos);
   /* 將姓名,年齡及是否為損友三項欄位寫入同一筆記錄中 */
   dos.writeUTF(name);
   dos.writeInt(age);
   dos.writeBoolean(isBad);
   data = baos.toByteArray();
   store.addRecord(data, 0, data.length);
   baos.close();
   dos.close();
  }
  catch(Exception ex){}
 }
 
 public void read(RecordStore rs, int recordId){
  try{
   /* 利用輸入串流讀入記錄 */
   byte[] data = rs.getRecord(recordId);
   ByteArrayInputStream bais = new ByteArrayInputStream(data);
   DataInputStream dis = new DataInputStream(bais);
   /* 同一筆記錄中包含姓名,年齡及是否為損友三項欄位 */
   name = dis.readUTF();
   age = dis.readInt();
   isBad = dis.readBoolean();
  }
  catch(Exception ex){}
 }
 
}
這些是完整的程式碼!!
作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 12:52:32
public void write(RecordStore store){
  byte[] data = null;
  try{
   /* 利用輸出串流寫入記錄 */
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   DataOutputStream dos = new DataOutputStream(baos);
   /* 將姓名,年齡及是否為損友三項欄位寫入同一筆記錄中 */
   dos.writeUTF(name);
   dos.writeInt(age);
   dos.writeBoolean(isBad);
   data = baos.toByteArray();
   store.addRecord(data, 0, data.length);
   baos.close();
   dos.close();
  }
  catch(Exception ex){}
 }
 
 public void read(RecordStore rs, int recordId){
  try{
   /* 利用輸入串流讀入記錄 */
   byte[] data = rs.getRecord(recordId);
   ByteArrayInputStream bais = new ByteArrayInputStream(data);
   DataInputStream dis = new DataInputStream(bais);
   /* 同一筆記錄中包含姓名,年齡及是否為損友三項欄位 */
   name = dis.readUTF();
   age = dis.readInt();
   isBad = dis.readBoolean();
  }
  catch(Exception ex){}
 }
 
}
這些是完整的程式碼!!
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人rock00782註記此篇回應為很有道理 2007/12/18 下午 02:11:42
嗯... 收到! 我先幫你看, 稍後再上來回應...
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 02:50:15
改好的原始碼檔在這裡: (修改的地方有註解)
http://www.hostj2me.com/downloads/1159/4930/FriendList.java

編譯好的執行檔在這裡: (手機可以直接下載)
http://www.hostj2me.com/downloads/1159/4930/FriendList.jad
http://www.hostj2me.com/downloads/1159/4930/FriendList.jar

作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 05:48:41
可以請問為什麼我編譯之後,要RUN 跑出ava.lang.NullPointerException
java.lang.NullPointerException
 at FriendList.phoneFormat(+1)
 at FriendList.show(+83)
 at FriendList.startApp(+5)
 at javax.microedition.midlet.MIDletProxy.startApp(+7)
 at com.sun.midp.midlet.Scheduler.schedule(+270)
 at com.sun.midp.main.Main.runLocalClass(+28)
 at com.sun.midp.main.Main.main(+80)
這幾行字呢?
我用的軟體是Wireless Toolkit 2.5.1會是因為軟體不同嗎?
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/18 下午 07:43:55
編譯時沒有錯?
而在run時發生NullPointerException嗎?

可能是RecordStore仍存在舊記錄的關係
清除記錄檔就會正常了吧

因為我們把Friend(String,int,boolean)
改成了Friend(String,String,boolean)

若未清除舊記錄就會讀到原本是年齡的資料
因此在呼叫phoneFormat()時發生NullPointer


作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/19 上午 09:33:26
謝謝你
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/20 下午 01:53:51
我也謝謝你贈點數
好久沒得點了

^^
作者 : rock00782(|N)
[ 貼文 7 | 人氣 1787 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/24 下午 03:50:57
可以教我,怎樣清除紀錄檔嗎? 找不到清除的
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/25 上午 11:55:11
WTK的[檔案]->[公用程式]->選[清除資料庫]->按[起動]
作者 : okane(As)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/10/24 下午 01:50:17

>改好的原始碼檔在這裡: (修改的地方有註解)
>http://www.hostj2me.com/downloads/1159/4930/FriendList.java
>
>編譯好的執行檔在這裡: (手機可以直接下載)
>http://www.hostj2me.com/downloads/1159/4930/FriendList.jad
>http://www.hostj2me.com/downloads/1159/4930/FriendList.jar
>
>


hostj2me 已提供更簡短的網址: (用手機打網址是很辛苦的 ^^)

http://hostj2me.com/d/4930/FriendList.jad



 板主 : 徵求中
 > J2ME - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - J2ME - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
J2ME
1 Kenton 80 
2 joe 50 
J2ME
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
4.736328E-02