我正在寻找一种实现策略,以按顺序将多个图像上传到服务器。我正在使用来自http://uploads.im的API上传图片。它不允许在一个多部分POST请求中选择多个图像。因此,我必须顺序上传图像。
用户将“点击”多张照片,并且必须将其上传到http://uploads.im。一旦我从API获得成功响应并上传了图片的网址,就需要再上传一个,以此类推。另外,将所有图像上传到图像服务器后,我需要将URL列表发送到存储这些详细信息的服务器。
这是我到目前为止所做的
@OnClick({R.id.pic_photo_0
, R.id.pic_photo_1
, R.id.pic_photo_2
, R.id.pic_photo_3
}) //Bind with butterknife
public void onClickPhotoFrame(View view)
{
// Start CameraActivity
Intent startCustomCameraIntent = new Intent(this, CameraActivity.class);
startActivityForResult(startCustomCameraIntent, REQUEST_CAMERA);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != RESULT_OK)
{
return;
}
if (requestCode == REQUEST_CAMERA)
{
Uri photoUri = data.getData();
//based on which imageview created the camera request, load it with the above image
Picasso.with(getApplicationContext()).load(photoUri).fit().into(imageView0);
}
}
1)在上面的代码中,可以知道哪个视图称为onActivityResult方法?基于此,我可以使用相机的缩略图设置imageview。
2)我还将相机返回的uri添加到arraylist中,以后可用于循环和上传图像。请让我知道这种方法是否可以。
我正在通过改造上传以下图像
for (int i = 0; i < imageStorageList.size(); i++)
{
Call<ImageUploadResponse> call = new ImageUploadHelper().
UploadImage(new File(imageStorageList.get(i).getPath()));
call.enqueue(new Callback<ImageUploadResponse>()
{
@Override
public void onResponse(Call<ImageUploadResponse> call, Response<ImageUploadResponse> response)
{
// do some magic here to know which image was uploaded
}
@Override
public void onFailure(Call<ImageUploadResponse> call, Throwable t)
{
}
});
}
3)我非常确定上述策略不可行。请帮助我如何实现这一点。
1)在上面的代码中,可以知道哪个视图称为onActivityResult方法?基于此,我可以使用相机的缩略图设置imageview。
没有标准的方法可以知道是哪View
台相机启动的Intent
。如果您确实需要了解它,可以创建局部变量:
private ImageView lastClickedView;
然后onClickPhotoFrame
这样做:
public void onClickPhotoFrame(View view){
lastClickedView = (ImageView) view;
// Start CameraActivity
Intent startCustomCameraIntent = new Intent(this, CameraActivity.class);
startActivityForResult(startCustomCameraIntent, REQUEST_CAMERA);
}
在onActivityResult
这种情况下的添加处理中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != RESULT_OK)
{
return;
}
if (requestCode == REQUEST_CAMERA)
{
Uri photoUri = data.getData();
//based on which imageview created the camera request, load it with the above image
Picasso.with(getApplicationContext()).load(photoUri).fit().into(lastClickedView);
}
}
2)我还将相机返回的uri添加到arraylist中,以后可用于循环和上传图像。请让我知道这种方法是否可以。
我认为您的方法还可以。但是我看到了另一个答案:使用RxJava依次调用相同的改造方法以获得结果
据我了解,您想使用RxJava做到这一点。
因此,这是一种可能的方法(从您的答案中复制并稍作更改):
Observable.from(imageStorageList)
.flatMap(uri -> new ImageUploadHelper().uploadImage(new File(uri.getPath())))
.subscribe(imageUploadResponseObservable -> {
}, throwable -> {/*handle it here*/});
如何解决这个问题呢?
I.没有RxJava,就象在工作上一样看待这个问题。并使用android-priority-jobqueue库。这些作业将是持久性的,在错误情况下,它们将以指数补偿的方式重复执行。
二。实现您自己的机制,该机制将在服务器上上传图像并将其持久化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句