Android开发中遇到ImageButton背景设置的问题

我想在EditUserActivity.java里面,点击一个ImageButton,然后跳到一个fragment,fragment里面有两个按钮,分别是拍照和从相册选择,选择了图片之后,将图片的路径传回给EditUserAcitiviy.java里面,把刚才获得的图片设置为ImageButton的背景图。



错误信息:
09-01 13:55:47.288: I/BBBBBB(14686): 图库
09-01 13:55:55.928: I/TagDialogFragment(14686): imagePath = /storage/sdcard1/baidu/imeface.png
09-01 13:55:55.928: I/@ EditUserActivity.java AAAAAAAAA(14686): /storage/sdcard1/baidu/imeface.png
09-01 13:55:55.928: I/System.out(14686): java.lang.NullPointerException
09-01 13:55:55.928: W/System.err(14686): java.lang.NullPointerException
09-01 13:55:55.928: W/System.err(14686):  at android.app.Activity.findViewById(Activity.java:1914)
09-01 13:55:55.928: W/System.err(14686):  at com.example.tracemap.activity.EditUserActivity.toDisplayPhoto(EditUserActivity.java:88)
09-01 13:55:55.928: W/System.err(14686):  at com.example.tracemap.activity.EditUserActivity.photoUriCallback(EditUserActivity.java:105)
09-01 13:55:55.928: W/System.err(14686):  at com.example.tracemap.fragment.SelectPhotoDialogFragment.doPhoto(SelectPhotoDialogFragment.java:200)
09-01 13:55:55.928: W/System.err(14686):  at com.example.tracemap.fragment.SelectPhotoDialogFragment.onActivityResult(SelectPhotoDialogFragment.java:210)
09-01 13:55:55.928: W/System.err(14686):  at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:163)
09-01 13:55:55.928: W/System.err(14686):  at android.app.Activity.dispatchActivityResult(Activity.java:5530)
09-01 13:55:55.928: W/System.err(14686):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3589)
09-01 13:55:55.928: W/System.err(14686):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3636)
09-01 13:55:55.928: W/System.err(14686):  at android.app.ActivityThread.access$1600(ActivityThread.java:141)
09-01 13:55:55.928: W/System.err(14686):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1290)
09-01 13:55:55.928: W/System.err(14686):  at android.os.Handler.dispatchMessage(Handler.java:102)
09-01 13:55:55.928: W/System.err(14686):  at android.os.Looper.loop(Looper.java:136)
09-01 13:55:55.928: W/System.err(14686):  at android.app.ActivityThread.main(ActivityThread.java:5290)
09-01 13:55:55.928: W/System.err(14686):  at java.lang.reflect.Method.invokeNative(Native Method)
09-01 13:55:55.928: W/System.err(14686):  at java.lang.reflect.Method.invoke(Method.java:515)
09-01 13:55:55.938: W/System.err(14686):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:859)
09-01 13:55:55.938: W/System.err(14686):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:675)
09-01 13:55:55.938: W/System.err(14686):  at dalvik.system.NativeStart.main(Native Method)
09-01 13:55:55.938: I/CCCCC(14686): here!


EditUserActivity.java
package com.example.tracemap.activity;

import com.example.tracemap.activity.base.BaseFragmentActivity;
import com.example.tracemap.fragment.SelectPhotoDialogFragment;

public class EditUserActivity extends BaseFragmentActivity {
private ImageButton btnClose;
private ImageButton header;
android.support.v4.app.FragmentManager   mFragmentManager = getSupportFragmentManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_user);


btnClose = (ImageButton)findViewById(R.id.btn_back);
header = (ImageButton)findViewById(R.id.header);
btnClose.setOnClickListener(mOnClickListener);
header.setOnClickListener(mOnClickListener);
}

protected Context getActivity() {
// TODO Auto-generated method stub
return this;
}
protected void Close()
{
this.finish();
}


public SelectPhotoDialogFragment.DialogCallback selectPhotoCallback = new  SelectPhotoDialogFragment.DialogCallback (){

@Override
public void onSuccess(Bundle data) {
// TODO Auto-generated method stub
}

};
OnClickListener mOnClickListener = new OnClickListener() {

@SuppressLint("NewApi")
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btn_back:
Close();
break;
case R.id.header:
SelectPhotoDialogFragment fragment = SelectPhotoDialogFragment.getInstance(selectPhotoCallback);
Bundle bundle = new Bundle();
//FragmentTransaction ft = getFragmentManager().beginTransaction();
//FragmentTransaction ft = getFragmentManager().beginTransaction();
fragment.show(mFragmentManager, SelectPhotoDialogFragment.TAG);
break;

}
}
};

