2012-09-14 5 views
-3

나는 URL에서 외부 이미지 뷰의 여러 가지 방법을 사용합니다. 그러나 항상 활동은 불행하게도 멈췄다. 그 이유를 아십니까? 내가 매니페스트 파일에 인터넷 perimision 있습니다. 그러나 나는 그것을 풀 수 없었다. 누구든지 나를 도울 수있다. ?URL에서 이미지보기

링크에서이 방법을 사용합니다. 내 프로젝트에서는 작동하지 않습니다. how to display external image in android?

 public class MainActivity extends Activity{ 
      ImageView imgView; 
      EditText inputUrl; 
      OnClickListener getImageBtnOnClick = new OnClickListener() { 
       public void onClick(View view) { 
        Context context = view.getContext(); 
        Editable ed = inputUrl.getText(); 
        Drawable image = ImageOperations(context,"http://www.cssnz.org/flower.jpg" ,"image.jpg"); 

        imgView = (ImageView)findViewById(R.id.i1); 
        imgView.setImageDrawable(image); 
       } 
      }; 

      public void onCreate(Bundle icicle) { 
       super.onCreate(icicle); 
       setContentView(R.layout.activity_main); 
       inputUrl = ((EditText)findViewById(R.id.imageURL)); 
       inputUrl.setSingleLine(); 
       inputUrl.setTextSize(11); 
       Button getImageButton = (Button)findViewById(R.id.getImageButton); 
       getImageButton.setOnClickListener(getImageBtnOnClick); 

      } 

      private Drawable ImageOperations(Context ctx, String url, String saveFilename) { 
       try { 
        InputStream is = (InputStream) this.fetch(url); 
        Drawable d = Drawable.createFromStream(is, "src"); 
        return d; 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
        return null; 
       } catch (IOException e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } 

      public Object fetch(String address) throws MalformedURLException,IOException { 
       URL url = new URL(address); 
       Object content = url.getContent(); 
       return content; 
      } 
     } 
    xml file 
    <LinearLayout 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" > 

     <Button 
      android:id="@+id/getImageButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="39dp" 
      android:layout_marginTop="22dp" /> 

     <ImageView 
      android:id="@+id/i1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="106dp" 
      android:src="@drawable/ic_action_search" /> 

     <EditText 
      android:id="@+id/imageURL" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ems="10" > 

      <requestFocus /> 
     </EditText> 

    </LinearLayout> 


    android.manifest 

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.externalimageview" 
     android:versionCode="1" 
     android:versionName="1.0" > 

     <uses-sdk 
      android:minSdkVersion="8" 
      android:targetSdkVersion="15" /> 
     <uses-permission android:name="android.permission.INTERNET"/> 

     <application 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
      <activity 
       android:name=".MainActivity" 
       android:label="@string/title_activity_main" > 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 
     </application> 

    </manifest> 

log cat 
09-14 19:56:31.409: W/dalvikvm(1097): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
09-14 19:56:31.459: E/AndroidRuntime(1097): FATAL EXCEPTION: main 
09-14 19:56:31.459: E/AndroidRuntime(1097): android.os.NetworkOnMainThreadException 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.net.InetAddress.getAllByName(InetAddress.java:220) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.net.URLConnection.getContent(URLConnection.java:194) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.net.URL.getContent(URL.java:447) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.example.externalimageview.MainActivity.fetch(MainActivity.java:61) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.example.externalimageview.MainActivity.ImageOperations(MainActivity.java:47) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.example.externalimageview.MainActivity.access$0(MainActivity.java:45) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.example.externalimageview.MainActivity$1.onClick(MainActivity.java:27) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.view.View.performClick(View.java:3511) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.view.View$PerformClick.run(View.java:14105) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.os.Handler.handleCallback(Handler.java:605) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.os.Looper.loop(Looper.java:137) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-14 19:56:31.459: E/AndroidRuntime(1097):  at dalvik.system.NativeStart.main(Native Method) 
+5

후 사용중인 * 실제 * 코드 후 MainActivity 파일에 코드 아래에이 문제를 해결하기 위해, 코드 아래 사용 쓸 수 있으며하십시오 * 실제 * 오류 로그. "이 튜토리얼을 사용했는데 충돌이 있습니다."우리에게 아무 것도 * 제공하지 않습니다. – Eric

+0

내가 마지막에 시도한 해결책이이 코드에 추가됩니다. 나는 여러 가지 방법으로 결과를 얻지 못했습니다. 감사합니다. – slhngndz

+0

에릭 씨를 확인해 주시겠습니까? – slhngndz

답변

0

당신은 android.os.NetworkOnMainThreadException에 직면하고있다. 이 예외는 앱이 기본 UI 스레드에서 네트워크에 액세스하는 것을 제한하기 위해 새로 도입되었습니다.

주요 사용은 앱이 사용자 상호 작용에 응답하지 않도록하는 것입니다. 네트워크가 주 스레드에서 액세스되면 메소드 실행이 완료 될 때까지 UI가 응답하지 못하도록 실제로 차단합니다. 그래서이 안드로이드를 피하기 위해이 예외가 발생합니다.

아마도 당신이해야 할 일은 Worker Thread 또는 AsyncTask을 사용하는 것입니다.

0

이미지 다운로드에 대한 비동기 작업을 사용하거나 setContentView(R.layout.activity_main);

if (android.os.Build.VERSION.SDK_INT > 9) { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
} 
+0

고맙습니다. 나에게 충분하거나 비동기 작업을 사용하면 어떤 이점이 있습니까? – slhngndz

+0

@slhngndz 위의 코드는 작동하지만 이것이 가능한 해결책이 아닌 경우 비동기 작업을 사용하십시오. –

+0

덕분에 도움이되었습니다. – slhngndz