I am trying to use retrofit Robospice to upload an image to my Google appengine blobstore. I can get the download URL provided by GAE, but when I try to send the URL with the image as a multi-page POST, I get an exception:
E // RequestRunner.java: 134 (24689): Thread-3363 An exception occurred during the execution of the request network: null
E // RequestRunner.java: 134 (24689): retrofit.RetrofitError
E // RequestRunner.java: 134 (24689): at retrofit.RestAdapter $ RestHandler.invokeRequest (RestAdapter.javahaps43)
E // RequestRunner.java: 134 (24689): at retrofit.RestAdapter $ RestHandler.invoke (RestAdapter.java:222)
E // RequestRunner.java: 134 (24689): with $ Proxy0.uploadImage (native method)
E // RequestRunner.java: 134 (24689): at ginger.connexus.network.UploadImage.loadDataFromNetwork (UploadImage.java:24)
E // RequestRunner.java: 134 (24689): in ginger.connexus.network.UploadImage.loadDataFromNetwork (UploadImage.java:1)
E // RequestRunner.java: 134 (24689): at com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork (CachedSpiceRequest.java:45)
E // RequestRunner.java: 134 (24689): at com.octo.android.robospice.request.RequestRunner.processRequest (RequestRunner.java:130)
E // RequestRunner.java: 134 (24689): at com.octo.android.robospice.request.RequestRunner $ 1.run (RequestRunner.java:197)
E // RequestRunner.java: 134 (24689): at java.util.concurrent.Executors $ RunnableAdapter.call (Executors.javahaps90)
E // RequestRunner.java: 134 (24689): at java.util.concurrent.FutureTask.run (FutureTask.java:234)
E//RequestRunner.java: 134 (24689): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
E//RequestRunner.java: 134 (24689): at java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:573)
E//RequestRunner.java: 134 (24689): at java.lang.Thread.run(Thread.java:841)
D//RequestProgressManager.java: 75 (24689): COMPLETE
API
public interface MyApi {
@Multipart
@POST("/{uploadurl}")
MyImage uploadImage(
@Path("uploadurl") String uploadurl,
@Part("stream") long streamId,
@Part("image") TypedFile image);
}
Gson Spice
public class MyService extends RetrofitGsonSpiceService {
private final static String BASE_URL = "theinternet";
@Override
protected String getServerUrl() {
return BASE_URL;
}
@Override
public void onCreate() {
super.onCreate();
addRetrofitInterface(MyApi.class);
}
}
Retice Spice
public class UploadImage extends RetrofitSpiceRequest<MyImage, MyApi> {
private final String uploadurl;
private final long streamId;
private final TypedFile image;
public UploadImage(String uploadurl, long streamId, File image) {
super(MyImage.class, MyApi.class);
this.uploadurl = uploadurl;
this.streamId = streamId;
this.image = new TypedFile("image/jpeg", image);
}
@Override
public MyImage loadDataFromNetwork() throws Exception {
return getService().uploadImage(uploadurl, streamId, image);
}
}
UploadImage upload = new UploadImage(uploadUrl, streamId, file);
getSpiceManager().execute(upload, new MyImageUploadListener());