android简单开发,使用bmob作为服务器后端,上传图片到bmob失败
jam96 2016-10-06 10:26:31 以下为我上传的代码:
public void storePicture(){
File file=new File("sdcard/"+PATH);
if (file!=null){
final BmobFile bmobFile=new BmobFile(file);
bmobFile.uploadblock(new UploadFileListener() {
@Override
public void done(BmobException e) {
if (e==null){
Picture picture=new Picture();
picture.setContent(textView.getText().toString());
picture.setFile(bmobFile);
picture.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if (e == null) {
Toast.makeText(MainActivity.this, "存取图片成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "存取失败3", Toast.LENGTH_SHORT).show();
}
}
});
}else{
Toast.makeText(MainActivity.this,"存取失败2",Toast.LENGTH_SHORT).show();
}
}
});
}
}
然后每次点击上传按钮后,都会提示错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context cn.bmob.v3.BmobWrapper.getApplicationContext()' on a null object reference
以下是完整的代码,主要就是实现一个简单的点击添加按钮,能够获取手机图片,然后点击上传按钮,能够上传图片到bmob上:
public class MainActivity extends Activity implements View.OnClickListener{
private TextView textView;
private ImageView imageView;
private Button btnAdd,btnSave;
final private int GET_PICTURE=1;
final private int SAVE_PICTURE=2;
private String PATH;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
btnSave.setOnClickListener(this);
btnAdd.setOnClickListener(this);
}
public void initView(){
textView=(TextView)findViewById(R.id.text);
imageView=(ImageView)findViewById(R.id.image);
btnAdd=(Button)findViewById(R.id.addImage);
btnSave=(Button)findViewById(R.id.saveImage);
}
@Override
public void onClick(View v) {
switch (v.getId()){
//获取本地图片,并显示
case R.id.addImage:
getPicture();
break;
//上传图片
case R.id.saveImage:
storePicture();
break;
}
}
public void getPicture(){
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,GET_PICTURE);
}
public void storePicture(){
File file=new File("sdcard/"+PATH);
if (file!=null){
final BmobFile bmobFile=new BmobFile(file);
bmobFile.uploadblock(new UploadFileListener() {
@Override
public void done(BmobException e) {
if (e==null){
Picture picture=new Picture();
picture.setContent(textView.getText().toString());
picture.setFile(bmobFile);
picture.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if (e == null) {
Toast.makeText(MainActivity.this, "存取图片成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "存取失败3", Toast.LENGTH_SHORT).show();
}
}
});
}else{
Toast.makeText(MainActivity.this,"存取失败2",Toast.LENGTH_SHORT).show();
}
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case GET_PICTURE:
if (data!=null){
Uri selectedImageUri=data.getData();
String[] proj={MediaStore.Images.Media.DATA};
Cursor cursor=managedQuery(selectedImageUri,proj,null,null,null);
int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
PATH=cursor.getString(column_index);
textView.setText(PATH);
try{
Bitmap bitmap= BitmapFactory.decodeStream(this.getContentResolver().openInputStream(Uri.parse(selectedImageUri.toString())));
imageView.setImageBitmap(bitmap);
}catch (FileNotFoundException e){
e.printStackTrace();
}
}else {
Toast.makeText(this,"获取图片失败",Toast.LENGTH_SHORT).show();
}
break;
}
}
}
求大神们帮忙解决下这个问题,debug了好久,也没找出来!