2013-06-15 3 views
3

이미지 뷰를 URL로 설정하려고합니다.안드로이드 - 이미지 뷰를 URL로 설정

다음은 내 코드

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.getpic); 
    ImageView i = (ImageView)findViewById(R.id.ivget); 

    URL url; 
    try { 

     url = new URL("http://0-media-cdn.foolz.us/ffuuka/board/sp/thumb/1359/41/1359419073599s.jpg"); 
     Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
     i.setImageBitmap(image); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

입니다하지만 열려고 할 때마다 /이 작업을하는 이유 밤은이 충돌 응용 프로그램을 실행?

06-15 00:37:20.977: E/AndroidRuntime(8579): FATAL EXCEPTION: main 
06-15 00:37:20.977: E/AndroidRuntime(8579): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.OptimusApps.stayhealthy/com.OptimusApps.stayhealthy.Practice2}: java.lang.NullPointerException 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1993) 
06-15 00:37:20.977: E/AndroidRuntime(8579): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.ActivityThread.access$600(ActivityThread.java:132) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.os.Looper.loop(Looper.java:137) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.ActivityThread.main(ActivityThread.java:4575) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at dalvik.system.NativeStart.main(Native Method) 
06-15 00:37:20.977: E/AndroidRuntime(8579): Caused by: java.lang.NullPointerException 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.Activity.findViewById(Activity.java:1794) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at com.OptimusApps.stayhealthy.Practice2.<init>(Practice2.java:17) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at java.lang.Class.newInstanceImpl(Native Method) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at java.lang.Class.newInstance(Class.java:1319) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1984) 
06-15 00:37:20.977: E/AndroidRuntime(8579):  ... 11 more 

위의 logcat은 어디에서 오류가 발생했는지 확신 할 수 없지만 .......................... .................................................. .................................................. ................................

+0

당신은 AsyncTask를 사용하고 있습니까? 스택 추적을 게시 하시겠습니까? – Raghunandan

+0

여기에 logcat 오류가 포함되어 있습니다 – Rahul

+0

전체 코드가 포함 된보기 중 하나가 초기화되지 않았습니다. – Raghunandan

답변

11

주 UI 스레드에서 네트워크 관련 작업을해서는 안됩니다.

활동에 설정된 현재 뷰 계층 구조의 뷰 프레임 ID를 찾을 수 있습니다. ivget.xml에 이미지 뷰가 있는지 확인하십시오. 또한 아래와 같이 asynctask를 사용하여 http get 요청을 만들어 이미지를 얻습니다.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="173dp" 
     android:src="@drawable/ic_launcher" /> 

</RelativeLayout> 

MainActivity.java

public class AndroidCustomGalleryActivity extends Activity { 
ImageView iv; 
Bitmap image ; 
ProgressDialog pd; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv = (ImageView) findViewById(R.id.imageView1); 
    pd = new ProgressDialog(this); 
    pd.setMessage("Loading.."); 
    new TheTask().execute();  
} 
class TheTask extends AsyncTask<Void,Void,Void> 
{ 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pd.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     try 
     { 
     //URL url = new URL("http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png"); 


     image = downloadBitmap("http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png"); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     pd.dismiss(); 
     if(image!=null) 
     { 
      iv.setImageBitmap(image); 
     } 

    } 
} 
private Bitmap downloadBitmap(String url) { 
    // initilize the default HTTP client object 
    final DefaultHttpClient client = new DefaultHttpClient(); 

    //forming a HttoGet request 
    final HttpGet getRequest = new HttpGet(url); 
    try { 

     HttpResponse response = client.execute(getRequest); 

     //check 200 OK for success 
     final int statusCode = response.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      Log.w("ImageDownloader", "Error " + statusCode + 
        " while retrieving bitmap from " + url); 
      return null; 

     } 

     final HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      InputStream inputStream = null; 
      try { 
       // getting contents from the stream 
       inputStream = entity.getContent(); 

       // decoding stream data back into image Bitmap that android understands 
       image = BitmapFactory.decodeStream(inputStream); 


      } finally { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       entity.consumeContent(); 
      } 
     } 
    } catch (Exception e) { 
     // You Could provide a more explicit error message for IOException 
     getRequest.abort(); 
     Log.e("ImageDownloader", "Something went wrong while" + 
       " retrieving bitmap from " + url + e.toString()); 
    } 

    return image; 
} 
} 

enter image description here

0
android.app.Activity.findViewById(Activity.java:1794) 

=> ImageView를 초기화하지 않았다고합니다. 즉 코드에서 "i".

ImageView i = (ImageView) findViewById(R.id.myImageViewInXML); 
+0

나는 그것을 oncreate에 추가했다. 여전히 작동하지 않는다. – user222786

+0

@ user222786 웹에서 이미지를 가져 와서 ImageView로 설정하는 코드를 작성한 곳이 어디 일까? –

+0

내 업데이트 된 코드를 확인하십시오 – user222786

관련 문제