View verschwindet bei Aufruf eines neuen Threads

  • Antworten:2
Philipp K
  • Forum-Beiträge: 27

05.09.2010, 17:48:56 via Website

hallo!!

Ich komme einfach gar nicht weiter bei meinem Programm.

Sobald ich in der Main Klasse den Timer paralell starte verschwindet die Anzeige....
Fehlermeldungen kommen keine... kann mir jemand helfen?


1package Android.ParkTicketAlarm;
2
3
4import android.app.Activity;
5import android.app.AlarmManager;
6import android.app.AlertDialog;
7import android.app.TimePickerDialog;
8import android.app.TimePickerDialog.OnTimeSetListener;
9import android.content.Context;
10import android.content.DialogInterface;
11import android.content.res.Resources;
12import android.media.MediaPlayer;
13import android.os.Bundle;
14import android.os.SystemClock;
15import android.os.Vibrator;
16import android.text.format.DateFormat;
17import android.text.format.Time;
18import android.view.View;
19import android.view.View.OnClickListener;
20import android.widget.Button;
21import android.widget.CheckBox;
22import android.widget.CompoundButton;
23import android.widget.EditText;
24import android.widget.LinearLayout;
25import android.widget.RadioButton;
26import android.widget.RadioGroup;
27import android.widget.TextView;
28import android.widget.TimePicker;
29import android.widget.Toast;
30
31public class ParkTicketAlarm extends Activity {
32 /** Called when the activity is first created. */
33 private int minutes = -1;
34 private int ominutes = -1;
35 Alarm alarm = new Alarm();
36 static final int TIME_DIALOG_ID = 0;
37 @Override
38 public void onCreate(Bundle savedInstanceState) {
39 super.onCreate(savedInstanceState);
40 setContentView(R.layout.main);
41
42 LinearLayout ll = new LinearLayout(this);
43 ll.setOrientation(LinearLayout.VERTICAL);
44 Boolean test = false;
45 TextView tv = new TextView(this);
46 TextView tv2 = new TextView(this);
47 RadioGroup rg = new RadioGroup(this);
48 RadioButton rb = new RadioButton(this);
49 RadioButton rb2 = new RadioButton(this);
50 RadioButton rb3 = new RadioButton(this);
51 Button bt = new Button(this);
52 Button bt2 = new Button(this);
53 final RadioButton rb4 = new RadioButton(this);
54 final CheckBox cb = new CheckBox(this);
55 final java.sql.Time time = new java.sql.Time(System.currentTimeMillis());
56 //hours = java.sql.Time.this.getHours();
57 rb.setText("30 min");
58 rb2.setText("60 min");
59 rb3.setText("120 min");
60 rb4.setText("Klick for Default Time");
61 tv.setText("Set Alarm:");
62 tv2.setText("Other Start Time");
63 cb.setText("Klick for Default Time");
64 bt.setText("Start Alarm");
65 bt2.setText("Stop Alarm");
66 tv.setTextSize(30);
67 tv2.setTextSize(30);
68 rg.addView(rb);
69 rg.addView(rb2);
70 rg.addView(rb3);
71 rg.addView(rb4);
72 ll.addView(tv);
73 ll.addView(rg);
74 ll.addView(tv2);
75 ll.addView(cb);
76 LinearLayout ll2 = new LinearLayout(this);
77 ll2.setOrientation(LinearLayout.HORIZONTAL);
78 ll2.addView(bt);
79 ll2.addView(bt2);
80 // ll.addView(bt);
81 ll.addView(ll2);
82 setContentView(ll);
83
84
85 rb4.setOnClickListener(new OnClickListener() {
86
87
88 @Override
89 public void onClick(View v) {
90 if (rb4.isChecked()== true)
91 {
92
93
94 TimePickerDialog.OnTimeSetListener olisten = new OnTimeSetListener() {
95
96 @Override
97 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
98 minutes = hourOfDay*60 + minute;
99 //Toast toast = Toast.makeText(ParkTicketAlarm.this, Integer.toString(minutes), Toast.LENGTH_SHORT);
100 //toast.show();
101 rb4.setText(String.format("%02d:%02d", hourOfDay, minute));
102 }
103 };
104
105 TimePickerDialog tp = new TimePickerDialog(ParkTicketAlarm.this, olisten,time.getHours(),time.getMinutes(), true);
106 tp.show();
107 }
108
109 }
110 });
111 cb.setOnClickListener(new OnClickListener() {
112
113 @Override
114 public void onClick(View v) {
115 if (cb.isChecked())
116 {
117 TimePickerDialog.OnTimeSetListener olisten2 = new OnTimeSetListener() {
118
119 @Override
120 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
121 ominutes = hourOfDay*60 + minute;
122 cb.setText(String.format("%02d:%02d", hourOfDay, minute));
123 }
124 };
125 TimePickerDialog tp2 = new TimePickerDialog(ParkTicketAlarm.this, olisten2,time.getHours(),time.getMinutes(), true);
126 tp2.show();
127
128
129 }
130
131 }
132 });
133
134 bt.setOnClickListener(new OnClickListener() {
135
136 @Override
137 public void onClick(View v) {
138 Timer timer = new Timer();
139 alarm = new Alarm();
140 new MediaPlayer();
141 MediaPlayer mp = MediaPlayer.create(ParkTicketAlarm.this, R.raw.alarm);
142 Vibrator vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
143 alarm.execute(mp);
144 new AlertDialog.Builder(ParkTicketAlarm.this)
145 .setTitle("ALARM")
146 .setMessage("Your Ticket is expired")
147 .setNegativeButton("OK", new DialogInterface.OnClickListener() {
148
149 public void onClick(DialogInterface dialog, int whichButton) {
150 dialog.cancel();
151 alarm.turnoff();
152 }
153 })
154 .show();
155
156 }
157 });
158
159
160
161 bt2.setOnClickListener(new OnClickListener() {
162
163 @Override
164 public void onClick(View v) {
165 alarm.turnoff();
166
167 }
168 });
169 Timer timer = new Timer();
170 timer.doInBackground(ParkTicketAlarm.this);
171 }
172 public void playalarm ()
173 {
174 @SuppressWarnings("static-access")
175 MediaPlayer mp = new MediaPlayer().create(this, R.raw.alarm);
176 mp.start();
177 // Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
178 long milliseconds = 1000;
179 //v.vibrate(milliseconds);
180 }
181 public void expired() {
182
183 alarm = new Alarm();
184 new MediaPlayer();
185 MediaPlayer mp = MediaPlayer.create(ParkTicketAlarm.this, R.raw.alarm);
186 Vibrator vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
187 alarm.execute(mp);
188 new AlertDialog.Builder(ParkTicketAlarm.this)
189 .setTitle("ALARM")
190 .setMessage("Your Ticket is expired")
191 .setNegativeButton("OK", new DialogInterface.OnClickListener() {
192
193 public void onClick(DialogInterface dialog, int whichButton) {
194 dialog.cancel();
195 alarm.turnoff();
196 }
197 })
198 .show();
199
200 }
201
202}


