User Setting abrufen

  • 14 Antworten
  • Letztes Antwortdatum
freelager

freelager

App-Anbieter (Beta)
4
Hallo Leute.

Ich habe in meiner App eine Preference rein gemacht.
Nun möchte ich die gespeicherte daten abrufen im meine CONSTANTS class zum meine public static final String STREAM_1_URL
Ich habe keine Ahnung wie ich das machen soll.

Hier sind die Activity´s

CONSTANTS
Code:
package de.radiomega4u.android;

import de.radiomega4u.audio.media.streamStation.StreamStation;

public class CONSTANTS {
	
	public static final String SITE_URL				= "http://site.anonplusradio.com";
	
	public static final String STREAM_1_URL			= "hier soll die daten abrufe drinnen sein";

	public static final String STREAM_1_LABEL		= "Radio-Mega4u";

	public static final StreamStation[] ALl_STATIONS =
		{
			new StreamStation(STREAM_1_LABEL, STREAM_1_URL)
		};
	public static final StreamStation DEFAULT_STREAM_STATION = ALl_STATIONS[0];
	
}

UserSettingActivity
Code:
package de.radiomega4u.android;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class UserSettingActivity extends PreferenceActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		addPreferencesFromResource(R.xml.settings);

	}
}

Settings.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

     <PreferenceCategory android:title="Kbps" >
        <ListPreference
            android:key="Kbps"
            android:entries="@array/kbpsSettings"
            android:summary="" 
            android:entryValues="@array/kbpsSettingsValues"
            android:title="Kbps for Player" />
    </PreferenceCategory>

</PreferenceScreen>

array.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="kbpsSettings">
        <item name="0">192 Kbps</item>
        <item name="1">64 Kbps Comming Soon</item>
        <item name="2">32 Kbps Comming Soon</item>
    </string-array>
	<string-array name="kbpsSettingsValues">
        <item name="0">test</item>
        <item name="1">test1</item>
        <item name="2">test2</item>
    </string-array>
	
</resources>

danke im voraus

LG Freelager
 
Um aus den Preferences zu lesen, brauchst du einen Context. Du kannst das bspw. dann so auslagern, und dann an der entsprechenden Stelle halt die Funktion aufrufen und Context übergeben:

PHP:
public static String getStreamURL(Context ctx){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx);
        return sharedPreferences.getString("keydeinerpreference", "default-wert");
}
 
Ich werde es gleich mal aus probieren.

Der ursprüngliche Beitrag von 19:30 Uhr wurde um 20:00 Uhr ergänzt:

Habe immer noch ein problem.
Code:
package de.radiomega4u.android;

import android.preference.PreferenceManager;
import android.content.Context;
import android.content.SharedPreferences;
import de.radiomega4u.audio.media.streamStation.StreamStation;

public class CONSTANTS {
	
	public static String getStreamURL(Context ctx){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx);
        return sharedPreferences.getString("Kbps", "http://88.198.143.54:10102/");
    } 
	
	public static final String SITE_URL				= "http://site.anonplusradio.com";
	
	public static final String STREAM_1_URL			= getStreamURL;

	public static final String STREAM_1_LABEL		= "Radio-Mega4u";

	public static final StreamStation[] ALl_STATIONS =
		{
			new StreamStation(STREAM_1_LABEL, STREAM_1_URL)
		};
	public static final StreamStation DEFAULT_STREAM_STATION = ALl_STATIONS[0];
	
}

Error in
public static final String STREAM_1_URL = getStreamURL();
geht nicht da muss ich null am ende hin schreiben.
 
Wie gesagt, es muss ein Context übergeben werden. Da, wo du normal auf "STREAM_1_URL" zurück greifen willst, setzt du nun bspw. getStreamURL(this); ein (bei einer Activity ist this = context, ansonsten aus einem Fragment heraus bspw. getActivity()).
 
könntest du dir mal mein projekt anschauen?
wen ja schreibe ich dir den link als pn.
 
Sorry, aber da fehlt der Lerneffekt für dich ;)
Zeig doch hier den Code, wo du auf STREAM_1_URL zugreifen willst.
 
Code:
package de.radiomega4u.android;

import android.preference.PreferenceManager;
import android.content.Context;
import android.content.SharedPreferences;
import de.radiomega4u.audio.media.streamStation.StreamStation;

public class CONSTANTS {
	
