Fragmente und Activitys

  • 17 Antworten
  • Neuester Beitrag
Diskutiere Fragmente und Activitys im Android App Entwicklung im Bereich Betriebssysteme & Apps.
W

WolfCH

Ambitioniertes Mitglied
Hallo Zusammen

Ich habe angefangen eine App zu programmieren die später verschiedene Seiten haben sollte. Auf der einen kommt PHP und SQL zum Einsatz, auf der anderen beispielsweise einfach ein Radarbild etc.

Dazu wäre es am einfachsten wenn ich mehrere Activitys/Seiten habe.

Doch brauch ich auch eine Navigation, hab mich für die Slidenavigation 'NavigationDrawer' entschieden und zum laufen gebracht. In der fragment_main.xml hab ich nun ein Textview welches mit Textändern angesprochen wird.

Eigentlich möchte ich mehre Layouts, Elemente etc. haben die man ansprechen kann. Jedoch wie füge ich ein neus Fragment hinzu und rufe dass dann auf?? Oder wie erstelle ich eine neue Activity, welche den gleichen Drawer benutzt (navigation) und so quasi zwischen den Activitys und Ansichten wechselt?

oder muss der ganze Ablauf von SQL, GPS usw. in der Switch-Anweiseung case1,2,3 etc. erfolgen? Finde keinen Ansatz... ich habs bisher nur geschafft je nach Auswahl der Text im "textView1" das sich wohl in der fragment_main.xml befindet, zu ändern. Mehr leider noch nicht :(


Ich würde jetzt einfach hier unter case1, case2 etc. alle Abläufe reintun, doch wie kann ich das das Fragment verändenr z.B. nicht mehr LinearLayout oder z.B. andere Listviews etc ansprechen?

Habe schon mehrere Beiträge durchgelesen aber ich checks nicht ganz...
PHP:
    public void onSectionAttached(int number) {
    	TextView textView = (TextView) findViewById(R.id.textView1);
        switch (number) {
        	case 1:
        		mTitle = getString(R.string.title_ssv);
        		textView.setText("Herzlich Willkommen");
        		break;
            case 2:
                mTitle = getString(R.string.title_about);
                textView.setText("Diese App macht was sie will!!");
                break;
            case 3:
                mTitle = getString(R.string.title_bo);
                textView.setText("Das ist Seite 2");
                break;
            case 4:
                mTitle = getString(R.string.title_spldb);
                textView.setText("Das ist Seite 3");
                break;
            case 5:
                mTitle = getString(R.string.title_splmap);
                textView.setText("Das ist Seite 4");
                break;
            case 6:
            	finish();
            	break;
        }
    }
Gruss
Dominic
 
W

WolfCH

Ambitioniertes Mitglied
HI Markus

Danke für Deine Antwort, ja dass mein Beispiel nur den Titel ändert ist mir klar.
Meine Frage dazu ist eigentlich nur, ob ich alle weitere Anweisungen wie GPS Lokalisierung etc. unter eben diesen einzelnen Switch-Anweiseungen machen kann/muss oder ob es für jeden List-Eintrag noch ein OnClickListener braucht?

Zudem finde ich nirgends wo die Textfarbe definiert wurde, denn bei mir ist die aktuell Grau statt Schwarz.
Das mit dem PHP finde ich interessant, werde ich mir mal durchlesen, auch den Link über Activitys.
 
G

Gastuser

Ambitioniertes Mitglied
Es ist ein wenig schwer deine Fragen nachzuvollziehen. Da man nicht weis was du bereits hast oder wie die Architektur deiner App ist.

Das einzige was du an Infos gepostet hast ist eine Methode zum ändern eines Textelements.

1. Hast du bereits eine Menüstruktur aus Fragments/Activitys... oder hast du hier Probleme diese aufzubauen?

2. Wieso möchtest du alles in irgendwelchen Switch Anweisungen regeln anstatt in den dafür zuständigen Klassen/Fragments/Activitys?

Allg. würde ich sowas wie "GPS", "SQL".... in eigene Klassen verschieben die das für mich managen und dann aus den einzelnen Fragments/Activitys.... die Daten nur noch abrufen.
 
Zuletzt bearbeitet:
W

WolfCH

Ambitioniertes Mitglied
Eigentlich wollte ich eine eigene Activity jeweils haben, da hier der Code dementsprechend aufwändig wird mit vielen Funktionen um den Überblick zu behalten. Also z.B. Activity 1 mit Grundinformationen, Activity 2 mit SQL und PHP Datenbanksuche und ANzeige etc.

Jetzt hab ich ein neus Projekt erstellt und vorne angefangen, ich wollte das ActionBar Menu. Einträge sind zwar da, doch diie onMenuItemSelectedFunktion funktioniert nur , wenn ich im Settings Menu obe nrechts die Einträge auswähle. Ich möchte dies aber im ActionBar.Dropdown drin haben und die Menueinträge auch nur dort aber nicht im Settings(optionsMenu)... wie krieg ich das hin?

Hab viele Tuts angeschaut, jeder sagt so geht es aber ich erhalte die Menupunkte noch immer nur über das Settingmenu.. ?
 
G

Gastuser

Ambitioniertes Mitglied
Zum Punkt:
"Activity 2 mit SQL und PHP Datenbanksuche und ANzeige etc. "

Wie gesagt, sowas lagerst du in eigene Klassen aus und regelst in der Activity am besten nur das Verhalten ( Was passieren soll, nicht wie).

Zu deinem Problem wäre natürlich Code sehr sinnvoll. Ansonsten ist es schwer zu sagen wo du einen Fehler gemacht hast.
 
W

WolfCH

Ambitioniertes Mitglied
Ja, das werd ich mir merken, also reichts quasi dann im entsprechenden Fragment die Klasse und der Funktion aufzrufen und dann die ImageViews, Textviews etc. erstellen zu lassen? ;)

