![](/img/trans.png)
[英]NullPointerException on getResources() for a CardView
[英]NullPointerException on getResources().getDisplayMetrics().density
我正在處理一個小的測試代碼。 它選擇一個圖像,然后根據屏幕密度調整其大小以適合屏幕。 在執行此操作時,它將以xxhdpi
顯示中的大小復制圖像,然后將其轉換為位圖,然后轉換為字符串。 然后,將字符串通過Intent傳送到下一個屏幕,在該屏幕上,字符串將變回為位圖,然后放置在ImageButton
。
直到我添加了一段代碼以根據密度調整字符串給定圖像的大小之前,此方法均能正常工作。 奇怪的是,我從另一個活動中復制並粘貼了DPI()方法,但該活動中沒有任何問題。
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;}
}
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)
文本大塊是從位圖轉換為字符串的字符串,該字符串已傳遞給活動。 我把它留作以防萬一。 大文本塊之前的行是單擊按鈕,該按鈕單擊開始了活動意圖,該活動由於NullPointerException而崩潰。
我可以根據要求添加其他活動,但是由於在我嘗試根據屏幕密度調整大小之前可以正常使用,所以我認為沒有必要。
直到onCreate()
完成執行后,才能設置Activity
的基本Context
。 在super.onCreate()
之后,只需將dpi
的初始化移動到onCreate()
super.onCreate()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.