【问题标题】:ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object referenceImageView.setImageDrawable(android.graphics.drawable.Drawable)' 在空对象引用上
【发布时间】:2021-09-01 21:19:22
【问题描述】:

我在 logcr 中出现错误说“原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' ”和“在 com.example.checkdisease.CheckDisease.onCreate(CheckDisease.java:41)”我不知道如何解决。有人可以帮我吗?

TextView tv_head;
TextView info[] =new TextView[2];
CardView content;
ImageView img[] = new ImageView[7];



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    content = findViewById(R.id.cv_disease);
    img[0] = findViewById(R.id.content_disease1);
    img[1] =findViewById(R.id.content_disease2);
    info[0] = findViewById(R.id.info1);
    info[1] = findViewById(R.id.info2);
    tv_head = findViewById(R.id.tv_head);

    int max =getIntent().getIntExtra("max", 0);
    int[] c =getIntent().getIntArrayExtra("c");

    int i= 0;
    if (max == c[0]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d1));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?q=diarrhoea&oq=diarrhoea&aqs=chrome..69i57.6104j0j1&sourceid=chrome&ie=UTF-8"));
                startActivity(browserIntent);
            }
        });

        i++;
    }
    if (max == c[1]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d2));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?ei=xOeZXb3KCIX6z7sPzomcsAg&q=malaria&oq=malaria&gs_l=psy-ab.3..0i67l6j0l4.40811.43654..45013...0.2..3.187.1852.0j12......0....1..gws-wiz.....6..0i71j0i362i308i154i357j0i131.J8tK4aVih7Y&ved=0ahUKEwi9vOLF2oflAhUF_XMBHc4EB4YQ4dUDCAs&uact=5"));
                startActivity(browserIntent);
            }
        });

        i++;
    }
    if (max == c[2]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d3));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?ei=8ueZXf3XGcOzmge416SoBw&q=typhoid&oq=typhoid&gs_l=psy-ab.3..0i67l4j0j0i67l2j0l3.17165.19407..19806...0.2..3.188.1796.0j12......0....1..gws-wiz.....6..0i71j0i362i308i154i357j0i131i67.gApJs810Cpo&ved=0ahUKEwj9mOvb2oflAhXDmeYKHbgrCXUQ4dUDCAs&uact=5"));
                startActivity(browserIntent);
            }
        });

        i++;
    }
    if (max == c[3]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d4));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?ei=B-iZXbSsB9PUz7sPnM6iUA&q=diabetes&oq=diabetes&gs_l=psy-ab.3..0i67l3j0j0i67j0l5.20518.23074..23777...0.2..3.199.1955.0j13......0....1..gws-wiz.....6..0i71j0i362i308i154i357j0i131j0i10i67.xxtksmH4CzM&ved=0ahUKEwj0y9rl2oflAhVT6nMBHRynCAoQ4dUDCAs&uact=5"));
                startActivity(browserIntent);
            }
        });

        i++;
    }
    if (max == c[4]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d5));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?biw=1536&bih=754&ei=z-iZXdi1GJOf9QPDubbICg&q=blood+pressure+precautions&oq=blood+pressure+precautions&gs_l=psy-ab.3..0i67j0l2j0i22i30l7.4084.4084..4335...0.1..0.157.157.0j1....1..0....1..gws-wiz.......0i71.XK6RSKLBd1o&ved=0ahUKEwiY2ZrF24flAhWTT30KHcOcDakQ4dUDCAs&uact=5"));
                startActivity(browserIntent);
            }
        });

        i++;
    }
    if (max == c[5]) {
        img[i].setImageDrawable(getResources().getDrawable(R.drawable.d6));

        info[i].setVisibility(View.VISIBLE);
        info[i].setMovementMethod(LinkMovementMethod.getInstance());
        info[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse("https://www.google.com/search?ei=juiZXaKeF4ne9QPZm6voDQ&q=heart+disease&oq=heart+diseas&gs_l=psy-ab.3.0.0l10.21631.27511..29715...3.1..0.187.2294.0j15......0....1..gws-wiz.......0i71j0i67j0i273j0i131j0i10j0i131i273.F4U-kXSmLO8"));
                startActivity(browserIntent);
            }
        });

        i++;
    }




}

}

【问题讨论】:

    标签: android android-studio android-intent


    【解决方案1】:

    确切的“最大值”是多少?

    这里你只初始化了 2 个ImageView img[0] 和 img[1]

    如果 max 的值为 3 到 7,则会导致异常 (java.lang.NullPointerException)。

    因为img[2]、img[3]、img[4]、img[5]、img[6]、img[7]没有初始化。

    希望你理解...

    【讨论】:

      【解决方案2】:

      这里你已经为索引数组 0 和 2 初始化了你的 img 数组

      img[0] = findViewById(R.id.content_disease1);
      img[1] =findViewById(R.id.content_disease2);
      

      但是,如果您的 if 条件,if (max == c[0]) 匹配超过 2 次,则 i 将大于 3。由于没有初始化 img[3] 或更高的索引,尝试设置时将出现空指针异常那些图像视图的图像。

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        相关资源
        最近更新 更多