Die App hat eine ActionBar, dort werden alle Menu-Items auch angezeigt.
Nur wie gesagt erscheinen diese auch im "OptionsMenu" oben rechts in der App und in der actionbar, eigentlich möchte ich die MenuItems nur in der Actionbar (Dropdown-Menu) haben und oben Rechts nur das Item "Beenden".

Aktuell ist es nun so, dass ich die Einträge bei beiden hab und die Anweisungen wenn geklickt wird (Switch) nur beim Optionmenu oben rechts passiert ansonsten nichts, also beim ActionMenu wird danne infach die Zahl 1 2 oder 3 angezeigt, anstatt die bei Optionmenu das Layout gewechselt. Und ich weiss nun leider nicht wo diese Einstellung ist, damit ich das so realisieren kann wie oben beschrieben.

Hier mal der Code:

PHP:
package com.stormchase.ssv_ufs;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MainActivity extends Activity implements ActionBar.OnNavigationListener {

    /**
     * The serialization (saved instance state) Bundle key representing the
     * current dropdown position.
     */
    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Set up the action bar to show a dropdown list.
        final ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        // Set up the dropdown list navigation in the action bar.
        actionBar.setListNavigationCallbacks(
                // Specify a SpinnerAdapter to populate the dropdown list.
                new ArrayAdapter<String>(
                        actionBar.getThemedContext(),
                        android.R.layout.simple_list_item_1,
                        android.R.id.text1,
                        new String[] {
                                getString(R.string.about_section),
                                getString(R.string.blitzortung_section),
                                getString(R.string.exit_section),
                        }),
                this);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        // Restore the previously serialized current dropdown position.
        if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
            getActionBar().setSelectedNavigationItem(
                    savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // Serialize the current dropdown position.
        outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
                getActionBar().getSelectedNavigationIndex());
    }


    @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;
    }

    //DAS HIER Sollte eigentlich im ActionMenu sein und funktioniere,
    //geht aber nur im OptionsMenu auf der rechten Seite oben... :( ??
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        /*if (id == R.id.action_settings) {
            return true;
        }*/
        switch(id) {
        case R.id.item1:
        	setContentView(R.layout.about_ssvapp);
        	return true;
        case R.id.item2:
        	setContentView(R.layout.blitzortung);
        	return true;
        case R.id.item3:
        	//App Beenden
        	finish();
        	break;
        default:
        	return super.onOptionsItemSelected(item);
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onNavigationItemSelected(int position, long id) {
        // When the given dropdown item is selected, show its contents in the
        // container view.
        getFragmentManager().beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
        return true;
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            TextView textView = (TextView) rootView.findViewById(R.id.section_label);
            textView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
            return rootView;
        }
    }

}
 
G

Gastuser

Ambitioniertes Mitglied
Weil du auch nur den Listener für die Optionen definiert hast.

Pauschal würde ich sagen, dass was du brauchst ist die

"onMenuItemSelected"-Methode

um das zu realisieren was du möchtest.

Logen ist auch immer eine schöne Möglichkeit zum raus zu finden wann er was macht :) Und wo er rein geht und wo nicht :)
 
W

WolfCH

Ambitioniertes Mitglied
Das habe ich mir auch schon gedacht mit dem onMenuItemSelected, doch wo ist der Listener definiert? Sehe ich nirgendwo ich seh zwar "OnCreateOptionsMenuItem"... aber das is ja das falsche. :)

