4

Robospice と Retrofit を使用して、画像を Google appengine ブロブストアにアップロードしようとしています。GAE から提供されたアップロード URL を取得できますが、画像を含む URL をマルチパート POST として送信しようとすると、例外が発生します。

E//RequestRunner.java:134(24689): Thread-3363 リクエスト ネットワークの実行中に例外が発生しました:null

E//RequestRunner.java:134(24689): retrofit.RetrofitError

E//RequestRunner.java:134(24689): retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:343) で

E//RequestRunner.java:134(24689): retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:222) で

E//RequestRunner.java:134(24689): $Proxy0.uploadImage(ネイティブ メソッド) で

E//RequestRunner.java:134(24689):zinger.connexus.network.UploadImage.loadDataFromNetwork(UploadImage.java:24)で

E//RequestRunner.java:134(24689):zinger.connexus.network.UploadImage.loadDataFromNetwork(UploadImage.java:1)で

E//RequestRunner.java:134(24689): com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork(CachedSpiceRequest.java:45) で

E//RequestRunner.java:134(24689): com.octo.android.robospice.request.RequestRunner.processRequest(RequestRunner.java:130) で

E//RequestRunner.java:134(24689): com.octo.android.robospice.request.RequestRunner$1.run(RequestRunner.java:197) で

E//RequestRunner.java:134(24689): java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) で

E//RequestRunner.java:134(24689): java.util.concurrent.FutureTask.run(FutureTask.java:234) で

E//RequestRunner.java:134(24689): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) で

E//RequestRunner.java:134(24689): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) で

E//RequestRunner.java:134(24689): java.lang.Thread.run(Thread.java:841) で

D//RequestProgressManager.java:75(24689): 進行状況の送信完了

私のAPIインターフェース

public interface MyApi {
    @Multipart
    @POST("/{uploadurl}")
    MyImage uploadImage(
            @Path("uploadurl") String uploadurl,
            @Part("stream") long streamId,
            @Part("image") TypedFile image);
}

私のレトロフィットGsonスパイスサービス

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);
    }

}

私の Retrofit Spice Request クラス

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());
4

1 に答える 1