Hallo Lucas de Vil,
danke!
Hatte ich mal wieder was übersehen......
Dankbare Grüße, schymura
Hallo Lucas de Vil,
danke!
Hatte ich mal wieder was übersehen......
Dankbare Grüße, schymura
Hallo,
gibt es bei Listen (List java.util.List) wirklich keine insert() Methode?
Wenn ich bei der nachfolgend gezeigten Liste
an einer bestimmten Stelle ein neues Elemt einfügen will, dann habe ich bisher nur die Möglichkeit gefunden zuerst ein neues Elemnt am Ende der Liste anzuhängen, dann alle Elementinhalte von hinten anfangend um 1 Position nach hinten zu verschieben um dann endlich an der gewünschten Stelle den Wert auf den gewünschten Eintrag zu setzen. Siehe Beispiel:
String halten="Test";
AbspielListe.add(halten);
int hier_einfuegen=5;
for (int j=AbspielListe.size()-1; j > hiereinfuegen ; j--)
{
AbspielListe.set(j,AbspielListe.get(j-1).toString();
}
AbspielListe.set(hier_einfuegen,halten);
}
Gibt es eine bessere Möglichkeit, die ich vielleicht nur übersehen habe?
Erwartungsvolle Grüße, schymura
Hallo khh,
ZitatAPI 10, was ich vorher verwendet hatte ist nicht mehr installiert.
wenn du auch andere API's oder auch andere Tools haben willst, dann kannst du doch über den Android SDK Manager in der Eclipse Menüzeile dir die gewünschten Sachen herraussuchen und installieren lassen.......
Falls du alles anklicken solltest, so hat dein Rechner heute Nacht noch was zu tun........
Schöne Grüße, schymura
Hallo khh,
habe ich das richtig verstanden, du willst weiter garnichts, als mehrere LinearLayout ineinander zu schachteln, ohne dass du da irgendwas ausgeben willst?
Bei mir sieht zum Beispiel eine LinearLayout Schachtelung so (mit Inhalt) aus:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/hintergrund"
android:orientation="vertical"
tools:context=".AuswahlActivity" >
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:gravity="center_horizontal|center" >
<Button
android:id="@+id/reihenfolge_button"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="@string/auswahl_Reihenfolge" />
<Button
android:id="@+id/zufall_button"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/auswahl_Zufall" />
<Button
android:id="@+id/stoppen_button"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/auswahl_Stoppen" />
</LinearLayout>
<LinearLayout
android:id="@+id/Ebene_up_LinearLayout"
android:layout_width="fill_parent"
android:layout_height="64dip"
android:baselineAligned="false"
android:focusable="true"
android:gravity="center_vertical"
android:ignoreGravity="@+id/icon"
android:visibility="visible" >
<ImageView android:id="@+id/icon"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon" />
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/icon"
android:paddingLeft="9dip"
android:textSize="23dp" />
</LinearLayout>
<ListView
android:id="@+id/auswahl_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
Alles anzeigen
Kannst du damit was anfangen?
Schöne Grüße, schymura
Hallo Lucas de Vil,
ZitatNaja, wurscht.
Nix wurscht!
Dankbare Grüße, schymura
Hallo Lucas de Vil,
Zitatwenn man die Fehlermeldung mal googled.
die Fehlermeldung hatte ich bisher noch nicht gegoogled.
Ist aber eine sehr gute Idee, weder ich dann in Zukunft wohl auch mal machen bei solchen Überraschungen....
Dankbare Grüße, schymura
Hallo Lucas de Vil,
ja, das ist ja das Komische...
In http://developer.android.com/r….Audio.GenresColumns.html
steht unter MediaStore.Audio.GenresColumns
ZitatAlles anzeigenConstants
String NAME The name of the genre
Type: TEXT
Constants
public static final String NAME
Added in API level 1
The name of the genre
Type: TEXT
Constant Value: "name"
Nach Beschreibung also sollte anrdoid ab Version 1 das Feld name haben, es kommt jedoch, diesmal bei Wegnahme der Auskommentierzung bei MediaStore.Audio.GenresColumns.NAME die gleiche Fehlermeldung....
Zitat02-19 13:29:14.269: W/dalvikvm(1125): threadid=1: thread exiting with uncaught exception (group=0x40018578)
02-19 13:29:14.269: E/AndroidRuntime(1125): FATAL EXCEPTION: main
02-19 13:29:14.269: E/AndroidRuntime(1125): android.database.sqlite.SQLiteException: no such column: name: , while compiling: SELECT _id, name, _data, artist, album, title FROM audio ORDER BY title
02-19 13:29:14.269: E/AndroidRuntime(1125):
Schöne Grüße, schymura
Hallo Lucas de Vil,
ZitatKannst du nicht einfach die MediaStore.Audio.Media.EXTERNAL_CONTENT_URI in deine Liste packen?
Wenn ich versuche eine Liste vom Typ Cursor mit
zu mischen, dann weigert sich schon Eclipse......
Werde wohl mit 2 Listen arbeiten, eine alphabetische geordnete zum Anzeigen und Aussuchen des (eines) Starttitels und dann die andere zum Abspielen.
Kann ja dann über mehrere Möglichkeiten, etwa
mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
// oder auch einfach nur über
Integer.toString(mMediaPlayer.getDuration());
alle Daten auslesen um sie wähend des Abspielens anzuzeigen und aktualisieren.
Dankbare Grüße, schymura
Hallo block_ ,
du hast ja Recht!
Hier also der LogCat, wenn ich bei MediaStore.Audio.Genres.NAME die Auskommentierumg wegnehmne.
02-19 13:29:14.269: W/dalvikvm(1125): threadid=1: thread exiting with uncaught exception (group=0x40018578)
02-19 13:29:14.269: E/AndroidRuntime(1125): FATAL EXCEPTION: main
02-19 13:29:14.269: E/AndroidRuntime(1125): android.database.sqlite.SQLiteException: no such column: name: , while compiling: SELECT _id, name, _data, artist, album, title FROM audio ORDER BY title
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.content.ContentResolver.query(ContentResolver.java:262)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.example.mediatest.MainActivity.playAudio(MainActivity.java:197)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.example.mediatest.MainActivity.start(MainActivity.java:83)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.example.mediatest.MainActivity.access$0(MainActivity.java:76)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.example.mediatest.MainActivity$1.onClick(MainActivity.java:46)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.view.View.performClick(View.java:2485)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.view.View$PerformClick.run(View.java:9080)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.os.Handler.handleCallback(Handler.java:587)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.os.Looper.loop(Looper.java:130)
02-19 13:29:14.269: E/AndroidRuntime(1125): at android.app.ActivityThread.main(ActivityThread.java:3687)
02-19 13:29:14.269: E/AndroidRuntime(1125): at java.lang.reflect.Method.invokeNative(Native Method)
02-19 13:29:14.269: E/AndroidRuntime(1125): at java.lang.reflect.Method.invoke(Method.java:507)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
02-19 13:29:14.269: E/AndroidRuntime(1125): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
02-19 13:29:14.269: E/AndroidRuntime(1125): at dalvik.system.NativeStart.main(Native Method)
Alles anzeigen
Das Interessante (nicht verständliche) ist, dass MediaStore.Audio.Genres.Members eine Unterklasse von MediaStore.Audio.Genres ist (sein soll).
Nicht verstende Grüße, schymura
Hallo ChampS,
du hast natürlich Recht!
Ich hatte mich da von dem Großbuchstaben in die Irre führen lassen.....
Schöne Grüße, schmyura
Hallo MarcelusMaximus1012,
leider kann ich dir nichts schreiben, wie das bnei dir im englischsprachigen Menü von Eclipse genau heisst (ist bei mir deutschsprachig), aber wenn du unter Neu (New)im darauf aufspringen Untermenü den alleruntersten Punkt (bei mir Andere) öffnest, dannerhältst du wieder eine Unterauswahl, in der dann unter Android die Auswahl "Android Activity" angeboten wird.
Das wäre das, was du anscheinend sucht.
Schöne Grüße, schymura
Hallo MarcelusMaximus1012,
Zitatdas Problem ist allerdings, dass dieses @string mit angezeigt wird auf dem Textfeld im Display.
vermutlich liegt es daran, dass du beim Hintergrund des Textfeldes "@String" geschrieben hast statt "@string".
Außerdem, warum sollte man dir böse sein?
Schöne Grüße, schymura
Hallo Lucas de Vil,
danke für deine Antwort.
ZitatWenn es also ein List.shuffle() gibt und dieses verspricht, die Daten zufällig umzusortieren, dann ist List.shuffle() zu nutzen.
Gibt es, ich dachte da an
und das geht auch ganz gut, nach mehrmaligen Versuchen ist dann tatsächlich immer einen andere Reihenfolge vorhanden.
ZitatSo kannst du immer stur das erste Listitem abspielen und brauchst dich um Cursorkrams etc. nur in der Playlist-Ansicht selbst sorgen.
Leider muss ich mich wohl doch um den Cursorkrams kümmern, denn die anderen Daten (FieName, Spieldauer, etc.) sind ja über
Cursor cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,zusuchen,null,null,null);
in einem Cursor "versteckt".
Na, vielleicht geht der ja auch irgendwie zu "schütteln".
Schöne, dankbare Grüße, schymura
Hallo,
für eine eigene Musik-App, die nach einer einzustellender Spieldauer das Abspielen beendet (ich schlafe gern mit Musik ein) fehlt mir unter Anderem noch eine gute Idee, wie ich aus den "zusammengesuchten Daten" (contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null) der Musikstücke eine temporäre Liste mit den Daten zum Abspielen mit dem MediaPlayer() erzeuge, auf die dann in zufälliger Reihenfolge zugegriffen werden soll, aber so, dass wirklich "kein" Titel 2 mal gespielt wird, ehe nicht alle in Frage kommenden Stücke gespielt wurden.
Ist es gut eine Liste mit shuffle() zu bearbeiten und dann von oben nach unten abzuspielen, oder sollte man lieber mit Random() arbeiten und dann nach Start der Musikstücks dann den Eintrag aus der Liste zu löschen?
Erwartungsvolle Grüße, schymura
Hallo,
mit dem Ermitteln der Daten für einen MediaPlayer() und auch dem Abpielen der Dateien scheine ich ja klar zu kommen, aber wenn ich versuche auf die einzelnen Genres (Rock, Country, etc.) zuzugreifen habe ich jeweils einen Absturz der App.
Hier der betreffende Codeteil:
static List<String> DieListe =new ArrayList<String>();
ArrayAdapter<String> liesteadapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice,DieListe);
ListView listzumeintragen=(ListView)findViewById(R.id.listView1); // Gibts wirklich.....
DieListe.clear();
String [] zusuchen={
MediaStore.Audio.Genres._ID,
// MediaStore.Audio.Genres.NAME,
// MediaStore.Audio.GenresColumns.NAME,
MediaStore.Audio.Genres.Members.DATA,
MediaStore.Audio.Genres.Members.ARTIST,
MediaStore.Audio.Genres.Members.ALBUM,
MediaStore.Audio.Genres.Members.TITLE};
ContentResolver contentResolver = getContentResolver();
Cursor cursor=contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,zusuchen,null,null,null);
if (cursor != null)
{
cursor.moveToFirst();
String dieseAusgabe;
int dieseSpalte=cursor.getColumnIndex(MediaStore.Audio.Genres.Members.TITLE);
do
{
dieseAusgabe = cursor.getString(dieseSpalte).trim();
if (DieListe.indexOf(dieseAusgabe) < 0)
{
DieListe.add(dieseAusgabe);
}
} while (cursor.moveToNext());
listzumeintragen.setAdapter(liesteadapter);
}
Toast.makeText(this,String.valueOf(DieListe.size())+" Einträge",Toast.LENGTH_LONG).show();
Alles anzeigen
So wie oben gezeigt läuft die App ohne Fehler. Wenn aber bei einer der beiden Zeilen MediaStore.Audio.Genres.NAME oder auch MediaStore.Audio.GenresColumns.NAME die Auskommentierung weg genommen wird, so landet sie im Nivana.
Und ich wollte eingentlich auch die Genres bei der Auswahl benutzen........
Was habe ich übersehen, welchen Fehler machte ich?
Hoffnungsvolle Grüße, schymura
Hallo freemoser,
noch einen Möglichkeit, außer der von titus beschriebenen.
Wie wäre es mit einer "neuen" Liste, die du mit den Einträgen der alten füllst, jedoch in der Reihenfolge von hinten nach vorn.
Die kannst du dann dem ListView geben und die alte Liste löschen, falls du sie nicht mehr brauchst......
Schöne Grüße, schmyura
Hallo titus,
danke.
Zitatmmhh die Doku hilft:
Ja, aber diesmal sah ich den Wald vor lauter Bäumen nicht.......
Danke, jedenfalls.
Schöne, dankbare Grüße, schymura
Hallo,
nun habe ich wieder mal eine Frage:
Weshalb habe ich sehr unterschiedliche Werte bei einer mp3 Datei wenn ich die Dauer
einerseits über
und andererseits über
auslese?
Und dann auch noch die Frage, sind das Millisekunden oder welcher Art sind die Intergerwerte?
Erwartungsvolle Grüße, schmyura
Hallo MaWa,
sowas hatte ich auch schon mal. Eclipse (Juno) hat mich schon mehrfach überrascht!
Ich hab dann das ganze Projekt nur dadurch retten können, dass ich "alles neu gemacht habe".
Also ein neues Projekt erstellt in einem anderen Abreitsverzeichnis und dann, nachdem ich dann auch alle Activitys mit gleichen Namen dort neu erzeugt hatte, dann für alles (im res) und auch im im scr die Dateien geöffnet hatte und dann mit Hilfe eines anderen Editors die "alten Daten" einfach kopiert habe.
Dabei habe ich dann auch festgestellt, dass man (um Ecilpse) Fehler zu vermeiden aufpassen muss, dass man die Daten im "res" immer nur in der Editor-Ansicht (nicht Layout oder so) kopieren darf, weil sonst Fehler auftreten.
Zeitaufwand bei einem Projekt mit etwa 5 Activitys 15 Minuten.
Copy and Paste ist also nicht nur bei Doktorarbeiten gut....
Schöne Grüße, schymura
Hallo [DT]Sniper,
ZitatProblem ist nur, dass sich bei meinen layout gar nichts der bildschirmgröße anpasst
mein Fehler!
Ich hatte nicht verstanden, dass du dein Layput an die verschiedenen Bildschirmgößen anpassen willst, ich hatt nur damit gerechnet, das es immer mittig sein sollte.
Ich warte mit dir auf eine schöne Lösung!
Schöne Grüße, schymura