我正在寻找一种实施策略,将多个图像按顺序上传到服务器。我正在使用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方法?基于此,我可以使用相机中的缩略图设置图像视图。
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)我很确定上述策略不行。请帮我解决一下这个问题。
答案 0 :(得分:2)
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, 可以在以后用于循环和上传图像。请让我 知道这种方法是否合适。
在我看来,你的方法还可以。但我已经看到了你的另一个答案:Call same retrofit method sequentially for result using RxJava
据我所知,您希望使用RxJava。
所以,这是一种可能的方法(从你的答案中复制并稍作改动):
Observable.from(imageStorageList)
.flatMap(uri -> new ImageUploadHelper().uploadImage(new File(uri.getPath())))
.subscribe(imageUploadResponseObservable -> {
}, throwable -> {/*handle it here*/});
如何解决这个问题?
我。没有RxJava,就像在工作上一样。并使用库android-priority-jobqueue。这些工作将持久,在错误的情况下,它们将以指数后退重复。
II。实施您自己的机制,该机制将在服务器上传图像,并且会持续存在。