궁금해요

돌나물

웹이미지를 어플에다가 적용하는 문제입니다.

작성자 : 돌나물 작성일 : 2016.10.20 14:33:30 댓글수 : 10 조회수 : 600

public class outside extends AsyncTask<String,Integer,Bitmap>{
    Bitmap bmimg;
    ImageView imview;

    @Override
    protected Bitmap doInBackground(String... urls) {

        try{
            URL myfile = new URL(urls[0]);
            HttpURLConnection conn = (HttpURLConnection)myfile.openConnection();
            conn.setDoInput(true);
            conn.connect();

            InputStream is = conn.getInputStream();
            bmimg = BitmapFactory.decodeStream(is);



        } catch (IOException e) {
            e.printStackTrace();
        }
        return bmimg;
    }

    @Override
    protected void onPostExecute(Bitmap img) {

        imview.setImageBitmap(bmimg);
    }
}

 

이렇게 클래스를 하나 만들어서 웹사이트 이미지를 제 어플 메인에다가 쓰려고하는데

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.ImageView.findViewById(int)' on a null object reference

 

이렇게 이미지뷰의 아이디값에서 널이 뜨는데 메인 부분에서 또는 클래스에서 어떻게 이미지뷰에 연결을 해줘야할까요?

첨부파일

  • 더 자세한 error log를 확인 해봐야 할 것 같습니다.

    stacktrace 전체를 올려주세요.

    그리고 기능 이용하실 때 이미지 업로드 버튼 우측에 있는 버튼을 클릭하면

    코드 하일라이트로 등록이 가능 합니다.

     

  •  

     

    넵 여기있습니다.

    FATAL EXCEPTION: main
                                                                           Process: com.ksh564.task.app_1, PID: 10214
                                                                           java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ksh564.task.app_1/com.ksh564.task.app_1.MainActivity_2}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.ImageView.findViewById(int)' on a null object reference
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
                                                                               at android.app.ActivityThread.access$1100(ActivityThread.java:222)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:158)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.widget.ImageView.findViewById(int)' on a null object reference
                                                                               at com.ksh564.task.app_1.outside.onPreExecute(outside.java:22)
                                                                               at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604)
                                                                               at android.os.AsyncTask.execute(AsyncTask.java:551)
                                                                               at com.ksh564.task.app_1.MainActivity_2.onCreate(MainActivity_2.java:45)
                                                                               at android.app.Activity.performCreate(Activity.java:6876)
                                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                                                                               at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:158) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:7229) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

  • ImageView 타입의 imview 필드는 존재하나 imview가 초기화 되지 않았습니다.

    초기화 되지 않은 객체에 접근하게 되면 Null Point Exception이 발생합니다.

    new 예약어 등을 통해 객체를 초기화 해주세요.

  • 답변 감사합니다.

    근데 제가 아직 클래스에 대해 이해도가 떨어져서 그러는데

    제 경우에 초기화를 메인에다가 해줘야될지 클래스 안에 초기화를 시켜주고 그 안에서

    findviewid를 적용해야 할지 헷갈립니다. 이거를 응용해서 데이터 업로드 현황을 프로그레스 바를

    이용해서 사용도 해보려고 하거든요

  • 이 블로그를 참조하면 되겠네요.

    http://ismydream.tistory.com/130

    ImageView는 생성자 인자로 전달 받아서 대입 시켜주면 됩니다.

    public outside(ImageView imageView){
        this.imview = imageView
    }

     

  • 답변감사합니다.. 고해상도 이미지는 출력이 안되는 현상이 있긴 하지만 다른 이미지는 출력이 잘되네요 .아 그리고 혹시 이미지 업로드한것에 쓰레드를 줘서 1초마다 이미지가 변환되도록 할 수도 있을까요?

  • 이미지 업로드 한 것을 1초마다 변환 되도록 한다는게 정확히 어떤 내용인지 모르겠네요.

    기능요구사항을 정확히 기재해 주시면 알려드릴 수 있는 선에서 답변 드리도록 하겠습니다.

  • 이미지를 여러개를 웹사이트를 통해 불러온 후 그 이미지를 스위치문으로 케이스마다 분류해서

     visibility값을 각각주고 1초에 한번씩 한이미지만 보이게 구현을 하고싶습니다.

  • 답변해주신 TimerTask와 Timer 그리고 Handler 를 구현해서 문제를 해결했습니다. 제가 원하는 작동을 핸들러 안에 구현하고 그다음 타이머 태스크에다가 핸들러를 넣어주고 타이머로 실행해주니까 원활하게 작동하더군요!! 답변 감사합니다 ^^

  • 댓글을 입력 하시려면 로그인 해주세요.