简体   繁体   English

getResources()。getDisplayMetrics()。density上的NullPointerException

[英]NullPointerException on getResources().getDisplayMetrics().density

Context 上下文

I'm working on a small test code right now. 我正在处理一个小的测试代码。 It selects an image, resizes it to fit the screen based on the screen density. 它选择一个图像,然后根据屏幕密度调整其大小以适合屏幕。 While it does this, it makes a copy of the image at the size it would be in an xxhdpi display, and the converts into a Bitmap, then into a String. 在执行此操作时,它将以xxhdpi显示中的大小复制图像,然后将其转换为位图,然后转换为字符串。 The String is then carried through an Intent to the next screen where the String is turned back into a Bitmap and then placed in an ImageButton . 然后,将字符串通过Intent传送到下一个屏幕,在该屏幕上,字符串将变回为位图,然后放置在ImageButton

This worked fine until I added in a chunk of code to resize the image given by the string based on the density. 直到我添加了一段代码以根据密度调整字符串给定图像的大小之前,此方法均能正常工作。 The odd thing is I copied and pasted the DPI() method from another activity and there were no issues in that activity. 奇怪的是,我从另一个活动中复制并粘贴了DPI()方法,但该活动中没有任何问题。

Code

package com.example.zachary.imagetesting.Resizing;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

import com.example.zachary.imagetesting.R;

public class PictureDecoded extends Activity {

    TextView Text;
    ImageButton Image;
    String string;
    Bitmap picture;
    public float DPI(){return getResources().getDisplayMetrics().density;}
    float dpi = DPI() * 180;
    int size = (int) dpi;


    public Bitmap Pic(String string){
        try{
            byte[] b = Base64.decode(string, Base64.DEFAULT);
            Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
            return bitmap;
        } catch (Exception e) {
            e.getMessage();
            return null;
        }
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.resizing);
        string = getIntent().getStringExtra("String");

        Image = (ImageButton) findViewById(R.id.image);
        Text = (TextView) findViewById(R.id.text);

        picture = Pic(string);

        Image.setImageBitmap(Bitmap.createScaledBitmap(picture,size,size,false));
    }

    public void next(View view){ }

    // I also tried addring DPI() here as well to no success.
    //public float DPI(){return getResources().getDisplayMetrics().density;}

}

Error Log 错误记录

