Java Thread

Programovacie jazyky, rady, poradňa...
MarkMarusin
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 135
Registrovaný: 30 apr 2011, 13:42

Java Thread

Príspevok od používateľa MarkMarusin »

Zdravicko
Mam aplikaciu pre android ktora skenuje qr kody a ukada ich do databazy aplikacie automaticky po ich zoskenovani. Problem je ze ked kliknem na tlacidlo scan, ktore zaistuje skenovanie tak sa do databazy ulozia zoskenovane data skor ako ich stihne zoskenovat. Do databazy teda cestuju prazdne riadky. Riesenim by bolo ze cast kodu ktora uklada zoskenovane data do databazy by pockala 4-5 sek. a az tak ulozila(teda caka kym aplikacia zoskenuje qr kod). Preto by som chcel z oznacenej casti kodu nizzie spravit vlakno ktore by cakalo tych 5 sek. kym sa qr kod nezoskenuje.

Kód: Vybrať všetko

		scan = (Button) findViewById(R.id.scan);
		scan.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				
				//skenovanie
				try {

					Intent intent = new Intent(
							"com.google.zxing.client.android.SCAN");
					intent.putExtra("SCAN_MODE", "QR_CODE_MODE,PRODUCT_MODE");
					startActivityForResult(intent, 0);

				} catch (Exception e) {
					e.printStackTrace();
					Toast.makeText(getApplicationContext(), "ERROR:" + e, 1).show();

				}
				
                                //nasledujucu cast kodu, z ktorej by som potreboval spravit vlakno a uspat ho na 5 sekund
				/////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
				/*if(!QrOutput.equals("Scan cancelled."))
				{
					// ukladanie do databazy
					DBAdapter db = new DBAdapter(MainActivity.this);
					db.open();
					long id;
					if(GpsOutput.equals(""))
						GpsOutput = "Lokalizacia neprebehla";
					id = db.insertTitle(QrOutput);
					db.close();
				}*/
			//////////////////////////////////////////////////////////
//////////////////////////////////////////////////
/////////////////////////////////////////////////
			}
		});
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Java Thread

Príspevok od používateľa BX »

Vyzerá to tak, že ak sa tá druhá časť kódu vykoná pred tou prvou, tak ten intent sa spustí v novom vlákne - a teda to skenovanie prebieha v druhom vlákne.
Preto môžeš uspať priamo to hlavné vlákno, v ktorom si. Tam by stačilo klasicky niečo ako Thread.Sleep. Musí tam byť ale nejaká metóda, ktorá počká na zoskenovanie (počká, až sa druhé vlákno skončí), alebo aspoň nejaká zisťovacia metóda, či už to je hotovo a čakal by si v cykle s menšími sleepmi.
Všeobecne uspávať aplikáciu na pevný počet sekúnd nie je dobré riešenie.
MarkMarusin
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 135
Registrovaný: 30 apr 2011, 13:42

Re: Java Thread

Príspevok od používateľa MarkMarusin »

skusam vytvorit taku metodu ktora by sledovala kedy skenovanie dokonci no neviem na nic prist, potreboval by som nejaku navratovu hodnotu zo skenovacich kniznic ktora by mi oznamila ze uz je kod zoskenovany. pouzivam ZXing library, neviem ci by mi vedel niekto pomoct
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Java Thread

Príspevok od používateľa BX »

Ten intent je tvoja trieda? Tak to si takú metódu naozaj musíš vytvoriť. Alebo to spraviť inak, ako to robíš, lebo to asi robíš zle.
Ak nie je tvoja, tak ju určite má, hľadaj v dokumentácií.
rex
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 32
Registrovaný: 26 apr 2010, 15:42

Re: Java Thread

Príspevok od používateľa rex »

Co tak skusit @override onActivityResult a spracovat to tam? Kedze tam mas startActivityForResult.
Napísať odpoveď