	public static String getStreamURL(Context ctx){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx);
        return sharedPreferences.getString("Kbps", "http://88.198.143.54:10102/");
    } // Ich möchte diesen code las stream url nähmen
	
	public static final String SITE_URL				= "http://site.anonplusradio.com";
	
	public static final String STREAM_1_URL			= getStreamURL(this);// aber wenn ich das hier so lasse geht es nicht

	public static final String STREAM_1_LABEL		= "Radio-Mega4u";

	public static final StreamStation[] ALl_STATIONS =
		{
			new StreamStation(STREAM_1_LABEL, STREAM_1_URL//und hier muss das so bleiben)
		};
	public static final StreamStation DEFAULT_STREAM_STATION = ALl_STATIONS[0];
	
}
 
Ich wiederhole mich zwar ungern, aber zeig doch hier den Code, wo du auf STREAM_1_URL zugreifen willst. D.h. die Activity oder das Fragment, von der du darauf zugreifen willst.
 
Sorry wenn ich jetzt die richtung änder.
ok ich habe eine andere idee
ich habe eine class gemacht für den media player
ich möchte den Preferences abrufen zu setDataSource
ich habe in meine values die streams urls hingeschrieben
wie kann ich nun das was ich aus gewählt habe in die DataSource reinbekommen?
 
Deine Klasse "Constants" hat keinerlei Zugriff auf den Context? Woher auch? Du weißt was "this" heißt?

Und wenn die Klasse jetzt bspw. einen Konstruktor hat in dem der Context übergeben wird, dann funktioniert das dennoch nicht, da direkt beim Erzeugen eines Constants-Objekt versucht wird die StreamURL aus den SharedPRefs zu lesen.
 
ich bin hilflos.
ich habe ein player code gemacht und und kann die einstellungen nicht abrufen.
das ist der code
Code:
package de.radiomega4u.android.media.mediaplayer;

import java.io.IOException;

import android.content.Context;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.preference.PreferenceManager;
import android.util.Log;

import de.radiomega4u.audio.media.streamStation.StreamStation;

/**
 * A subclass of android.media.MediaPlayer which provides methods for
 * state-management, data-source management, etc.
 */
public class StatefulMediaPlayer extends android.media.MediaPlayer {
	