01-15 19:55:17.104 30570-30570/com.example.zachary.imagetesting D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
01-15 19:55:17.194 30570-30570/com.example.zachary.imagetesting E/Bitmap String:: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                                  AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                                  AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAGVAhwDASIA
                                                                                  AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
                                                                                  AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
                                                                                  ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
                                                                                  p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
                                                                                  AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
                                                                                  BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
                                                                                  U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
                                                                                  uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDuKKKK
                                                                                  /wAVz/UgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
                                                                                  ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
                                                                                  KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
                                                                                  oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
                                                                                  igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
                                                                                  ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
                                                                                  KKKKACiiigAooooAKKKKACiiigA45GemM+3XGeTjOOPx5ODkruPAuv6DpWppYeMtHj1zwhqk0MOt
                                                                                  2qxqur2EO9h/bHhy/UpcadqtlkTeXFKLTU4l+wanBNA0RTtPjP8ABnU/hRqdldW102ueC/EUa3nh
                                                                                  XxKkaKl1bzo1zFYXqoxEWoQ2jQziQKltf2zpe2aoRd2cPBLMaFLH0svxF6NbEwnPBSk17LFqko+2
                                                                                  p056cuIopqc6EleVKUalKdRRrKMe0ipqnLRyTcG9p2spJa6SW/K9WtU3advE6KKK7ywooooAKKKK
                                                                                  ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
                                                                                  KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK0NM0jV9buB
                                                                                  Z6LpWo6vdHAFrpdhd39yckgYgtIZpecf3fT1yfcvDv7Lnxx8Rwpcx+Dn0a3fG2XxFqOn6TLg5wWs
                                                                                  J7htTQcZw1lu68E43cOLzLLcAr47H4TCLS31jE0aLe6SjGpUUpN8rsopvye7iVSnBXnOEF3lJR79
                                                                                  3/dfn69fn2ivtPTP2HPiTcgHVfFXhHSxgErA2salKOuRtOnWMeRgYImYHPJGDXWw/sG6gV/0j4oW
                                                                                  cb4HEPhCeZc5OfmfxJAQMYx8pJJOQNvPh1ON+FKTtLOaLa/590MZWXb4qOHqRf3v9TB43CK968dO
                                                                                  0Zvqlpyxafffa9z8/wCivvO8/YQ8RIrHT/iPo1w38K3nh6/s1PJxuaHU74rkY6I2CSPm25PBap+x
                                                                                  b8Y7EObCfwprQXO1bTWZ7OZ+Wxgatp9jApYAcG6wDn5sAtV0eM+Fq+kM6wsdv40a+GXXVvEUqSS0
                                                                                  1bemt72d3HGYWW1eH/b3NHy+0lf+vU+SaK9G8VfCH4oeCXlHiXwPr9hDCCXv47F9Q0kKCRu/tbTD
                                                                                  e6eBxnDXQbGMgE8+cjB5ByPUexx6nv8ArxknmvoMPicNi6aq4XEUcTSdrVKFWnVptO9rTpylHXld
                                                                                  tfn33jKM1eEoyXeLUl16pvt+ers7lfqF8ItCX43/ALKY8H6y8VxqGnHV9A0bULtRI2n6no85vPDV
                                                                                  wJOZIlsrS+06wkZCGbTvtFq2YpJA35e1+q37EW//AIVBrQb/AFf/AAnmseX97J/4p/wnv6nG3OCN
                                                                                  v8RfJyOfifEOc6GR4fG0ZezxOBzTB4nDVUlzQqReIirPezupTje0koqV0cWPbjh1OOkqdWnKL6p3
                                                                                  qLTtsm++zva7/LC5triyurmyu4mhurOea1uYWHzxXEEssM0TDqGjkiZWB5zkdiagr2T9oPQ4/Dvx
                                                                                  s+I+nRALFJrp1aJQOAuu2lvrbqOeiy38igdgGHG3nxuvs8BiY43A4PGR+HFYXD4mPkq9JVEt+zXV
                                                                                  9NW1JvtpyU6cJracIyXpJN9/T/PVtFFFFdRQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
                                                                                  FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
                                                                                  AFFFFABRRRQAUUUUAFH+f5+/t/Png57nwD8NvGfxN1f+x/B+jzahLGEa8vHJg0vTYXZlE+pag6GK
                                                                                  1Qlfkj+e6nO9bW3mkQof0q+E37JHgbwOINW8X+T428RKYZV+22+PD2mzIS2LHS5VYXrpIMrean5m
                                                                                  4CKWGxtZM181n3FeUcPxccVVdbF8t6eBw7jOvK/wyqXko0IPdSqtOUVJ04TkuU5q+Lo4dNTledtK
                                                                                  cdZP4rX1tFOyacnreVruPvfA3w3/AGfvif8AFBUu9E0UabopkRG8Q6+0unaWysTueyUwSXmqBVGd
                                                                                  2nW08AkBimuImJNfdvgH9jP4beGzHeeLrm98cX4jTNvdmTS9BilAfc8enWM32u4weAt9qU1u6lS9
                                                                                  mpyp+wFVUAVFCqAFAUAAKoIUADgADhQOAMADApa/G844+z7NHUp0K39mYWV0qWDlKNdxu7e0xbar
                                                                                  OXnR9jFqTjKDUU341XMMRUuoy9nF9IfFu3rP4uvSytdNO9zG0Lw54f8AC2nrpXhvRdM0LTkwRZaT
                                                                                  Y21halhxveG1iiSSQ4BMjhnJwSxIJOz/AJ/n7/5yeTzkor4qc51JynUnKc5tynOcnKcpdZSlKTcm
                                                                                  +rbb829Tibbbbbbe7bd2+7bbf5+reoUUUVIgooooAMf4Z5zjnv1/+sT1GQfDfH37Onwm+IMd7LqH
                                                                                  hq20fWLs7/8AhIfDqx6Vqqz5YmeZYonsNQd8gSHUrK6Yj7jo43V7lRXVg8bjMvrKvgcVXwtZW/eU
                                                                                  Ks6cmoybUZcskpwvq4T5oSTalFq97hOdN81OcoPvFtXt3s9V5PTvc/I34r/so+Pfh6l7rHh/d408
                                                                                  L2y+c93YW7R67YQguJG1HRlMrzRQgAveaZLdRiMNPcwWkQc19r/shaNcaR8DtFmuYmhfW9W17W1R
                                                                                  1KsYZL4aZbSEH+Ga20mKeMnJMcgOSDX03gf5/H/Pr05OKZHHHFGsUSpFGoCqqIERRuP3UQAAclsK
                                                                                  PzJ4+kzXjLMs6yWnlWYU6VSrTxVKu8bBeznVp06deHs6tGK9nzuVRTdSlyRaUYOjf94+mrjKlagq
                                                                                  NRJtSUvaLRtRUrJxStf3m7rva29/xq/akvY7749+P3iZWS2m0KyLD/n
01-15 19:55:17.194 30570-30570/com.example.zachary.imagetesting I/Timeline: Timeline: Activity_launch_request id:com.example.zachary.imagetesting time:50420468
01-15 19:55:17.244 30570-30570/com.example.zachary.imagetesting D/AndroidRuntime: Shutting down VM
01-15 19:55:17.244 30570-30570/com.example.zachary.imagetesting E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.example.zachary.imagetesting, PID: 30570
                                                                                  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zachary.imagetesting/com.example.zachary.imagetesting.Resizing.PictureDecoded}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2546)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
                                                                                      at android.app.ActivityThread.access$900(ActivityThread.java:177)
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                      at android.os.Looper.loop(Looper.java:145)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5942)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
                                                                                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                                      at android.content.ContextWrapper.getResources(ContextWrapper.java:90)
                                                                                      at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:74)
                                                                                      at com.example.zachary.imagetesting.Resizing.PictureDecoded.DPI(PictureDecoded.java:20)
                                                                                      at com.example.zachary.imagetesting.Resizing.PictureDecoded.<init>(PictureDecoded.java:21)
                                                                                      at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                                      at java.lang.Class.newInstance(Class.java:1650)
                                                                                      at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2536)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
                                                                                      at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                      at android.os.Looper.loop(Looper.java:145) 
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5942) 
                                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

The large block of text is the String converted from Bitmap that was passed to the Activity. 文本大块是从位图转换为字符串的字符串,该字符串已传递给活动。 I left it in just in case it was useful. 我把它留作以防万一。 The line before the large block of text was the button click that started the intent to the activity which crashes due to NullPointerException. 大文本块之前的行是单击按钮,该按钮单击开始了活动意图,该活动由于NullPointerException而崩溃。

I can add the other activities on request, but since it worked before I tried resizing based on screen density I didn't feel it was needed. 我可以根据要求添加其他活动,但是由于在我尝试根据屏幕密度调整大小之前可以正常使用,所以我认为没有必要。

An Activity 's base Context won't have been setup until after onCreate() has finished executing. 直到onCreate()完成执行后,才能设置Activity的基本Context Simply move the initialization of dpi to onCreate() after super.onCreate() has been called. super.onCreate()之后,只需将dpi的初始化移动到onCreate() super.onCreate()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM