无法使用 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.but Bitmap 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 无法解析为类型”

无法解析 GoogleSignIn 和 GoogleSignInClient

无法解析 Android 中的方法“execute()”

具有依赖关系的 Android 库无法正确解析

Android Studio 无法解析导入项目中的 R?