hallo Lucas,
danke für deine Antwort.
hmm.. ok. Nehmen wir an ich habe die xml-datei auf die sd-card runtergeladen und gespeichert. welche möglichkeiten gibt es, diese xml-datein am effizientesten auszulesen?
hallo Lucas,
danke für deine Antwort.
hmm.. ok. Nehmen wir an ich habe die xml-datei auf die sd-card runtergeladen und gespeichert. welche möglichkeiten gibt es, diese xml-datein am effizientesten auszulesen?
keiner eine idee?? geht das denn überhaupt?
Gibt es eine Möglichkeit, die parameter eines xml-files online abzufragen? die aktion soll nach einem button-klick erfolgen.
z.B. bei diesem link
http://open.mapquestapi.com/xapi/api/0.6/way%5Blanduse=residential%5D%5Bbbox=9.95194,52.1525,9.95722,52.15556%5D
würde ich gerne die tags wie "<tag k="landuse" v="residential"/>" abfragen, wie oft diese vorkommen oder ob sie generell vorkommen. ist das möglich? wenn ja, würde ich mich für eine anleitung sehr freuen.
danke im voraus
viele grüße
hallo drumliner,
jo danke ( wobei ich deutsche tutorials eher bevorzuge, von denen es aber sehr wenige gibt )
nein spass bei seite. ich habe mich entschieden es mit einem thread zu lösen und habe es auch geschafft. hier ist der code (falls es anderen doch zu schwer fallen sollte)
mainActivity:
public class MainActivity extends Activity {
static final String URL = "http://www.overpass-api.de/api/xapi?*[bbox=7.1,51.2,7.2,51.3]";
runnableTimeline timelineMonitor;
TextView parameter;
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parameter = (TextView)findViewById(R.id.textView_httpResult);
start = (Button)findViewById(R.id.btn_start);
}
public void getparam(View v) {
timelineMonitor = new runnableTimeline();
Thread thread = new Thread(timelineMonitor);
thread.start();
}
}
Alles anzeigen
der Thread:
public class runnableTimeline implements Runnable{
@Override
public void run() {
String fileName = "test";
String DownloadUrl = "http://www.overpass-api.de/api/xapi?*" +
"[bbox=9.95179,52.15274,9.95301,52.15346]";
try {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "/xmls");
if(dir.exists()==false) {
dir.mkdirs();
}
URL url = new URL(DownloadUrl); //you can write here any link
File file = new File(dir, fileName);
long startTime = System.currentTimeMillis();
Log.d("DownloadManager", "download begining");
Log.d("DownloadManager", "download url:" + url);
Log.d("DownloadManager", "downloaded file name:" + fileName);
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = (InputStream) ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
/* Convert the Bytes read to a String. */
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
Log.d("DownloadManager", "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec");
} catch (IOException e) {
Log.d("DownloadManager", "Error: " + e);
}
}
}
Alles anzeigen
viele grüße
Hallo drumliner,
danke für deine antwort und hilfsbereitschaft. hmm.... okeey!? was bedeutet eigentlich asyncTask oder SyncTask? brauche ich jetzt eine asyncTask UND ein Thread oder nur ein asyncTask?
Hallo Android-Developer-Community,
ich habe folgendes Problem, und zwar möchte ich per button klick einen xml-file aus dem internet downloaden. dazu habe ich ein codebeispiel aus dem stackoverflow-forum gefunden. habe davor schon andere methoden verscuht. jedoch bekomme ich immer eine NetworkOnMainThreadException-Fehlermeldung. Ich weiß leider nicht mehr weiter bzw. was ich falsch mache und bitte um Hilfe und ratschläge.
Hier ist mein jetztiger Code:
MainActivity:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.http.util.ByteArrayBuffer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
static final String URL = "http://www.overpass-api.de/api/xapi?*[bbox=7.1,51.2,7.2,51.3]";
TextView parameter;
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parameter = (TextView)findViewById(R.id.textView_httpResult);
start = (Button)findViewById(R.id.btn_start);
}
public void getparam(View v) {
String fileName = "test";
String DownloadUrl = "http://www.overpass-api.de/api/xapi?*" +
"[key=value][bbox=11.58594,52.17035,11.63298,52.18888]";
try {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "/xmls");
if(dir.exists()==false) {
dir.mkdirs();
}
URL url = new URL(DownloadUrl); //you can write here any link
File file = new File(dir, fileName);
long startTime = System.currentTimeMillis();
Log.d("DownloadManager", "download begining");
Log.d("DownloadManager", "download url:" + url);
Log.d("DownloadManager", "downloaded file name:" + fileName);
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
/* Convert the Bytes read to a String. */
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
Log.d("DownloadManager", "download ready in" +
((System.currentTimeMillis() - startTime) / 1000) + " sec");
} catch (IOException e) {
Log.d("DownloadManager", "Error: " + e);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Alles anzeigen
Main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:onClick="getparam"
android:text="GetOSMParameter" />
<TextView
android:id="@+id/textView_httpResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/btn_start"
android:layout_marginTop="48dp"
android:text=" "
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
Alles anzeigen
folgende persmissions sind festgelegt:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Weiß jmd. einen rat? wäre für jede hilfe sehr dankbar.
viele grüße
hallo,
danke für die antworten.
@lucas: irgendwie weiß ich nicht wie man"centerLocation.distanceTo()" nutzt. unter welcher klasse steht die methode? ich finde diese gar nicht.
@kogoro:
danke auch an dich. werde ich mal testen
Hallo an alle,
ich habe eine frage zum folgenden code:
VisibleRegion vr = myMap.getProjection().getVisibleRegion();
double left = vr.latLngBounds.southwest.longitude;
double top = vr.latLngBounds.northeast.latitude;
double right = vr.latLngBounds.northeast.longitude;
double bottom = vr.latLngBounds.southwest.latitude;
mit diesem code bekomme ich die latitude und longitude werte eines boundingboxes. boundingbox ist ja, falls es einige gibt, die es nicht wissen, ein bestimmter umfeld der eigenen position (vlg. bild)
[Blockierte Grafik: http://www.richardpeacock.com/sites/default/files/images/gmap_bounding.png]
meine frage ist, wie weit die spannweite des boundingboxes vom zentrum ist? also jetzt mit dem oben dargestellten code. Und eine weitere frage: wie kann man diese einstellen? z.b. boudningbox seitenlängen sollen 500m oder 300m betragen. kann mir da jmd. helfen?
danke im voraus
hey lucas de vil,
danke schonmal für deinen post und hilfsbereitschaft.
ZitatManchmal frage ich mich, ob Menschen die Logausgaben überhaupt lesen bevor sie sie irgendwo einstellen...
es tut mir wirklich sehr leid, es ist nicht so dass ich die logausgaben nicht durchlese, sondern eher das ich in meisten fällen es einfach nicht verstehe. ich google auch oft nach den fehlermeldungen, aber finde meistens keine vernünftigen lösungen.
ZitatDas Problem ist, dass du songDuration.setText() außerhalb des Handlers aufrufst und dir damit alles um die Ohren fliegt.
Du bist in der Runnable und willst auf ein View des Main Threads
zugreifen. Das geht nicht und genau das erzählt dir auch das Log.
und genau das hatte ich nicht verstanden. danke dir für aufklärung bzw. auch für deinen lösungsansatz. Es funktioniert jetzt einwandfrei. bedanke mich herzlich lucas.
PS: das mit "uiThreadHandler"-benennung habe ich mir vermerkt. danke
ich muss mich korrigieren. wenn ich die zeilen
und
nicht eingebe, arbeitet die app ohne fehler und absturz. seekbar bewegt sich auch während der wiedergabe normal. wenn ich dann nur den zeilencode
unterhalb der zeile 71 (seekbar.setProgress(currentTime)) eintrage, bekomme ich die folgende fehlermeldung:
E/AndroidRuntime(10902): FATAL EXCEPTION: Thread-33702
E/AndroidRuntime(10902): android.content.res.Resources$NotFoundException: String resource ID #0x0
E/AndroidRuntime(10902): at android.content.res.Resources.getText(Resources.java:260)
E/AndroidRuntime(10902): at android.widget.TextView.setText(TextView.java:3680)
E/AndroidRuntime(10902): at com.example.swipeview3.MainActivity$SongParameterFragment$runnableTimeline.run(MainActivity.java:311)
E/AndroidRuntime(10902): at java.lang.Thread.run(Thread.java:856)
mit dem eintrag des handlers bekomme ich die fehlermeldung die ich als 1. gepostet habe. leider habe ich bis jetzt noch keine lösung gefunden und arbeite weiter daran. wenn jmd. eine idee hat, dann bitte ich, diese mit mir zu teilen. eventuell ist das keine große sache aber es fordert für mich viel zeit. danke im voraus.
Hi Titus,
danke für deinen Post. Hmm... ja du hast recht. Mit dem Handler habe ich das allerdings auch versucht (siehe im code unter songDuration.setText(..) steht handler.postDelayed(timelineMonitor,100); welches auskommentiert ist. mit dem Handler bekomme ich jedoch genau die gleiche fehlermeldung
Hallo hilfsbereite Community,
ich bin es mal wieder. Ich beschäftige mich immernoch mit spiweview bzw. fragments. Momentan habe ich folgendes Problem: Ich habe eine schlichte app geschrieben, womit man ein sounddatei mittels play-buttons abspielen lässt. die app hat eine swipe-view, das heißt, eine sichtweise wo sich die buttons befinden (play,stop,exit) und eine andere sichtweise, wo die metadaten von der sounddatein also sprich song-interpreter, song-name, song-dauer, song-cover etc. wiedergegeben werden. zwischen diesen sichtweisen kann man wechselns indem man den aktuellen layout festhält und nach rechts oder links zieht (sollte eigentlich klar sein). Ergänzung: die sichtweise wo die metadaten angezeigt werden beinhaltet noch eine seekbar, welches sich bewegt, wenn ein song abgespielt wird.
wie weit bin ich?
momentan kann ich die sounds abspielen und alle metadaten werden angezeigt. ohne fehlermeldungen etc. auch die seekbar funzt soweit ganz gut.
was möchte ich?
ich möchte nun die parameter current_Time (aktuelle zeit/stelle des songs) und current_Duration (gesamtzeit des songs) angeben.
und zwar sobald auf play gedrückt wird und der song abgespielt wird bis zum ende des songs, soll die zeiten angezeigt werden, wobei current_time jede sekunde halt hochgezählt werden soll
wo liegt das problem?
ich weiß es leider nicht
ich habe ein anderes projekt wo ich keine spwipe-view bzw. fragments nutze und dort funktioniert alles wunderbar.
hier sind die codes bzw. fehlermeldungen:
public static class SongParameterFragment extends Fragment implements FragmentCommunicator {
public SeekBar seekBar;
SeekbarHelper seekBarHelper;
private String activityAssignedValue ="";
static int fragmentNR;
public ImageView cover;
public TextView songParameter, songDuration;
runnableTimeline timelineMonitor;
private final Handler handler = new Handler();
public SongParameterFragment(int position) {
this.fragmentNR = position;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(com.example.swipeview3.R.layout.song_parameters, container, false);
cover = (ImageView)v.findViewById(com.example.swipeview3.R.id.imageView1);
songParameter = (TextView)v.findViewById(com.example.swipeview3.R.id.textView_SongParameter);
songDuration = (TextView)v.findViewById(com.example.swipeview3.R.id.textView_SongDuration);
seekBar = (SeekBar)v.findViewById(com.example.swipeview3.R.id.seekBar);
seekBar.setOnSeekBarChangeListener(seekBarChangeListener);
timelineMonitor = new runnableTimeline();
Thread thread = new Thread(timelineMonitor);
thread.start();
return v;
}
SeekBar.OnSeekBarChangeListener seekBarChangeListener = 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) {
if(fromUser){
if(MainActivity.mp != null){
int totalDuration = MainActivity.mp.getDuration();
int currentDuration = totalDuration * progress/100;
MainActivity.mp.seekTo(currentDuration);
}
}
}
};
private class runnableTimeline implements Runnable{
@Override
public void run() {
while(true){
if(MainActivity.mp != null){
int totalDuration = MainActivity.mp.getDuration();
int currentDuration = MainActivity.mp.getCurrentPosition();
int currentTime = (int)(100 * currentDuration/totalDuration);
seekBar.setProgress(currentTime);
// Displaying Total Duration time
songDuration.setText("" + currentDuration + " / "
+ totalDuration);
// handler.postDelayed(timelineMonitor, 100);
}
else {
seekBar.setProgress(0);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
@Override
public void passDataToFragment(String someValue) {
activityAssignedValue = someValue;
songParameter.setText(someValue);
}
}
}
Alles anzeigen
Fehlermeldung:
02-05 09:50:59.718: V/MediaPlayer(28056): getDuration
02-05 09:50:59.718: V/MediaPlayer-JNI(28056): getDuration: 106318 (msec)
02-05 09:50:59.718: V/MediaPlayer-JNI(28056): getCurrentPosition: 340 (msec)
02-05 09:50:59.718: W/dalvikvm(28056): threadid=11: thread exiting with uncaught exception (group=0x40c571f8)
02-05 09:50:59.733: E/AndroidRuntime(28056): FATAL EXCEPTION: Thread-32670
02-05 09:50:59.733: E/AndroidRuntime(28056): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4286)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:885)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.view.View.requestLayout(View.java:12881)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.widget.TextView.checkForRelayout(TextView.java:7184)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.widget.TextView.setText(TextView.java:3513)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.widget.TextView.setText(TextView.java:3369)
02-05 09:50:59.733: E/AndroidRuntime(28056): at android.widget.TextView.setText(TextView.java:3344)
02-05 09:50:59.733: E/AndroidRuntime(28056): at com.example.swipeview3.MainActivity$SongParameterFragment$runnableTimeline.run(MainActivity.java:308)
02-05 09:50:59.733: E/AndroidRuntime(28056): at java.lang.Thread.run(Thread.java:856)
Alles anzeigen
current_time und -duration müssen natürlich noch dementsrpechend für eine vernünftige zeitangabe umgerechnet werden, das weiß ich. es geht lediglich darum, dass, wenn ich sobald songDuration.setText("" + currentDuration + " / " + totalDuration); in die
runnableTimeline-klasse eingebe diese fehlermeldung bekomme. das passiert nachdem ich auf den play-button klicke. die musik wird zwwar abgespielt, aber die app friert ein und stürzt letztendlich ab. nehme ich diese raus, wird zwar keine duration angezeigt, aber die app funktioniert wenigstens dann ohne fehlermeldung und absturz. aus der fehlermeldung werde ich auch nicht schlau. hat jmd. eine idee oder ratschlag woran das liegen könnte oder wie man das realisieren kann? würde mich für jede hilfe sehr freuen. danke im voraus
ok hat sich geklärt. habe ein neues projekt erstellt und alles von neu eingegeben. keine ahnung warum es vorher nicht ging... es geht jetzt
hey lucas de vil,
danke für deinen post.
ZitatImmerhin wirft dir das Setzen der DataSource die erste Exception: IllegalArgumentException
ja das ist mir auch aufgefallen. aber wie gesagt, ich habe haar genau das gleiche project wo es funzt und hier gehts warum auch immer nicht. voll asi. (sry wegen der ausdrucksweise)
ich werde es weiterhin versuchen.
Hallo community,
ich hatte hier ein thread mit der überschrift "fragment interface instanziieren" erstellt. Dort wurde mir geholfen (danke an antifish ;), wie ich zwischen 2 fragmenten kommuniziere. ich habe dahr ein projekt "Musikplayer" erstellt, wo ich auch 2 fragmente nutze und zwischen diesen mittels swiping wechsele. Fragment A beinhaltet 3 buttons (play/stop/exit) und Fragment B eine imageView sowie 2 Textviews. Wenn auf play gedrückt wird, so wird die musik abgespielt. wechselt man zu Fragment B so wird dort der cover, sängername, songname und andere details vom song angezeigt. Die parameter wird mit hilfe von MediaMetadataRetriever extrahiert. Das funktioniert auch super gut ohne jegliche fehlermeldungen. Nun wollte ich sowas mit googlemaps v2 verbinden. also ein fragment mit einer karte und einem button und ein fragment, welches der fragment B vom projekt "Musikplayer" entspricht. wird auf den knopf gedrückt, so soll halt die musik abgespielt und die metadaten vom song angezigt werden. um das umzusetzten bin ich genauso vorgegangen wie beim "Musikplayer". Karte anzeigen etc. kein problem. sobald ich die codes vom "Musikplayer" in diesem neuen projekt übernehme und auf den klicke, bekomme ich aus heiterem himmel diese fehlermeldung:
01-31 10:21:24.140: D/dalvikvm(30058): GC_FOR_ALLOC freed 175K, 4% free 10994K/11335K, paused 19ms
01-31 10:21:24.140: I/dalvikvm-heap(30058): Grow heap (frag case) to 11.812MB for 1048592-byte allocation
01-31 10:21:24.260: D/dalvikvm(30058): GC_CONCURRENT freed 5K, 4% free 12013K/12423K, paused 1ms+3ms
01-31 10:21:24.395: D/dalvikvm(30058): GC_FOR_ALLOC freed 1130K, 12% free 10999K/12423K, paused 54ms
01-31 10:21:24.395: I/dalvikvm-heap(30058): Grow heap (frag case) to 11.817MB for 1048592-byte allocation
01-31 10:21:24.445: D/dalvikvm(30058): GC_CONCURRENT freed <1K, 4% free 12023K/12423K, paused 1ms+1ms
01-31 10:21:24.555: D/dalvikvm(30058): GC_FOR_ALLOC freed 1115K, 12% free 11020K/12423K, paused 19ms
01-31 10:21:24.555: I/dalvikvm-heap(30058): Grow heap (frag case) to 11.836MB for 1048592-byte allocation
01-31 10:21:24.590: D/dalvikvm(30058): GC_CONCURRENT freed <1K, 4% free 12043K/12423K, paused 2ms+2ms
01-31 10:21:24.645: D/dalvikvm(30058): GC_FOR_ALLOC freed 1137K, 12% free 11031K/12423K, paused 16ms
01-31 10:21:24.645: I/dalvikvm-heap(30058): Grow heap (frag case) to 11.848MB for 1048592-byte allocation
01-31 10:21:24.670: D/dalvikvm(30058): GC_CONCURRENT freed <1K, 3% free 12055K/12423K, paused 1ms+1ms
01-31 10:21:26.310: D/CLIPBOARD(30058): Hide Clipboard dialog at Starting input: finished by someone else... !
01-31 10:21:28.350: V/MediaPlayer-JNI(30058): native_setup
01-31 10:21:28.350: V/MediaPlayer(30058): constructor
01-31 10:21:28.360: V/MediaPlayer(30058): setListener
01-31 10:21:28.360: V/MediaPlayer-JNI(30058): setDataSourceFD: fd 100
01-31 10:21:28.360: V/MediaPlayer(30058): setDataSource(100, 2425, 4397138)
01-31 10:21:28.425: V/MediaPlayer(30058): setVideoSurfaceTexture
01-31 10:21:28.430: V/MediaPlayer(30058): prepare
01-31 10:21:28.435: V/MediaPlayer(30058): message received msg=5, ext1=0, ext2=0
01-31 10:21:28.435: V/MediaPlayer(30058): New video size 0 x 0
01-31 10:21:28.435: V/MediaPlayer(30058): callback application
01-31 10:21:28.435: V/MediaPlayer(30058): back from callback
01-31 10:21:28.435: V/MediaPlayer(30058): message received msg=1, ext1=0, ext2=0
01-31 10:21:28.435: V/MediaPlayer(30058): prepared
01-31 10:21:28.435: V/MediaPlayer(30058): signal application thread
01-31 10:21:28.435: V/MediaPlayer(30058): callback application
01-31 10:21:28.435: V/MediaPlayer(30058): back from callback
01-31 10:21:28.435: V/MediaPlayer(30058): prepare complete - status=0
01-31 10:21:28.435: V/MediaPlayer-JNI(30058): start
01-31 10:21:28.435: V/MediaPlayer(30058): start
01-31 10:21:28.445: D/AndroidRuntime(30058): Shutting down VM
01-31 10:21:28.445: W/dalvikvm(30058): threadid=1: thread exiting with uncaught exception (group=0x40c571f8)
01-31 10:21:28.460: E/AndroidRuntime(30058): FATAL EXCEPTION: main
01-31 10:21:28.460: E/AndroidRuntime(30058): java.lang.IllegalStateException: Could not execute method of the activity
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.view.View$1.onClick(View.java:3100)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.view.View.performClick(View.java:3627)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.view.View$PerformClick.run(View.java:14329)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.os.Handler.handleCallback(Handler.java:605)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.os.Handler.dispatchMessage(Handler.java:92)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.os.Looper.loop(Looper.java:137)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.app.ActivityThread.main(ActivityThread.java:4511)
01-31 10:21:28.460: E/AndroidRuntime(30058): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 10:21:28.460: E/AndroidRuntime(30058): at java.lang.reflect.Method.invoke(Method.java:511)
01-31 10:21:28.460: E/AndroidRuntime(30058): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
01-31 10:21:28.460: E/AndroidRuntime(30058): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
01-31 10:21:28.460: E/AndroidRuntime(30058): at dalvik.system.NativeStart.main(Native Method)
01-31 10:21:28.460: E/AndroidRuntime(30058): Caused by: java.lang.reflect.InvocationTargetException
01-31 10:21:28.460: E/AndroidRuntime(30058): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 10:21:28.460: E/AndroidRuntime(30058): at java.lang.reflect.Method.invoke(Method.java:511)
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.view.View$1.onClick(View.java:3095)
01-31 10:21:28.460: E/AndroidRuntime(30058): ... 11 more
01-31 10:21:28.460: E/AndroidRuntime(30058): Caused by: java.lang.IllegalArgumentException
01-31 10:21:28.460: E/AndroidRuntime(30058): at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:147)
01-31 10:21:28.460: E/AndroidRuntime(30058): at com.example.googlemapsv2.MainActivity.loadMp3DataFile(MainActivity.java:138)
01-31 10:21:28.460: E/AndroidRuntime(30058): at com.example.googlemapsv2.MainActivity.StartProcess(MainActivity.java:87)
01-31 10:21:28.460: E/AndroidRuntime(30058): ... 14 more
01-31 10:21:55.515: I/Process(30058): Sending signal. PID: 30058 SIG: 9
Alles anzeigen
die musik wird im hintergrund zwar abgespielt, aber die app stürzt ab. woran liegt das? habe auch schon fast alles auskommentiert in der fragmentactivity, sodass nur noch die codes drinne stehen, die für das abspielen und anzeigen der metadaten erforderlich sind (also wie im projekt "Musikplayer"). und trotzdem diese fehlermeldung. hänge seit gestern mittag dran ohne erfolg. wäre für ratschläge sehr dankbar.
hallo antifish
danke für deinen beitrag.
ZitatDa du das in deiner Activity onCreate ausgeführt hast (wo das GUI von
Android nocht nich instanziert ist) hast du da null zurück bekommen. Mit
dem Button funktionierts jetzt da wenn du den drückst das GUI ja da ist
ah ok, jetzt verstehe ich es
ZitatProbier mal den code aus deinem onclicklistener in die onStart() deiner Activity zu packen
jo, das werde ich versuchen ;).
ok ich habe es hinbekommen. und zwar so, dass sobald ich auf einen button "Start" klicke, der standort lokalisiert und verfolgt wird. vorher hatte ich keinen button, d.h. es sollte von selbst starten. anscheinend gab es deshalb einen nullpointerexception (keine ahnung).
so sieht die Fragmentactivity aus:
public class MainActivity extends FragmentActivity implements ActivityCommunicator, LocationListener {
SectionsPagerAdapter mySectionsPagerAdapter;
ViewPager myViewPager;
String provider;
LocationManager lm;
Map_Fragment mapFragment;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.main);
initPagerAdapter();
}
public void StartProcess(View v) {
mapFragment = (Map_Fragment)mySectionsPagerAdapter.getItem(0);
Data();
}
public void Data() {
mapFragment.mf = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.myMap = mapFragment.mf.getMap();
mapFragment.myMap.setMyLocationEnabled(true);
mapFragment.myMap.getUiSettings().setZoomControlsEnabled(true);
mapFragment.myMap.getUiSettings().setCompassEnabled(true);
mapFragment.myMap.getUiSettings().setMyLocationButtonEnabled(true);
LatLng latLng = new LatLng(19.258, 40.587);
mapFragment.myMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mapFragment.myMap.animateCamera(CameraUpdateFactory.zoomTo(17));
}
....
Alles anzeigen
die StartProcess-methode ist vom Button die Onklickmethode.
viele grüße
hi lucas,
also ich hab das so versucht:
hier die FragmentActivity:
public class MainActivity extends FragmentActivity implements ActivityCommunicator {
SectionsPagerAdapter mySectionsPagerAdapter;
ViewPager myViewPager;
LocationManager lm;
public SupportMapFragment mf;
Map_Fragment mapFragment;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.main);
initPagerAdapter();
mf = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.myMap = mf.getMap();
mapFragment.myMap.setMyLocationEnabled(true);
mapFragment.myMap.getUiSettings().setZoomControlsEnabled(true);
mapFragment.myMap.getUiSettings().setCompassEnabled(true);
mapFragment.myMap.getUiSettings().setMyLocationButtonEnabled(true);
}
private void initPagerAdapter() {
mySectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
myViewPager = (ViewPager)findViewById(R.id.pager);
myViewPager.setAdapter(mySectionsPagerAdapter);
}
@Override
public void passDataToActivity(String someValue) {
// TODO Auto-generated method stub
}
}
Alles anzeigen
FragmentPagerAdapter:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private Map_Fragment f1;
private Details_Fragment f2;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if(position == 0) {
if (f1 == null) {
f1 = new Map_Fragment(position);
}
return f1;
}
else {
if (f2 == null) {
f2 = new Details_Fragment(position);
}
return f2;
}
}
@Override
public int getCount() {
// Show 2 total pages.
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "MapView";
case 1:
return "Location Detail";
}
return null;
}
}
Alles anzeigen
MapFragment:
public class Map_Fragment extends Fragment implements FragmentCommunicator {
TextView adresse;
public GoogleMap myMap;
MainActivity mainActivity;
public Map_Fragment(int position) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.map_fragment, container, false);
adresse = (TextView)v.findViewById(R.id.textView_adresse);
return v;
}
@Override
public void passDataToFragment(String someValue) {
// TODO Auto-generated method stub
}
}
Alles anzeigen
Wenn ich den code ausführe bekomme ich eine NullPointerException:
01-30 10:38:45.733: E/Trace(1374): error opening trace file: No such file or directory (2)
01-30 10:38:46.193: D/AndroidRuntime(1374): Shutting down VM
01-30 10:38:46.193: W/dalvikvm(1374): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-30 10:38:46.203: E/AndroidRuntime(1374): FATAL EXCEPTION: main
01-30 10:38:46.203: E/AndroidRuntime(1374): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.googlemapsv2/com.example.googlemapsv2.MainActivity}: java.lang.NullPointerException
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.os.Looper.loop(Looper.java:137)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-30 10:38:46.203: E/AndroidRuntime(1374): at java.lang.reflect.Method.invokeNative(Native Method)
01-30 10:38:46.203: E/AndroidRuntime(1374): at java.lang.reflect.Method.invoke(Method.java:511)
01-30 10:38:46.203: E/AndroidRuntime(1374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-30 10:38:46.203: E/AndroidRuntime(1374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-30 10:38:46.203: E/AndroidRuntime(1374): at dalvik.system.NativeStart.main(Native Method)
01-30 10:38:46.203: E/AndroidRuntime(1374): Caused by: java.lang.NullPointerException
01-30 10:38:46.203: E/AndroidRuntime(1374): at com.example.googlemapsv2.MainActivity.onCreate(MainActivity.java:55)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.Activity.performCreate(Activity.java:5008)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-30 10:38:46.203: E/AndroidRuntime(1374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-30 10:38:46.203: E/AndroidRuntime(1374): ... 11 more
Alles anzeigen
kann man denn mein vorhaben mit fragmenten lösen? nicht das ich umsonst meine zeit dafür verschwende.
hallo antifish,
hoffentlich hast du dich von deiner krankheit erholt. wollte mich nochmals bedanken für die hilfe.
eventuell könntest du mir nochmal einen ratschlag zu dieser fragestellung geben? der link:
http://android-developers.de/anf%C3%A4ngerfragen/googlemaps-v2-in-fragment-activity-instanziieren-4360.html
das wäre echt super korrekt
hat denn keiner eine idee oder ratschlag?