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)))
