마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

무슨오류인지 모르겠네요

0 추천
package com.example.myapplication;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Random;
import java.util.TreeSet;

public class MainActivity extends AppCompatActivity {
    LinearLayout ll;
    ArrayList<Bitmap> lottoballs;
    Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lottoballs = new ArrayList<>();
        Resources res = getResources();
        for(int i = 0; i < 45; i++){
            int tmpId = getResources().getIdentifier(
                    "lottoball" + (i+1) , "drawable", getPackageName());

            Bitmap bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, tmpId)
                    ,70,70, true);

            lottoballs.add(bitmap);
        }
        ll = findViewById(R.id.ll);
        final LinearLayout.LayoutParams param = new LinearLayout
                .LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT
                , LinearLayout.LayoutParams.WRAP_CONTENT);

        ll.setLayoutParams(param);

        ll.setOrientation(LinearLayout.HORIZONTAL);

        bt = findViewById(R.id.bt);

        bt.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                 if(ll.getChildCount() > 0) ll.removeAllViews();
                 TreeSet<Integer> set = new TreeSet<>();
                 while(set.size() < 6){
                     int random = new Random().nextInt(45);

                     set.add(random);
                 }
                 for(Integer i:set){
                     ImageView lottoballView = new ImageView(ll.getContext());
                     lottoballView.setImageBitmap(lottoballs.get(i));
                     ll.addView(lottoballView);
                 }

            }
        });
    }

}
익명사용자 님이 2020년 3월 17일 질문

2개의 답변

0 추천
로그엔

020-03-17 23:05:32.621 2963-2963/com.example.myapplication E/Zygote: isWhitelistProcess - Process is Whitelisted
2020-03-17 23:05:32.622 2963-2963/com.example.myapplication E/Zygote: accessInfo : 1
2020-03-17 23:05:37.274 2963-2963/com.example.myapplication E/e.myapplicatio: Invalid ID 0x00000000.
2020-03-17 23:05:37.277 2963-2963/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 2963
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3092)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6986)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
        at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:768)
        at com.example.myapplication.MainActivity.onCreate(MainActivity.java:29)
        at android.app.Activity.performCreate(Activity.java:7326)
        at android.app.Activity.performCreate(Activity.java:7317)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6986)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

이렇게나와요..
익명사용자 님이 2020년 3월 17일 답변
0 추천

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
        at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:768)
        at com.example.myapplication.MainActivity.onCreate(MainActivity.java:29)

로그에 나오듯 MainActivity.java 의 29라인 수행 중 NullPointerException 이 발생했습니다.

 

첨부해주신 코드로 추측컨데. 특정 이미지 리소스를 찾지 못 하거나, 메모리 보족 등의 이유로 , BitmapFactory.decodeResource(res, tmpId) 의 반환 값이 null이 나와  createScaledBitmap 수행 중 오류가 난것으로 추정 되니 확인 해 보세요.

 

익명사용자 님이 2020년 3월 18일 답변
...