/**
 * 将选择的图片显示在头像位置
 * @param photoUri
 */
private void toDisplayPhoto(String picPath){

ImageButton imageButton = (ImageButton)findViewById(R.id.header);
//Bitmap mHeader = BitmapFactory.decodeStream(getClass().getResourceAsStream(picPath));
Drawable drawable = Drawable.createFromPath(picPath);
imageButton.setBackground(drawable);
//imageButton.setImageResource(R.drawable.ic_camera);
}


/**
 * 回调函数
 * @param photoUri
 */
public void photoUriCallback(String picPath){

Log.i("@ EditUserActivity.java AAAAAAAAA", picPath);

//toDisplayPhoto(picPath);
try {
toDisplayPhoto(picPath);
} catch (Exception e) {
// TODO: handle exception
Log.i("EditUserActivity.java-line:107", "");
System.out.println(e);
e.printStackTrace();
}
}



}



SelectPhotoDialogFragment.java
package com.example.tracemap.fragment;

import com.example.tracemap.activity.EditUserActivity;

public class SelectPhotoDialogFragment extends DialogFragment implements OnClickListener {

public final static String TAG = TagDialogFragment.class.getSimpleName();

public static final int SELECT_PIC_BY_TACK_PHOTO = 1; // 使用照相机拍照获取图片
public static final int SELECT_PIC_BY_PICK_PHOTO = 2; // 使用相册中的图片
public static final String KEY_PHOTO_PATH = "photo_path"; // 从Intent获取图片路径的KEY

private String picPath; // 获取到的图片路径
private Uri photoUri;
private Intent lastIntent;

DialogCallback mCallback;
RelativeLayout bg;

private SelectPhotoDialogFragment(DialogCallback callback) {
this.mCallback = callback;
}

private static SelectPhotoDialogFragment mInstance;

public synchronized static SelectPhotoDialogFragment getInstance(DialogCallback callback) {
if (mInstance == null) {
mInstance = new SelectPhotoDialogFragment(callback);
}
return mInstance;
}

@SuppressLint("NewApi")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_dialog_selectphoto, container, false);

initView(view);

return view;
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.setCanceledOnTouchOutside(false);

dialog.setOnCancelListener(new OnCancelListener() {

@Override
public void onCancel(DialogInterface dialog) {
//
}
});
return dialog;
}


private void initView(View view){

Button btnTakePhoto = (Button) view.findViewById(R.id.btn_take_photo);
Button btnPickPhoto = (Button) view.findViewById(R.id.btn_pick_photo);

btnTakePhoto.setOnClickListener(this);
btnPickPhoto.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {

case R.id.btn_take_photo:
Log.i("AAAAAA", "拍照");
takePhoto();
break;
case R.id.btn_pick_photo:
Log.i("BBBBBB", "图库");
pickPhoto();
break;
default:break;
}
}


/**
 * 拍照获取图片
 */
private void takePhoto() {

// 执行拍照之前,先检查SD卡是否存在
String SDState = Environment.getExternalStorageState();

if (SDState.equals(Environment.MEDIA_MOUNTED)) {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

ContentValues values = new ContentValues();
photoUri = getActivity().getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(getActivity(), "内存卡不存在", Toast.LENGTH_LONG).show();
}
}

/**
 * 从相册中取图片
 */
private void pickPhoto() {

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
}


public interface DialogCallback {
public void onSuccess(Bundle data);
}


/**
 * 获取图片的路径
 */
private void doPhoto(int requestCode, Intent data) {

if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {
if (data == null) {
Toast.makeText(getActivity(), "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
photoUri = data.getData();
if (photoUri == null) {
Toast.makeText(getActivity(), "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
}


String[] pojo = { MediaStore.Images.Media.DATA };

Cursor cursor = getActivity().managedQuery(photoUri, pojo, null, null, null);

if (cursor != null) {
int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);

if(VERSION.SDK_INT < 14) {
    cursor.close();
 }
}

Log.i(TAG, "imagePath = " + picPath);

if (picPath != null
&& (picPath.endsWith(".png") || picPath.endsWith(".PNG")
|| picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {

//将picPath传给EditUserActivity

EditUserActivity editUserActivity = new EditUserActivity();
editUserActivity.photoUriCallback(picPath);
} else {
Toast.makeText(getActivity(), "选择图片文件不正确", Toast.LENGTH_LONG).show();
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode == Activity.RESULT_OK) {
doPhoto(requestCode, data);
Log.i("CCCCC", "here!");
}
super.onActivityResult(requestCode, resultCode, data);
}

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值