Die Menueinträge werden auch angezeigt in der actionbar etc sind auch auswählbar aber da passiert nix, ausser dass jeweils ein fragment geladen wird und die seiten (Item.-ID) anzeigt "1, 2, 3" aber es sollte nicht das tun sondern je nachdem was geklickt wird ein anderes layout (oder gar activity) geladen werden.

Daher weiss ich nicht wo ich dieses "switch"-Teil hinpflanzen soll.. hab eltiche Dokus durch, auch mit der SlideNavigatwionDrawer von Google etc. und etliches durchprobiert aber nie das erreicht wo eigentlich sein sollte :D Werde mich nochmals umschauen, das wäre dann das dritte mal wo ich neu beginne...
 
G

Gastuser

Ambitioniertes Mitglied
Genau so wie du die "onOptionsItemSelected"-Methode überschrieben hast, kannst du auch die "onMenuItemSelected"-Methode überschreiben.
 
W

WolfCH

Ambitioniertes Mitglied
Gastuser schrieb:
Genau so wie du die "onOptionsItemSelected"-Methode überschrieben hast, kannst du auch die "onMenuItemSelected"-Methode überschreiben.
Genau so wollte ich's machen, brachte aber einen Fehler mit dem Vorschlag @Override zu entfernen. Jetzt hab ich dass immer noch im Auswahlmenu dan bei Item1 halt 1 angezeigt wird, bei Item2 die 2... und rechts im Optionenmenu ebenfalls diese drei Einträge, aber wenn ich dort klick passiert nun nichts mehr. :)

mache ich einen überlegunsfehler?
Das ganze sieht jetzt so aus:

PHP:
package com.stormchase.ssv_ufs;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MainActivity extends Activity implements ActionBar.OnNavigationListener {

    /**
     * The serialization (saved instance state) Bundle key representing the
     * current dropdown position.
     */
    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Set up the action bar to show a dropdown list.
        final ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        // Set up the dropdown list navigation in the action bar.
        actionBar.setListNavigationCallbacks(
                // Specify a SpinnerAdapter to populate the dropdown list.
                new ArrayAdapter<String>(
                        actionBar.getThemedContext(),
                        android.R.layout.simple_list_item_1,
                        android.R.id.text1,
                        new String[] {
                                getString(R.string.about_section),
                                getString(R.string.blitzortung_section),
                                getString(R.string.exit_section),
                        }),
                this);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        // Restore the previously serialized current dropdown position.
        if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
            getActionBar().setSelectedNavigationItem(
                    savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // Serialize the current dropdown position.
        outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
                getActionBar().getSelectedNavigationIndex());
    }


    @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;
    }

    //DAS HIER Sollte eigentlich im ActionMenu sein und funktioniere,
    //geht aber nur im OptionsMenu auf der rechten Seite oben... :( ??
    //@Override
    public boolean onMenuItemSelected(MenuItem item, int id) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        id = item.getItemId();
        /*if (id == R.id.action_settings) {
            return true;
        }*/
        switch(id) {
        case R.id.item1:
        	setContentView(R.layout.about_ssvapp);
        	return true;
        case R.id.item2:
        	setContentView(R.layout.blitzortung);
        	return true;
        case R.id.item3:
        	//App Beenden
        	finish();
        	break;
        default:
        	return super.onMenuItemSelected(id, item);
        }
        return super.onMenuItemSelected(id, item);
    }

    @Override
    public boolean onNavigationItemSelected(int position, long id) {
        // When the given dropdown item is selected, show its contents in the
        // container view.
        getFragmentManager().beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
        return true;
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            TextView textView = (TextView) rootView.findViewById(R.id.section_label);
            textView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
            return rootView;
        }
    }

}
 
markus.tullius

markus.tullius

Experte
Du überlädst die Methode. Tausche die Argumente (Reihenfolge), dann dürfte es mit dem @Override klappen.

setCustomView(View view) ist für den foobar keine gute Wahl.

Wenn du Fragmente im Programm austauschen möchtest, benutze besser die Klassen FragmentTransaction und FragmentManager.
Eine recht gute Anleitung zu den Thema steht hier:
Fragments | Android Developers

Und noch eine Frage, für was brauchst du PHP in deiner App?
 
W

WolfCH

Ambitioniertes Mitglied
PHP brauch ich, weil wir eine Spotterplatz-Datenbank haben in SQL und auch eine Spottermap etc, die ich so ind ie App integrieren möcht mit Suche usw. so wie hier:

