Aplicația Android se blochează de îndată ce descărc imagini

i got a little problem with downloading images from the web to my android project. Everytime i try to connect to the internet my app just keeps crashing.
Yes i added the permission to the Manifest.xml



    
    

LogCat spune acest lucru:

06-02 12:15:36.520: E/AndroidRuntime(13947): FATAL EXCEPTION: main
06-02 12:15:36.520: E/AndroidRuntime(13947): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/com.my.app.MyAppActivity}: android.os.NetworkOnMainThreadException
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.os.Looper.loop(Looper.java:137)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.lang.reflect.Method.invokeNative(Native Method)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.lang.reflect.Method.invoke(Method.java:511)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at dalvik.system.NativeStart.main(Native Method)
06-02 12:15:36.520: E/AndroidRuntime(13947): Caused by: android.os.NetworkOnMainThreadException
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.net.InetAddress.getAllByName(InetAddress.java:220)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpConnection.(HttpConnection.java:71)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpConnection.(HttpConnection.java:50)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.net.URLConnection.getContent(URLConnection.java:194)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at java.net.URL.getContent(URL.java:447)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at com.my.app.MyAppActivity.onCreate(MyAppActivity.java:25)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.Activity.performCreate(Activity.java:4465)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-02 12:15:36.520: E/AndroidRuntime(13947):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-02 12:15:36.520: E/AndroidRuntime(13947):    ... 11 more

A petrecut aproape o oră acum încercând să dau seama care este problema ...

0
adăugat autor Akram, sursa

6 răspunsuri

Ar trebui să utilizați o sarcină asincronă pentru acest lucru, acesta este un paznic sigur, astfel încât firul principal (firul ui) să nu se blocheze. Ei au pus acest lucru în loc în 3.0 sau 3.1 bolnav doar sape un post vechi pentru un expample pentru tine

Cerere HTTP POST ANDROID 4 (lucrul în 2.3) ?

Ar fi o practică foarte proastă de a merge împotriva lui Android și de a face legătura în firul principal. Ei au făcut acest lucru dintr-un motiv, cel mai probabil va fc dacă nu.

0
adăugat

trebuie să utilizați AsyncTask pentru a descărca imagini de pe server deoarece firul principal poate 't handle it.And încercați să descărcați imaginea în main thread.so NetworkOnMainThreadException occure.So descărcați imaginea în fir separat.

Vedeți acest exemplu

0
adăugat

Fiecare conținut trebuie să fie descărcat pe un fir separat ... Puteți folosi AsyncTask, Thread ...

0
adăugat

O bună practică în crearea de aplicații receptive este să vă asigurați că firul principal de interfață cu utilizatorul face o cantitate minimă de lucru. Orice activitate potențial lungă care ar putea suspenda aplicația dvs. ar trebui să fie tratată într-un fir diferit (fir de fundal). atunci când se ocupă de operațiunile de lungă durată pe firul dvs. principal pierdeți responsivness de Android appand și dacă utilizați astfel de sarcini cu operațiunea de rețea pe care le primiți android.os.NetworkOnMainThreadException Excepție aruncat la tine.

Exemple tipice de astfel de sarcini sunt operațiunile de rețea, care implică întârzieri imprevizibile. Utilizatorii vor tolera unele pauze, mai ales dacă vă oferi feedback-ul că ceva este în curs de desfășurare, dar o cerere de înghețată le dă nici un indiciu.

În acest articol , vom crea o imagine simplă Descărcător care ilustrează acest model

veți învăța diferența dintre abordări diferite și în cele din urmă trebuie să țineți cont de modul corect de a face astfel de operațiuni!

Puteți vedea și acest sim filet care se ocupă de operația de încărcare leneșă

0
adăugat

Please refer this answer

Excepția care este aruncată atunci când o aplicație încearcă să efectueze o operație de rețea pe firul principal.

Acest lucru este aruncat doar pentru aplicațiile care vizează SDK Honeycomb sau mai mare. Aplicațiile care vizează versiunile anterioare SDK au permisiunea de a face rețele în firele lor de buclă principală, dar sunt foarte descurajate. Consultați documentul Proiectare pentru receptivitate.

For more details please visit Android developer site

0
adăugat

Dacă utilizați metoda de descărcare a imaginii în formatul onCreate() se va comporta ca o operație sincronă - adică nu va reveni la control imaginea este descărcată - sunând direct va îngheța interfața de utilizator a activității dvs. Acest lucru nu este permis în Android 3.0 și mai târziu; tot codul sincron trebuie să fie înfășurat folosind o clasă AsyncTask. Utilizarea AsyncTask vă permite să efectuați sarcini de fundal într-un fir separat și apoi să returnați rezultatul într-un fir UI. În acest fel, puteți efectua operații de fundal fără a fi nevoie să vă ocupați de complexe discutarea problemelor.

Pentru a apela asincron metoda DownloadImage (), trebuie să înfășurați codul într-o subclasă a Clasa AsyncTask, așa cum se arată aici:

private class DownloadImageTask extends AsyncTask {
    protected Bitmap doInBackground(String... urls) {
        return DownloadImage(urls[0]);
    }
    protected void onPostExecute(Bitmap result) {
        ImageView img = (ImageView) findViewById(R.id.img);
        img.setImageBitmap(result);
    }
}
0
adăugat
Android dezvoltatori, România — Moldova
Android dezvoltatori, România — Moldova
27 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro iOS: @ro_ios Reguli: https://github.com/js-ro/it-telegram/blob/master/RULES.md