java.lang.NullPointerException 来自错 return null?
java.lang.NullPointerException from wrong return null?
当我调试我的测试代码时,我在这一行中遇到错误
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
有错误 java.lang.NullPointerException
似乎 image
变空了
这是我获取图像的代码
public class OkHttpHandler extends AsyncTask<Void, Void, byte[]> {
private final String IMAGE_URL = "http://bit.ly/1DU2Zka";
OkHttpClient httpClient = new OkHttpClient();
@Override
protected byte[] doInBackground(Void... params) {
Log.d("e", "dddddddddd");
Log.d("e", IMAGE_URL);
Request.Builder builder = new Request.Builder();
builder.url(IMAGE_URL);
Request request = builder.build();
try {
Response response = httpClient.newCall(request).execute();
System.out.println(response);
Log.d("e", "FFFFFF response");
return response.body().bytes();
} catch (Exception e) {
Log.d("e", "rrrrrrr");
e.printStackTrace();
Log.d("e", "rrrrrrr");
}
return null;
}
}
这是否正确 return null;
?
像这样我在 mainactivity
中获取图像
public void downloadImage() {
OkHttpHandler handler = new OkHttpHandler();
byte[] image = new byte[0];
try {
image = handler.execute().get();
Log.d("e", "hhhh handler");
System.out.print(image);
if (image != null && image.length > 0){
Log.isLoggable("e",image.length);
Log.d("e", "ddddddd entered the try");
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
imageView.setImageBitmap(bitmap);
// txtBytes.setText("Total bytes downloaded: " + image.length);
}
} catch (Exception e) {
Log.d("e", "rrrrrr error");
e.printStackTrace();
// txtBytes.setText("Hmm sorry, something went wrong!");
}
}
为什么我得到 nullpointerexception?
logcat
10-11 16:55:22.724 27814-27814/com.justedhak.www.i D/e﹕ ddddddd entered the try
10-11 16:55:22.739 27814-27814/com.justedhak.www.i D/e﹕ rrrrrr error
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ java.lang.NullPointerException
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ at com.justedhak.www.i.MainActivity.downloadImage(MainActivity.java:82)
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ at com.justedhak.www.i.MainActivity.onCreate(MainActivity.java:54)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5389)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.access0(ActivityThread.java:163)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.os.Looper.loop(Looper.java:157)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5335)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
我猜问题出在你的主程序中图像的分配(在你进入try块之前)。你只保留一个字节,可以吗?
然后您尝试将图像传递给一个字节,这似乎会产生问题。也许 Java 只是把图片的第一个字节取到你的可变图像中。这就是为什么您通过了 if 条件,但如果您尝试创建位图却失败了。
祝你好运
空指针异常在您没有正确初始化某些东西时显示。检查 OnCreate 方法,您是否正确初始化了所有内容?
当我调试我的测试代码时,我在这一行中遇到错误
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
有错误 java.lang.NullPointerException
似乎 image
变空了
这是我获取图像的代码
public class OkHttpHandler extends AsyncTask<Void, Void, byte[]> {
private final String IMAGE_URL = "http://bit.ly/1DU2Zka";
OkHttpClient httpClient = new OkHttpClient();
@Override
protected byte[] doInBackground(Void... params) {
Log.d("e", "dddddddddd");
Log.d("e", IMAGE_URL);
Request.Builder builder = new Request.Builder();
builder.url(IMAGE_URL);
Request request = builder.build();
try {
Response response = httpClient.newCall(request).execute();
System.out.println(response);
Log.d("e", "FFFFFF response");
return response.body().bytes();
} catch (Exception e) {
Log.d("e", "rrrrrrr");
e.printStackTrace();
Log.d("e", "rrrrrrr");
}
return null;
}
}
这是否正确 return null;
?
像这样我在 mainactivity
public void downloadImage() {
OkHttpHandler handler = new OkHttpHandler();
byte[] image = new byte[0];
try {
image = handler.execute().get();
Log.d("e", "hhhh handler");
System.out.print(image);
if (image != null && image.length > 0){
Log.isLoggable("e",image.length);
Log.d("e", "ddddddd entered the try");
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
imageView.setImageBitmap(bitmap);
// txtBytes.setText("Total bytes downloaded: " + image.length);
}
} catch (Exception e) {
Log.d("e", "rrrrrr error");
e.printStackTrace();
// txtBytes.setText("Hmm sorry, something went wrong!");
}
}
为什么我得到 nullpointerexception?
logcat
10-11 16:55:22.724 27814-27814/com.justedhak.www.i D/e﹕ ddddddd entered the try
10-11 16:55:22.739 27814-27814/com.justedhak.www.i D/e﹕ rrrrrr error
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ java.lang.NullPointerException
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ at com.justedhak.www.i.MainActivity.downloadImage(MainActivity.java:82)
10-11 16:55:22.739 27814-27814/com.justedhak.www.i W/System.err﹕ at com.justedhak.www.i.MainActivity.onCreate(MainActivity.java:54)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5389)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.access0(ActivityThread.java:163)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.os.Looper.loop(Looper.java:157)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5335)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
10-11 16:55:22.744 27814-27814/com.justedhak.www.i W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
我猜问题出在你的主程序中图像的分配(在你进入try块之前)。你只保留一个字节,可以吗?
然后您尝试将图像传递给一个字节,这似乎会产生问题。也许 Java 只是把图片的第一个字节取到你的可变图像中。这就是为什么您通过了 if 条件,但如果您尝试创建位图却失败了。
祝你好运
空指针异常在您没有正确初始化某些东西时显示。检查 OnCreate 方法,您是否正确初始化了所有内容?