无法上传图片 Cloudinary - Android
Cannot upload image Cloudinary - Android
我无法将 Android 的图像上传到 Cloudinary,我不知道为什么,尝试上传时出错。不要仅发送任何消息方法抛出 'java.io.IOException' 异常。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Bitmap imageBitmap = (Bitmap) extras.get("data");
Uri uri = getImageUri(getApplicationContext(), imageBitmap);
InputStream in = null;
try {
in = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Map config = new HashMap();
config.put("cloud_name", "...");
config.put("api_key", "...");
config.put("api_secret", "...");
Cloudinary mobileCloudinary = new Cloudinary(config);
try {
mobileCloudinary.uploader().upload(in, ObjectUtils.asMap("public_id", "sample_remote"));
} catch (IOException e) {
e.printStackTrace();
}
}
上传调用需要服务器通信。 Android 不允许它在主 (UI) 线程上发生。
您可以尝试使用 AsyncTask 包装上传调用。这样,上传调用发生在不同的线程上,不会干扰 UI.
这种包装的一个(非常)简单的例子 -
class CloudinaryUpload extends AsyncTask<String, String, String> {
protected String doInBackground(String... urls) {
try{
Map imageResult = cloudinary.uploader().upload("file", ObjectUtils.emptyMap());
}catch (IOException e){
System.out.println(e.getMessage());
}
}
protected void onPostExecute(String url) {
//do something with imageResult
}
}
我无法将 Android 的图像上传到 Cloudinary,我不知道为什么,尝试上传时出错。不要仅发送任何消息方法抛出 'java.io.IOException' 异常。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Bitmap imageBitmap = (Bitmap) extras.get("data");
Uri uri = getImageUri(getApplicationContext(), imageBitmap);
InputStream in = null;
try {
in = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Map config = new HashMap();
config.put("cloud_name", "...");
config.put("api_key", "...");
config.put("api_secret", "...");
Cloudinary mobileCloudinary = new Cloudinary(config);
try {
mobileCloudinary.uploader().upload(in, ObjectUtils.asMap("public_id", "sample_remote"));
} catch (IOException e) {
e.printStackTrace();
}
}
上传调用需要服务器通信。 Android 不允许它在主 (UI) 线程上发生。 您可以尝试使用 AsyncTask 包装上传调用。这样,上传调用发生在不同的线程上,不会干扰 UI.
这种包装的一个(非常)简单的例子 -
class CloudinaryUpload extends AsyncTask<String, String, String> {
protected String doInBackground(String... urls) {
try{
Map imageResult = cloudinary.uploader().upload("file", ObjectUtils.emptyMap());
}catch (IOException e){
System.out.println(e.getMessage());
}
}
protected void onPostExecute(String url) {
//do something with imageResult
}
}