无法使用 android 中的解析 api 在解析服务器中上传图像
Posted
技术标签:
【中文标题】无法使用 android 中的解析 api 在解析服务器中上传图像【英文标题】:Failed to upload an image in parse server using parse api in android 【发布时间】:2016-02-03 07:03:58 【问题描述】:我尝试从图库中选择图像并保存在 android 的解析云服务器中。 但我做不到。
我已经尝试了以下代码:
OnImageView 点击事件选择图片:
imageDish.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
try
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
SELECT_PICTURE);
catch (Exception e)
Toast.makeText(getActivity(),
"Select Image From Gallery", Toast.LENGTH_LONG)
.show();
// TODO: handle exception
);
OnActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
if (requestCode == SELECT_PICTURE)
selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
imageDish.setImageURI(selectedImageUri);
@SuppressWarnings("deprecation")
public String getPath(Uri uri)
String[] projection = MediaStore.Images.Media.DATA;
Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
解析代码以保存图像:
InputStream imageStream = null;
try
imageStream = getActivity().getContentResolver().openInputStream(
selectedImageUri);
catch (FileNotFoundException e)
e.printStackTrace();
Bitmap bitmap = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Compress image to lower quality scale 1 - 100
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] image = stream.toByteArray();
ParseFile file = new ParseFile("FoodImage", image);
// Upload the image into Parse Cloud
file.saveInBackground();
Log.d("File======", "" + file);
try
ParseObject Foodobject = new ParseObject("Food");
Foodobject.put("FoodName", Name);
Foodobject.put("ResId", ParseObject.createWithoutData("Restaurant",Res_id);
Foodobject.put("FoodCategory", ParseObject.createWithoutData("FoodCategory", _CategoryId));
Foodobject.put("FoodDesc", Des);
Foodobject.put("Price",priceNumber);
Foodobject.put("VegOnly", "Y");
Foodobject.put("IsRecommended", false);
Foodobject.put("FoodImage", file);
Foodobject.saveInBackground();
catch (Exception ex)
Log.e("Error", "" + ex);
这是我的日志输出:
文件======:com.parse.ParseFile@39f19700
【问题讨论】:
试试这个链接***.com/questions/22186388/… @NikitaSukhadiya 是的!我试过......但没有工作......:-( 那么到底有什么不好呢? @Wain 当我从图库中选择图像时,它没有存储在 parse.butBitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
直接写入资源图像时成功保存!!!
你是如何测试的?保存是异步的
【参考方案1】:
用这个替换你的代码
ParseFile file = new ParseFile("FoodImage.png", image);
在解析文档中明确提到您为具有文件扩展名的文件命名。这让 Parse 找出文件类型并相应地处理它。 https://parse.com/docs/android/guide#files
【讨论】:
我尝试过但没有工作..当我从可绘制对象中写入默认图像时,它已保存.... 你可以试试 Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath);而不是位图 bitmap = BitmapFactory.decodeStream(imageStream);【参考方案2】:我认为您的图像大小问题,可能是您从图库中选择的图像太大而无法保存在 parse.com 中
所以试试这个代码。
它对我有用。
ByteArrayOutputStream stream = null;
Bitmap bitmap = BitmapFactory.decodeFile(picturePath)
Bitmap newbitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true);
stream = new ByteArrayOutputStream();
newbitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] image = stream.toByteArray();
final ParseFile file = new ParseFile("FoodImage.png", image);
file.saveInBackground(new SaveCallback()
@Override
public void done(ParseException e)
if(e==null)
// Your Parse Code....
【讨论】:
以上是关于无法使用 android 中的解析 api 在解析服务器中上传图像的主要内容,如果未能解决你的问题,请参考以下文章
程序类型已存在: com.google.android.gms.common.api.zzd ,无法解析
谷歌日历 API android“GoogleAuthorizationRequestUrl 无法解析为类型”