	public static void setAnyValue(Context context, String value) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        sharedPreferences.edit().putString("start", value).commit();
    }  
	/**
	 * Set of states for StatefulMediaPlayer:<br>
	 * EMPTY, CREATED, PREPARED, STARTED, PAUSED, STOPPED, ERROR
	 */
	public enum MPStates {
		EMPTY, CREATED, PREPARED, STARTED, PAUSED, STOPPED, ERROR
	}
	
	private MPStates mState;
	private StreamStation mStreamStation;
	
	/**
	 * @return the mStreamStation
	 */
	public StreamStation getStreamStation() {
		return mStreamStation;
	}

	/**
	 * Sets a StatefulMediaPlayer's data source as the provided StreamStation
	 * @param streamStation the StreamStation to set as the data source
	 */
	public void setStreamStation(StreamStation streamStation) {
		this.mStreamStation = streamStation;
		try {
			setDataSource(hier möchte ich die informationen abrufen);
			setState(MPStates.CREATED);
		}
		catch (Exception e) {
			Log.e("StatefulMediaPlayer", "");
			setState(MPStates.ERROR);
		}
	}

	/**
	 * Instantiates a StatefulMediaPlayer object.
	 */
	public StatefulMediaPlayer() {
		super();
		setState(MPStates.CREATED);
	}
	
	/**
	 * Instantiates a StatefulMediaPlayer object with the Audio Stream Type
	 * set to STREAM_MUSIC and the provided StreamStation's URL as the data source.
	 * @param streamStation The StreamStation to use as the data source
	 */
	public StatefulMediaPlayer(StreamStation streamStation) {
		super();
		this.setAudioStreamType(AudioManager.STREAM_MUSIC);
		//this.mStreamStation = streamStation;
		try {
			setDataSource(und hier genauso);
			setState(MPStates.CREATED);
		}
		catch (Exception e) {
			Log.e("statefulMediaPlayer", "");
			setState(MPStates.ERROR);
		}
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#reset()
	 */
	@Override
	public void reset() {
		super.reset();
		this.mState = MPStates.EMPTY;
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#start()
	 */
	@Override 
	public void start() {
		super.start();
		setState(MPStates.STARTED);
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#pause()
	 */
	@Override
	public void pause() {
		
		super.pause();
		setState(MPStates.PAUSED);
		
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#stop()
	 */
	@Override
	public void stop() {
		super.stop();		
		setState(MPStates.STOPPED);
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#release()
	 */
	@Override
	public void release() {
		super.release();
		setState(MPStates.EMPTY);
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#prepare()
	 */
	@Override
	public void prepare() throws IOException, IllegalStateException {
		super.prepare();
		setState(MPStates.PREPARED);
	}
	
	/* (non-Javadoc)
	 * @see android.media.MediaPlayer#prepareAsync()
	 */
	@Override
	public void prepareAsync() throws IllegalStateException {
		super.prepareAsync();
		setState(MPStates.PREPARED);
	}
	
	/**
	 * @return 
	 */
	public MPStates getState() {
		return mState;
	}
	
	/**
	 * @param state the state to set
	 */
	public void setState(MPStates state) {
		this.mState = state;
	}
	
	/**
	 * 
	 * @return
	 */
	public boolean isCreated() {
		return (mState == MPStates.CREATED);
	}
	
	public boolean isEmpty() {
		return (mState == MPStates.EMPTY);
	}
	
	public boolean isStopped() {
		return (mState == MPStates.STOPPED);
	}
	
	public boolean isStarted() {
		return (mState == MPStates.STARTED || this.isPlaying());
	}
	
	public boolean isPaused() {
		return (mState == MPStates.PAUSED);
	}
	
	public boolean isPrepared() {
		return (mState == MPStates.PREPARED);
	}
}
Könntest du mir den code bearbeiten das es geht.

Der ursprüngliche Beitrag 11.01.2014 von 23:58 Uhr wurde 12.01.2014 um 00:01 Uhr ergänzt:

kleinerkathe schrieb:
Deine Klasse "Constants" hat keinerlei Zugriff auf den Context? Woher auch? Du weißt was "this" heißt?

Und wenn die Klasse jetzt bspw. einen Konstruktor hat in dem der Context übergeben wird, dann funktioniert das dennoch nicht, da direkt beim Erzeugen eines Constants-Objekt versucht wird die StreamURL aus den SharedPRefs zu lesen.
Ich benutze die Constants nicht mehr.
ich habe mein player code grade geschrieben.
ich habe schon versucht das aus den usereinstellungen abzurufen hab aber nie erfolg.
 
Nimm den Hinweis vom kleinen Kathen ruhig zu Herzen und informier dich darüber, was ein Context ist, den du - wie schon mehrfach geschrieben - brauchst.

Wie auch schon mehrfach geschrieben, findest du den Context in deiner Activity, Fragment, Service... Da ich davon ausgehe, dass du den Code vom Service auch nur 1:1 kopierst ohne zu verstehen, dann übergib doch beim Instanziieren vom StatefulMediaPlayer noch als zusätzlichen Parameter noch den Context vom Service. Dann kannst du innerhalb vom StatefulMediaPlayer auch mit einen Context arbeiten und somit SharedPreferences auslesen. Oder übergib gleich den Wert der URL, indem du die innerhalb des Services auslesen lässt und als Parameter im Konstruktor übergibst.

Auch lustig, Code von anderen kopieren und erstmal Angaben zum Autor raus nehmen?
Creating a Streaming Audio App for Android with MediaPlayer, AudioManager and Service classes | [speaking code]
...
(Nimms mir nicht übel, aber da werd ich der Bitte den Code zu bearbeiten natürlich nicht nach kommen.)

Also die für dich relevanten Stichworte sollten sein: Context & Konstruktor.
 
freelager schrieb:
Ja wen wunderts? ;)

freelager schrieb:
ich habe ein player code gemacht und und kann die einstellungen nicht abrufen.
das ist der code
Ah schön, hast du das also gemacht ... Nur Kopieren != selber machen ;)

freelager schrieb:
Könntest du mir den code bearbeiten das es geht.
Warum wir? Du hast den Code doch gemacht, solltest also wissen was dieser macht. Ebenso wirst du dann ja auch problemlos wissen, an welcher Stelle du etwas ändern musst, damit "es geht".

freelager schrieb:
ich habe schon versucht das aus den usereinstellungen abzurufen hab aber nie erfolg.
Hmm, warum wohl nur? Weil du dir die Beiträge hier nur halbherzig durchliest, keinerlei weiterführende Links anschaust, keinen Blick in die Doku wirfst und eigentlich nur darauf aus bist fertig funktionierenden Code zu erhalten. Und noch schlimmer: Dich immer noch nicht mit den Grundlagen beschäftigt hast :)
 
  • Danke
Reaktionen: reneph
Das dieses Thema lange her ist habe ich eine komplett neue App gemacht auf eigenen Code.
Und die läuft einwandfrei.
 
Zurück
Oben Unten