Mobilszoftverek - Ellenőrző kérdések kódjai
JavaME
J1.1 Vázolja fel egy Java ME alkalmazás kódját, mely megjeleníti a "Hello Mobil Fejlesztők!" feliratot!
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloMidlet extends MIDlet implements CommandListener { private Form form; public void initialize() { form = new Form("hello"); form.append("Hello Mobil Fejlesztők!"); Command cExit = new Command("Exit", Command.EXIT, 1); form.addCommand(cExit); form.setCommandListener(this); Display.getDisplay(this).setCurrent(form); } public void startApp() { initialize(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c.getLabel() == "Exit") { destroyApp(true); notifyDestroyed(); } } }
J1.2 Készítsen egy Canvas osztályt, mely fekete háttéren egy piros négyzetet jelenít meg!
public class MyCanvas extends Canvas { private MyMidlet midlet; public MyCanvas(MyMidlet aMidlet) { midlet = aMidlet; } public void paint(Graphics g) { g.setColor(0,0,0); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(255,0,0); g.fillRect(10,10,50,50); } public void keyPressed(int keycode) { midlet.exitMIDlet(); } }
J1.3 Vázolja fel egy Java ME alkalmazás kódját, mely másodpercenként egy # jelet fűz a kijelző tartalmához!
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class TimerMidlet extends MIDlet { private Form form; private class MyTimerTask extends TimerTask { public void run() { form.append("#"); } } public void startApp() { form = new Form("Append"); Display.getDisplay(this).setCurrent(form); Timer mainTimer = new Timer(); mainTimer.schedule(new MyTimerTask(), 0, 1000); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
J3.1. Készítsen egy szál osztályt, amely kilistázza a tennivalókat!
private class MyToDoLister extends Thread { public void run() { String v = System.getProperty("microedition.pim.version"); if (v != null) { PIM singleton = PIM.getInstance(); ToDoList todolist = null; try { todolist = (ToDoList)singleton.openPIMList(PIM.TODO_LIST, PIM.READ_ONLY); Enumeration todosEnum = todolist.items(); while (todosEnum.hasMoreElements()) { ToDo t = (ToDo)todosEnum.nextElement(); System.out.println(t.getString(ToDo.SUMMARY, 0)); } } catch (Exception e){ e.printStackTrace(); } } } }
J3.2 Készítsen egy függvényt, mely az alkalmazás beállításait (egy string és egy int) elmenti perzisztens módon!
public void saveSettings(String aString, int aInt) { ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); RecordStore rs = null; try { dout.writeUTF(aString); dout.writeInt(aInt); dout.flush(); byte[] data = bout.toByteArray(); rs = RecordStore.openRecordStore("mydatabase", true); try { rs.setRecord(1, data, 0, data.length); } catch (RecordStoreException ex) { rs.addRecord(data, 0, data.length); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { dout.close(); bout.close(); rs.closeRecordStore(); } catch (Exception ex) { ex.printStackTrace(); } } }
J3.3 Készítsen egy szál osztályt, mely a 192.168.0.100:10000-es címre socket-en keresztül elküldi a "hello world" stringet!
public class SocketWriter extends Thread { public void run() { SocketConnection sconn = null; OutputStream os = null; try { sconn = (SocketConnection)Connector.open("socket://192.168.0.100:10000"); os = sconn.openOutputStream(); os.write("hello world"); os.close(); sconn.close(); } catch (Exception e) { } } }
Symbian - C++
S2.1 Hogyan működik a TRAP és User::Leave? Hogyan kell ezeket használni? (példakód)
void Fuggveny() { // nincs L a végén, mivel elkapja az összes leave forrást int hiba; TRAP(hiba, ProbaL()); //leave-elő függvény hívása if (hiba != KErrNone) { // ha ProbaL() leave-el, akkor ide adódik a vezérlés, és lekezelhetjük a hibát. } }
S2.2 Mi az a kétfázisú konstrukció? (példakód)
class CKulsoOsztaly : public CBase { public: ~CKulsoOsztaly(); //destruktor static CKulsoOsztaly* NewL(); //példányosító metódusok static CKulsoOsztaly* NewLC(); protected: //védett konstruktor, közvetlenül nem példányosítható az osztály CKulsoOsztaly(); //első fázis, nem leavelhet void ConstructL(); //második fázis, leavelhet }; void CKulsoOsztaly::ConstructL() { iTagValtozo = new (ELeave) CBelsoOsztaly(); } CKulsoOsztaly* CKulsoOsztaly::NewLC() { //konstruktor, egyszerű inicializálások CKulsoOsztaly* self = new (ELeave) CKulsoOsztaly(); CleanupStack::PushL(self); //félkész obj felrakása a CS-re self->ConstructL(); //veszélyes inicializálások, de ekkorra az objektum már a CleanupStack-en van return self; } CKulsoOsztaly* CKulsoOsztaly::NewL() { CKulsoOsztaly * self = NewLC(); CleanupStack::Pop(); return self; }
Symbian - Qt
S3.1 Hogy működik a signals and slots? (példakód)
#include <QObject> class Counter : public QObject { Q_OBJECT public: Counter() { val = 0; } int value() const { return val; } public slots: void setValue(int v) { if (v != val) { val = v; emit valueChanged(v); } } signals: void valueChanged(int newValue); private: int val; }; ... Counter c1, c2; //összekapcsolás QObject::connect(&c1, SIGNAL(valueChanged(int)), &c2, SLOT(setValue(int)))