簡體   English   中英

從流中讀取圖像后,我的android應用程序停止

[英]my android application stop after reading an image from stream

private void GetUserImage() {
    try {
        imguser=(ImageView)findViewById(R.id.imguser);
        String imageUrl= "http://10.0.2.2:8080/Clibrary/biss.jpg";
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
        imguser.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

當嘗試執行此代碼時,我的應用程序停止工作並返回此錯誤:

FATAL EXCEPTION: main
Process: com.bassem.donateme, PID: 17076                                                                      java.lang.RuntimeException: Unable to start activity    ComponentInfo{com.bassem.donateme/com.bassem.donateme.profile}: android.os.NetworkOnMainThreadException
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
 at android.app.ActivityThread.-wrap11(ActivityThread.java)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
   Caused by: android.os.NetworkOnMainThreadException
   at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
   at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249)
   at libcore.io.IoBridge.recvfrom(IoBridge.java:549)
   at java.net.PlainSocketImpl.read(PlainSocketImpl.java:481)
   at java.net.PlainSocketImpl.-wrap0(PlainSocketImpl.java)
   at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
   at com.android.okhttp.okio.Okio$2.read(Okio.java:135)
   at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
   at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
   at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
   at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
   at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
   at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
   at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:904)
   at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:788)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:439)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaders(HttpURLConnectionImpl.java:150)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:194)
   at java.net.URLConnection.getContentType(URLConnection.java:325)
   at java.net.URLConnection.getContent(URLConnection.java:193)
   at java.net.URL.getContent(URL.java:455)
   at com.bassem.donateme.profile.GetUserImage(profile.java:62)
   at com.bassem.donateme.profile.onCreate(profile.java:39)
   at android.app.Activity.performCreate(Activity.java:6237)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
   at android.app.ActivityThread.-wrap11(ActivityThread.java) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:148) 
   at android.app.ActivityThread.main(ActivityThread.java:5417) 
   at java.lang.reflect.Method.invoke(Native Method)

這是因為您試圖在主線程上進行網絡操作。 要解決此問題,請使用AsyncTask加載圖像。 考慮對后台線程進行所有繁重的操作。

 private void GetUserImage() {

            imguser=(ImageView)findViewById(R.id.imguser);
            new AsyncTask<Void, Void, Bitmap>() {

                @Override
                protected Bitmap doInBackground(Void... params) {
                    Bitmap bitmap = null;
                    try {
                        String imageUrl = "http://10.0.2.2:8080/Clibrary/biss.jpg";
                      bitmap=  BitmapFactory.decodeStream((InputStream) new URL(imageUrl).getContent());
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } 
                    return bitmap;
                }

                @Override
                protected void onPostExecute(Bitmap bitmap) {
                    super.onPostExecute(bitmap);
                    imguser.setImageBitmap(bitmap);
                }
            }.execute();

        } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM