Android - IOS Programlama
Android Kronometre Ve Activity‘Ler Arası Veri Aktarımı (Yardım Ediniz)
Android Kronometre Ve Activity‘Ler Arası Veri Aktarımı (Yardım Ediniz)
-
merhaba arkadaşlar aşağıdaki yazdığım kodlarla iki gündür uğraşıyorum main activity de kronometreyi başlatıp durdurma kısımları çalışıyor fakat çıkış tuşuna basınca kronometrenin gösterdiği süreyi diğer activity'ye bundle ile gönderip o ekranda göstermeyi başaramadım, sürekli hata veriyor (android telefon olmadığından emülatör kullanıyorum) yardımcı olursanız sevinirim:
KronometreActivity.java
package com.asdasd.kronometre; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.widget.Button; import android.widget.Chronometer; public class KronometreActivity extends Activity implements View.OnClickListener { Chronometer chr; Button startbutton; Button stopbutton; Button exitbutton; Bundle bundle; long yazi = 888; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); chr = (Chronometer) findViewById(R.id.chronometer); chr.setFormat("%s"); chr.setBase(SystemClock.elapsedRealtime()); startbutton = (Button) findViewById(R.id.startbutton); startbutton.setOnClickListener(this); stopbutton = (Button) findViewById(R.id.stopbutton); stopbutton.setOnClickListener(this); stopbutton.setEnabled(false); exitbutton = (Button) findViewById(R.id.exitbutton); exitbutton.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.startbutton: chr.setBase(SystemClock.elapsedRealtime()); chr.start(); startbutton.setEnabled(false); stopbutton.setEnabled(true); break; case R.id.stopbutton: chr.stop(); startbutton.setEnabled(true); stopbutton.setEnabled(false); break; case R.id.exitbutton: try { yazi = chr.getBase(); chr.stop(); } catch(Exception e) { e.printStackTrace(); yazi = 999; bundle.putLong("durum", yazi); Intent intent = new Intent("com.asdasd.kronometre.DURUM"); intent.putExtras(bundle); startActivity(intent); } } } }
main.xml
Durum.java
package com.asdasd.kronometre; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class Durum extends Activity { Bundle bundle; long yazi1; String yazi2; TextView goster; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.durum); try { bundle = getIntent().getExtras(); yazi1 = bundle.getLong("durum"); yazi2 = Long.toString(yazi1); goster = (TextView) findViewById(R.id.goster); goster.setText(yazi2); } catch (Exception e) { e.printStackTrace(); yazi2 = "hata"; goster.setText(yazi2); } } }
durum.xml
strings.xml
Chronometer Start Stop Exit
AndroidManifest.xml
-
Kronometrenin değerini almak için bunu kullanmalısın:
yazi = (SystemClock.elapsedRealtime() - chr.getBase()) / 1000;
-
case
R.id.exitbutton:
61
try
{
62
yazi = chr.getBase();
63
chr.stop();
64
}
catch
(Exception e) {
65
e.printStackTrace();
66
yazi =
999
;
67
bundle.putLong(
"durum"
, yazi);
68
Intent intent =
new
Intent(
"com.asdasd.kronometre.DURUM"
);
69
intent.putExtras(bundle);
70
startActivity(intent);
71
}
burada neden durum activitiysi catch bloğunun içinde? hata mı veriyor ki buraya aldın ?
-
evet try catch bloğunda da kafa gitmiş :D son hali şu şekilde ve çalışmamaya devam ediyor:
case R.id.exitbutton: chr.stop(); try { yazi = (SystemClock.elapsedRealtime() - chr.getBase()) / 1000; } catch (Exception e) { e.printStackTrace(); yazi = 999; } finally { bundle.putLong("durum", yazi); Intent intent = new Intent("com.asdasd.kronometre.DURUM"); intent.putExtras(bundle); startActivity(intent); }
-
chr.getBase()
den önce
chr.stop();
kullanmışsın. Önce değeri alıp sonra durdurmayı dener misin? Stoptan sonra getBase(); çalışmıyor olabilir.
-
JPriest bunu yazdı:
-----------------------------chr.getBase()
den önce
chr.stop();
kullanmışsın. Önce değeri alıp sonra durdurmayı dener misin? Stoptan sonra getBase(); çalışmıyor olabilir.
-----------------------------şöyle denedim yine olmadı:
case R.id.exitbutton: try { yazi = (SystemClock.elapsedRealtime() - chr.getBase()) / 1000; chr.stop(); } catch (Exception e) { e.printStackTrace(); chr.stop(); yazi = 999; } finally { bundle.putLong("durum", yazi); Intent intent = new Intent("com.asdasd.kronometre.DURUM"); intent.putExtras(bundle); startActivity(intent); }
ardından kronometreyi bırakıp sadece bir long değeri göndermeyi denedim
try { // yazi = (SystemClock.elapsedRealtime() - chr.getBase()) / 1000; chr.stop(); yazi = 555; } catch (Exception e) { e.printStackTrace(); chr.stop(); yazi = 999; } finally { bundle.putLong("durum", yazi); Intent intent = new Intent("com.kudretemre.asdasd.DURUM"); intent.putExtras(bundle); startActivity(intent); }
sanırım sıkıntı koronometrenin değeri değilde diğer activityi çalıştırmakta
-
bundle ı new ile oluşturmamışsın hocam.. constructor da yada main de bi yerde
bundle = new Bundle(); de
edit böyle olmazsa, nerede hata verdiğini, hata mesajını falan bi zahmet söyle. eclipse yok şuan bende (daha doğrusu ubuntuda vardı, silindi... )
-
Çünkü bundle tanımlaması yapmışsın ama yeni bir instance oluşturmamışsın. Diğer activity'e hep null gider.
bundle = new Bundle(); gibisinden bir satır eklemelisin. onCreate() içinde yapabilirsin.
---
edit:
yine geç kalmışım :)
-
unbalanced bunu yazdı:
-----------------------------bundle ı new ile oluşturmamışsın hocam.. constructor da yada main de bi yerde
bundle = new Bundle(); de
edit böyle olmazsa, nerede hata verdiğini, hata mesajını falan bi zahmet söyle. eclipse yok şuan bende (daha doğrusu ubuntuda vardı, silindi... )
-----------------------------teşekkür ederim, düzeldi :)
JPriest sen de sağolasın zaman ayırdın
overbite tarafından 30/Ara/12 02:57 tarihinde düzenlenmiştir