Я пытаюсь загрузить изображение в Twitter с помощью своего API, но он всегда терпит ошибку, заявив, что не может найти файл, даже если он определенно существует с тех пор, как я использую тот же путь, чтобы загрузить его в другие сети, и он отображается правильно в окне предварительного просмотра.Ошибка при загрузке изображения в Twitter с помощью API
com.twitter.sdk.android.core.TwitterApiException: /-1/1/content:/media/external/images/media/100883/ORIGINAL/NONE/1159437588: open failed: ENOENT (No such file or directory)
W/System.err: at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:390)
W/System.err: at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
W/System.err: at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
W/System.err: at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
Некоторые Googling показали, эта ошибка должна была быть исправлена в более старой версии Twitter SDK для Android, и люди подтвердили это, но это было некоторое время назад, и я использую последнюю версию 1.13.0
.
Код, я использую, чтобы загрузить это выглядит следующим образом:
//img = Uri passed from calling method
File photo = new File(img.getPath());
TypedFile typedFile = new TypedFile("application/octet-stream", photo);
TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient(twitSession);
MediaService mediaService = twitterApiClient.getMediaService();
final StatusesService statusesService = twitterApiClient.getStatusesService();
mediaService.upload(typedFile, null, null, new Callback<Media>() {
@Override
public void success(final Result<Media> result) {
statusesService.update(input, null, null, null, null,
null, null, null, result.data.mediaIdString, new Callback<Tweet>() {
@Override
public void success(Result<Tweet> result) {
Log.d("Twitter image callback", "Successfully posted image and text to Twitter!");
}
@Override
public void failure(TwitterException e) {
if (result != null) {
Log.e("Twitter image callback", "Result is - " + result.toString());
}
Log.d("Twitter image callback", "Failed to post image and text to Twitter!");
}
});
}
@Override
public void failure(TwitterException e) {
Log.d("Twitter image callback", "Failed to upload image to Twitter!");
e.printStackTrace();
}
});
Кто-нибудь знает, что пошло не так здесь и как я могу получить эту работу?
Это выглядит очень сложным, чтобы просто загрузить файл. Я не уверен, что это использует внешнюю библиотеку (TwitterApiClient), но если нет, вам нужно убедиться, что вы загружаете менее 5 МБ на кусок. Также вам нужно использовать запрос MultiPart, который вызывает INIT, APPEND (с двоичным) и END. – Linvi
Если вы можете использовать C#, я бы порекомендовал библиотеку, которую я написал ([Tweetinvi] (https://github.com/linvi/tweetinvi)), которая позволит вам опубликовать изображение так же просто, как: 'var media = Upload.UploadImage (File.ReadAllBytes («путь»)); – Linvi