SSV-UFS IG - Schweizerische Stormchaservereinigung fr Unwetterforschung und Statistik - Interessengemeinschaft - Spotterplatz DB
SSV-UFS IG - Schweizerische Stormchaservereinigung fr Unwetterforschung und Statistik - Interessengemeinschaft - Spotterplatz Map

:)

Ich werd mir das mal anschauen und durchlesen. Das mit dem tauschen hat geklappt, ist Java hier wirklich so streng mit der Reihenfolge.. (krass)
Da frag ich mir aber wie kriege ich beim Optinosmenu nur das Beenden rein das funktioniert und die anderen zwei MenuItems raus?

Also ich hab jetzt das mit dem Override, aber es passiert immer noch nicht das, was es sollte :(
Dafür in der Cationbar alles rein ?
Danke ;)
 
Zuletzt bearbeitet:
W

WolfCH

Ambitioniertes Mitglied
Ich habs nun geschafft im OptionsMenu einen Button "Beenden" hinzukriegen der auch funktioniert und mit Klick die App beendet.

Nun sollte ich noch irgendwie schaffen dass wenn im Navigationdrawer was ausgewählt wurde ein entsprechendes Layout angezeigt wird sowie weitere Aktionen wie GPS Position ausführen, ein ImageView erstellen usw..

Mache ich das in der Switch bei der Funtkion (onSectionAttached) ??
Ich habs jetzt mal in die on Create View genommen, habe keine Fehlermeldung aber da passiert auch nix:

PHP:
        //@Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState, MenuItem item) {

            int number = item.getItemId();
            if(number == 1)
            {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.section_label);
                textView.setText("About this");
                return rootView;
            }

            if(number == 2)
            {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.section_label);
                textView.setText("Blitzortung");
                return rootView;
            }

            if(number == 3)
            {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.section_label);
                textView.setText("Spotterplatz");
                return rootView;
            }

            else {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.section_label);
                textView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
                return rootView;
            }
        }
 
G

Gastuser

Ambitioniertes Mitglied
Mit welchem Tool ( Eclipse?) programmierst du den?

Wenn du anfangen würdest zu loggen könntest du dir sicher die meisten deiner Fragen selber beantworten. Dann weist du zumindest immer wann er wo rein geht etc.
Ist auch viel einfacher als man glaubt^^ ( Log.d("Tag", "Text");)

Versuch nicht alles in einer Activity zu lösen und dort ständig alles zu verändern. Schreib entsprechende Activitys die anschließend geladen werden.
Wie schon Markus schrieb ist vermutlich das was du eig. haben möchtest:
Wenn du Fragmente im Programm austauschen möchtest, benutze besser die Klassen FragmentTransaction und FragmentManager.
Eine recht gute Anleitung zu den Thema steht hier:
Fragments | Android Developers
 
Zuletzt bearbeitet:
W

WolfCH

Ambitioniertes Mitglied
Habe mit Eclipse programmiert, jedoch nun gewechselt zu AndroidStudio.
Kann ich eig. AndroidStudio erstellte Projekte mit Eclipse weiter bearbeiten ? ;)

Ich hab es nun geschafft in der vorhandenen Activity, also im Fragment (R.container.fragment_main)... die Textview entsprechend zu verändern. Ist zwar nicht gerade die elegante Art, aber wenn ich so anstatt Textview zu ändern gleich ein neues Fragment laden kann wäre das nicht schlecht.

Muss ich denn bei jedem neuen Fragment auch das Menu neu implementieren oder bleibt das immer bestehen, egal welches Fragment gealden wurde? Jedes Fragment hat doch dann auch einen eigenen Code wo man dann andere Dinge z.B. GPS Positionen usw. machen kann korrekt?

Falls ja, dann hab ich mein Ziel schon zu 70% erreicht. :)

LogCat, i know, doch die letzen zwei mal war Logcat selbst der Fehler: Couldn't load LogCat Interface... k.A. warum das war. aber nun ist sie da. :)

Danke Euch (Gastuser und Markus)
 
W

WolfCH

Ambitioniertes Mitglied
So, habe es nun geschafft ein neues Layout zu erstellen und zu laden. :)
Das funktioniert nun ganz gut. Jedoch wird mir kein Bild im ImageView angezeigt.
Ist jetzt nur die Frage obs am URL-Code liegt oder am Fragment, muss ich hier noch was beachten ?

Der Code:

PHP:
  else if(number == 3)
            {
                //Rufe neues Layout auf
                View boView = inflater.inflate(R.layout.fragment_bo, container, false);
                //TextView initalisiern und Text setzen
                TextView textViewBo = (TextView) boView.findViewById(R.id.bo_text);
                textViewBo.setText("Aktuelle Blitzdaten");
                //ImageView initalisieren und Bild aus Blitzortung laden (BETA)
                ImageView myIv = (ImageView) boView.findViewById(R.id.imageBo);
                URL url;
                try {
                    url = new URL("http://www.ssv-ufs.ch/images/logo.png");
                    Object content;
                    content = url.getContent();
                    InputStream is = (InputStream) content;
                    Drawable image = Drawable.createFromStream(is, "src");
                    myIv.setImageDrawable(image);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //Variable Return
                return boView;
                //textView.setText("Blitzortung");
            }
Fehlermeldungen keine.
Logat:
04-15 07:31:45.660 932-932/com.stormchase.ssv_ufsig.ch D/dalvikvm GC_FOR_ALLOC freed 188K, 6% free 4573K/4828K, paused 28ms, total 34ms
04-15 07:31:45.710 932-932/com.stormchase.ssv_ufsig.ch W/System.err android.os.NetworkOnMainThreadException
04-15 07:31:45.710 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
04-15 07:31:45.710 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
04-15 07:31:45.710 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
04-15 07:31:45.720 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.net.InetAddress.getAllByName(InetAddress.java:214)
04-15 07:31:45.720 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
04-15 07:31:45.720 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
04-15 07:31:45.720 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
04-15 07:31:45.720 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.net.URLConnection.getContent(URLConnection.java:190)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.net.URL.getContent(URL.java:455)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.stormchase.ssv_ufsig.ch.MainActivity$PlaceholderFragment.onCreateView(MainActivity.java:198)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.Fragment.performCreateView(Fragment.java:1700)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.BackStackRecord.run(BackStackRecord.java:684)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.os.Handler.handleCallback(Handler.java:733)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.os.Handler.dispatchMessage(Handler.java:95)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.os.Looper.loop(Looper.java:136)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at android.app.ActivityThread.main(ActivityThread.java:5017)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.lang.reflect.Method.invokeNative(Native Method)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at java.lang.reflect.Method.invoke(Method.java:515)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch W/System.err at dalvik.system.NativeStart.main(Native Method)
04-15 07:31:45.730 932-932/com.stormchase.ssv_ufsig.ch I/Choreographer Skipped 65 frames! The application may be doing too much work on its main thread.
Weiss hier jemand Rat? Sieht nach der URL-Funktion aus, dass hier was nicht in Ordnung ist. Habe dies aus dem Internet von einem Beispiel/Tutorial genommen.
 
Zuletzt bearbeitet:
markus.tullius

markus.tullius

Experte
NetworkOnMainThreadException. Dieser Exception wird geworfen, wenn du eine Netzwerkoperation im UI-Thread ausführst.

Du solltest die Netzwerkoperation in ein Thread oder AsyncTask auslagern.
AsyncTask | Android Developers
Android Background Processing with Handlers and AsyncTask and Loaders - Tutorial

Grob gesagt:
Code:
[COLOR=#000000][COLOR=#0000BB]
URL url[/COLOR][COLOR=#007700];
try {
[/COLOR][COLOR=#0000BB]url [/COLOR][COLOR=#007700]= new [/COLOR][COLOR=#0000BB]URL[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"http://www.ssv-ufs.ch/images/logo.png"[/COLOR][COLOR=#007700]);
[/COLOR][COLOR=#0000BB]Object content[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]content [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]url[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]getContent[/COLOR][COLOR=#007700]();
[/COLOR][COLOR=#0000BB]InputStream is [/COLOR][COLOR=#007700]= ([/COLOR][COLOR=#0000BB]InputStream[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]content[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000BB]Drawable image [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Drawable[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]createFromStream[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]is[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"src"[/COLOR][COLOR=#007700]);
               [/COLOR][COLOR=#007700]
} catch ([/COLOR][COLOR=#0000BB]Exception e[/COLOR][COLOR=#007700]) {
  [/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]printStackTrace[/COLOR][COLOR=#007700]();
}[/COLOR][/COLOR]
sollte in die in doInBackground() Methode.

Code:
[COLOR=#000000][COLOR=#0000BB]myIv[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]setImageDrawable[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]image[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
in die onPostExecute() - Methode.



Denke, dass hat sich erledigt. :) https://www.android-hilfe.de/forum/android-app-entwicklung.9/img-von-url-in-imageview.525446.html
 
Zuletzt bearbeitet:
Ähnliche Themen - Fragmente und Activitys Antworten Datum
1
2