Mobilszoftverek - Ellenőrző kérdések kódjai

A VIK Wikiből

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