1package Android.ParkTicketAlarm;
2
3import android.os.AsyncTask;
4
5public class Timer extends AsyncTask<ParkTicketAlarm, String, String>{
6
7 @Override
8 protected String doInBackground(ParkTicketAlarm... params) {
9 java.sql.Time time = new java.sql.Time(System.currentTimeMillis());
10 while(time.getMinutes()!=44){
11
12 try {
13 wait(2000);
14 } catch (InterruptedException e) {
15 // TODO Auto-generated catch block
16 e.printStackTrace();
17 }
18
19 time = new java.sql.Time(System.currentTimeMillis());
20 }
21 params[0].expired();
22
23 return null;
24 }
25
26 }


1package Android.ParkTicketAlarm;
2
3import java.util.Observer;
4
5import android.app.AlertDialog;
6import android.content.Context;
7import android.content.DialogInterface;
8import android.content.DialogInterface.OnClickListener;
9import android.media.MediaPlayer;
10import android.os.AsyncTask;
11import android.os.Vibrator;
12import android.widget.SlidingDrawer;
13import android.widget.Toast;
14
15public class Alarm extends AsyncTask<MediaPlayer, Vibrator, String>{
16
17 MediaPlayer mp;
18 @Override
19 protected String doInBackground(MediaPlayer... params) {
20 mp = (MediaPlayer)params[0];
21 mp.setLooping(true);
22 mp.start();
23
24 return null;
25 }
26 void turnoff()
27 {
28 mp.reset();
29 }
30
31
32
33
34
35
36 }

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.09.2010, 11:09:46 via Website

@Betreiber des Portals: Wann bekommen wir mal ein ordentliches Code Highlighting statt diesen Schrott der sämtliche Formatierungen herausschmeißt ?


Ich sehe keinen Timer den du startest, nur das nutzen der SQL Time, was hier vollkommen fehl am platz ist:

Dieser Code macht eigendlich nichts sinnvolles, anscheinend wird nie 44 wiedergegeben und der AsyncTask wartet bis in alle Ewigkeit.
Auch ist das nutzten der wait() Methode hier deplaziert, wenn dann solltest du ein Thread#sleep verwenden, das ist aber in einer Methode die lediglich
zur Abkopplung/Auslagerung dient falsch!


5public class Timer extends AsyncTask<ParkTicketAlarm, String, String>{
6
7 @Override
8 protected String doInBackground(ParkTicketAlarm... params) {
9 java.sql.Time time = new java.sql.Time(System.currentTimeMillis());
10 while(time.getMinutes()!=44){
11
12 try {
13 wait(2000);
14 } catch (InterruptedException e) {
15 // TODO Auto-generated catch block
16 e.printStackTrace();
17 }
18
19 time = new java.sql.Time(System.currentTimeMillis());
20 }
21 params[0].expired();
22
23 return null;
24 }

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Philipp K
  • Forum-Beiträge: 27

13.09.2010, 21:18:45 via Website

jo der sql timer sollte eigentlich immer die Aktuelle Zeit haben da ich ihn immer wieder neu aufrufe.

Könntest du mir einen genaueren Lösungsansatz geben?

Mit freundlichen Grüßen

Philipp Korn

Antworten