Probleme mit der SeekBar

  • 8 Antworten
  • Letztes Antwortdatum
W

Wolverine566561

Gast
Hallo zusammen,

ich bin neu hier und ärgere mich aktuell mit einem Problem herum. Ich entwickle eine App zur Verwaltung von Dart-Matches. Ich möchte eine Activity für ein Spielsetup implementieren. Bisher habe ich die Auswahl einer Spielvariante mit eine ListView (simple_list_item_single_choice) implementiert, die einwandfrei funktioniert. Darunter soll der User mittels einer SeekBar auswählen können, wieviele Spiele (Legs) bis zum Gewinn eines Matches gespielt werden sollen. Und da scheitert es leider bei der Benutzung der SeekBar. Beim Programmstart wird die SeekBar zwar angezeigt, aber sobald ich diese benutzen will, verabschiedet sich die App mit einer NullPointerException...und ich weiß nicht, woran es liegt :(

Die Implementierung der Activity sieht so aus:
Code:
package de.marcoheintze.dartsapp;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.view.*;

public class X01Activity extends Activity
{
	// Game-setup-attributes
	private int gametype;
	
	@Override
	public void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_x01);
		
		// ListView-attributes
		Context context = getApplicationContext();
		// Init List-items
		final String[] listViewItems = new String[]
				{
					context.getString(R.string.button_301),
					context.getString(R.string.button_501),
					context.getString(R.string.button_701),
					context.getString(R.string.button_901),
				};
		// Connect listView with the layout-item
		ListView listView = (ListView) findViewById(R.id.lv_gametype);
		// Integrate the adapter
		listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, listViewItems));
		// Set choice-mode
		listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		// Preselect 501
		listView.setItemChecked(1, true);
		// Set the chosen gametype
		listView.setOnItemClickListener(new OnItemClickListener() 
		{
			public void onItemClick(
					AdapterView listView,
					View selectedItem,
					int itemPos,
					long itemId)
			{
				if(itemPos == 0)
					gametype = itemPos;	// 301
				else if(itemPos == 1)
					gametype = itemPos;	// 501
				else if(itemPos == 2)
					gametype = itemPos;	// 701
				else if(itemPos == 3)
					gametype = itemPos;	// 901
			}
		});		

		// Init SeekBar-attributes
		SeekBar seekBarLegs = (SeekBar) findViewById(R.id.seekBarLegs);
		final TextView legCounter = (TextView) findViewById(R.string.textview_leg_counter);
		
		seekBarLegs.setProgress(1);
		seekBarLegs.incrementProgressBy(1);
		seekBarLegs.setMax(3);
		
		seekBarLegs.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
		{
			
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				legCounter.setText(String.valueOf(progress + " Legs"));
				
			}
		});
	}
	
}

Der Stacktrace so:

Code:
08-27 15:34:02.990: W/dalvikvm(2348): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
08-27 15:34:03.040: E/AndroidRuntime(2348): FATAL EXCEPTION: main
08-27 15:34:03.040: E/AndroidRuntime(2348): java.lang.NullPointerException
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at de.marcoheintze.dartsapp.X01Activity$2.onProgressChanged(X01Activity.java:94)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.SeekBar.onProgressRefresh(SeekBar.java:91)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:686)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.ProgressBar.refreshProgress(ProgressBar.java:698)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.ProgressBar.setProgress(ProgressBar.java:745)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.AbsSeekBar.trackTouchEvent(AbsSeekBar.java:451)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:379)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.View.dispatchTouchEvent(View.java:7246)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.View.dispatchPointerEvent(View.java:7426)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4342)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4382)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.Choreographer.doCallbacks(Choreographer.java:562)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.Choreographer.doFrame(Choreographer.java:530)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.os.Handler.handleCallback(Handler.java:725)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.os.Looper.loop(Looper.java:137)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at java.lang.reflect.Method.invoke(Method.java:511)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-27 15:34:03.040: E/AndroidRuntime(2348): 	at dalvik.system.NativeStart.main(Native Method)
08-27 15:34:06.710: D/gralloc_goldfish(2365): Emulator without GPU emulation detected.

Woran loegt das und was kann ich tun???

Vielen Dank schonmal und Grüße
 
Was steht in Zeile 94 von der Activity?

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
legCounter.setText(progress);
 
Das ist ja die Methode "onProgressChanged" richtig?

In det Methode musst du legCounter nochmal initialisieren.

Stimmt gar nicht.

Ich denke legCounter wird einfach nicht gefunden, also die ID stimmt nicht.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Ich probiers aus.

Der ursprüngliche Beitrag von 13:32 Uhr wurde um 13:43 Uhr ergänzt:

Die IDs stimmen soweit ich das sehe. Aaaber: Die main.xml hat keinerlei Eintrag über die SeekBar. Kann es daran liegen?
 
Wenn du legCounter initialisiert steht da findViewById(R.string.Text...);
Da muss aber R.ID.Text... rein.
Das müsste das Problem sein

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Zum einen hast Du vollkommen recht. Vielen, vielen Dank! Zum anderen bin ich ein noch viel größerer Pfosten als angenommen:

progress ist von Typ int! Ein casting zu String hat geholfen :mad2:

Nun gut, vielleicht sollte man wirklich nicht zu lange auf den Code schauen, sonst sieht man die einfachsten Fehler nicht.

Danke Dir trotzdem nochmal :D
 
Das erzeugt aber eigentlich keine NullPointerException. Das eigentliche Problem war dann schon die ID :p

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Da hast Du Recht. Bis da unten hin ist er ja gar nicht erst gekommen :)

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Zurück
Oben Unten