0

我的应用程序安装得很好,一切正常,但是当我从图库中选择一个图像放入 imageView 时,应用程序强制关闭,我得到这个空指针异常:

10-21 15:53:31.340: E/AndroidRuntime(24994): FATAL EXCEPTION: main
10-21 15:53:31.340: E/AndroidRuntime(24994): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=com.htc.HTCAlbum.action.ITEM_PICKER_FROM_COLLECTIONS dat=content://media/external/images/media/122 typ=image/png (has extras) }} to activity {com.example.awesomefilebuilderwidget/com.example.awesomefilebuilderwidget.Personalize}: java.lang.NullPointerException
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2974)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3026)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread.access$2000(ActivityThread.java:135)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1071)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.os.Looper.loop(Looper.java:150)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread.main(ActivityThread.java:4333)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at java.lang.reflect.Method.invokeNative(Native Method)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at java.lang.reflect.Method.invoke(Method.java:507)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at dalvik.system.NativeStart.main(Native Method)
10-21 15:53:31.340: E/AndroidRuntime(24994): Caused by: java.lang.NullPointerException
10-21 15:53:31.340: E/AndroidRuntime(24994):    at com.example.awesomefilebuilderwidget.Personalize.onActivityResult(Personalize.java:76)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.Activity.dispatchActivityResult(Activity.java:4053)
10-21 15:53:31.340: E/AndroidRuntime(24994):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2970)
10-21 15:53:31.340: E/AndroidRuntime(24994):    ... 11 more

这是我的 Personalize.java:

package com.example.awesomefilebuilderwidget;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class Personalize extends Activity implements OnClickListener {
Button button;
ImageView image;
ImageView image2;
Button btnChangeImage;
Button btnChangeImageForIcon;
private static final int SELECT_PICTURE = 1;
private static final int SELECT_PICTURE_2 = 2;
private String  selectedImagePath;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.personalize);

Button btnChangeImage = (Button) findViewById(R.id.btnChangeImage);    
btnChangeImage.setOnClickListener(this);
Button btnChangeImageForIcon = (Button) findViewById(R.id.btnChangeImageForIcon); 
btnChangeImageForIcon.setOnClickListener(this);

}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
 Intent intent = new Intent();
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 intent.addCategory(Intent.CATEGORY_OPENABLE);
 startActivityForResult(intent, SELECT_PICTURE);


};

public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE)
{
    Uri selectedImageUri = data.getData();
    selectedImagePath = getPath(selectedImageUri);
    Bitmap b1 = getAndDecodeImage(selectedImagePath);
    if(b1 != null){
        image.setImageBitmap(b1);
    }           
} else if (requestCode == SELECT_PICTURE_2)
{
    Uri selectedImageUri = data.getData();
    selectedImagePath = getPath(selectedImageUri);
    Bitmap b2 = getAndDecodeImage(selectedImagePath);
    if(b2 != null){
        image2.setImageBitmap(b2);
    }
}    
}
}

private Bitmap getAndDecodeImage(String  selectedImagePath){
try {
    FileInputStream fileis=new FileInputStream(selectedImagePath);
    BufferedInputStream bufferedstream=new BufferedInputStream(fileis);
    byte[] bMapArray= new byte[bufferedstream.available()];
    bufferedstream.read(bMapArray);
    Bitmap bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);

    if (fileis != null) 
    {
        fileis.close();
    }
    if (bufferedstream != null) 
    {
        bufferedstream.close();
    }
    return bMap;
} catch (FileNotFoundException e) {                 
    e.printStackTrace();
} catch (IOException e) {                   
    e.printStackTrace();
}   
return null;
}


public boolean saveImageToInternalStorage(Bitmap image) {
   try {
      FileOutputStream fos = this.openFileOutput("desiredFilename.png",     Context.MODE_PRIVATE);
      image.compress(Bitmap.CompressFormat.PNG, 100, fos);
      fos.close();   
      return true;
   } catch (Exception e) {
   return false;
   }
}
}

这是第 76 行:

image.setImageBitmap(b1);
4

1 回答 1

0

你得到一个 NPE,因为你的 image 变量从未被初始化,所以默认情况下它是一个空指针,因此当你在它上面调用一个函数时,你会得到一个异常。

尝试将其初始化为您想要的,并且 NPE 应该消失。

于 2013-10-21T22:10:52.900 回答