2014-11-29 3 views
1

나는 다음과 같은 코드를 트위터에 이미지를 업로드하려고하지만 한계 오류 얻을 :수 없습니다

ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.setOAuthConsumerKey(TwitterConst.CONSUMER_KEY); 
builder.setOAuthConsumerSecret(TwitterConst.CONSUMER_SECRET); 

String access_token = mSharedPreferences.getString(TwitterConst.PREF_KEY_TOKEN, ""); 
String access_token_secret = mSharedPreferences.getString(TwitterConst.PREF_KEY_SECRET, ""); 

AccessToken accessToken = new AccessToken(access_token, access_token_secret); 
Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken); 

StatusUpdate status = new StatusUpdate("Sample message: " + args[0] + " - Download it from Google Play at goo.gl/xxxxxx"); 
if (foto_to_share.equals("https://www.mywebsite.com/Folder/default/fb_stub.png")) { 
    status.setMedia(String_to_File("https://www.mywebsite.com/Folder/default/fb_stub.png")); 
} else { 
    status.setMedia(String_to_File("http://www.mywebsite.com/Folder/upload/" + session_userid + "/" + foto_to_share)); 
} 
twitter4j.Status response = twitter.updateStatus(status); 

첫 번째 이미지 1백39킬로바이트이며, 두 번째 하나는 140KB입니다. 두 이미지는 웹에 있으며, String_to_File 메서드는이를 SD 카드에 다운로드합니다.

내가 이미지를 게시 할 수 없기 때문에 내가 아는 한도에 도달하지 못했지만 메시지를 트윗 할 수 있습니다. 그러나이 String_to_File 메서드는 첫 번째 (스텁) 이미지를 SD 카드에 저장하기 때문에 몇 가지 문제가 있다고 생각합니다. 그러나 두 번째 파일을 저장할 때 열 수 없기 때문에 손상되었거나 무언가가 있습니다.

public File String_to_File(String img_url) { 

      try { 
       File rootSdDirectory = Environment.getExternalStorageDirectory(); 

       casted_image = new File(rootSdDirectory, "attachment.jpg"); 
       if (casted_image.exists()) { 
       casted_image.delete(); 
       } 
       casted_image.createNewFile(); 

       FileOutputStream fos = new FileOutputStream(casted_image); 

       URL url = new URL(img_url); 
       HttpURLConnection connection = (HttpURLConnection) url 
        .openConnection(); 
       connection.setRequestMethod("GET"); 
       connection.setDoOutput(true); 
       connection.connect(); 
       InputStream in = connection.getInputStream(); 

       byte[] buffer = new byte[1024]; 
       int size = 0; 
       while ((size = in.read(buffer)) > 0) { 
       fos.write(buffer, 0, size); 
       } 
       fos.close(); 
       return casted_image; 

      } catch (Exception e) { 

       System.out.print(e); 
       // e.printStackTrace(); 

      } 
      return casted_image; 
} 

오류 :

11-29 18:14:23.090: W/System.err(14264): 403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following). 
11-29 18:14:23.090: W/System.err(14264): message - Error creating status. 
11-29 18:14:23.090: W/System.err(14264): code - 189 
11-29 18:14:23.090: W/System.err(14264): Relevant discussions can be found on the Internet at: 
11-29 18:14:23.090: W/System.err(14264): http://www.google.co.jp/search?q=2fc5b7cb or 
11-29 18:14:23.090: W/System.err(14264): http://www.google.co.jp/search?q=0e8e77fd 
11-29 18:14:23.090: W/System.err(14264): TwitterException{exceptionCode=[2fc5b7cb-0e8e77fd], statusCode=403, message=Error creating status., code=189, retryAfter=-1, rateLimitStatus=null, version=4.0.2} 
11-29 18:14:23.090: W/System.err(14264): at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:163) 
11-29 18:14:23.090: W/System.err(14264): at twitter4j.HttpClientBase.request(HttpClientBase.java:53) 
11-29 18:14:23.090: W/System.err(14264): at twitter4j.HttpClientBase.post(HttpClientBase.java:82) 
11-29 18:14:23.090: W/System.err(14264): at twitter4j.TwitterImpl.post(TwitterImpl.java:1592) 
11-29 18:14:23.090: W/System.err(14264): at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:213) 
11-29 18:14:23.090: W/System.err(14264): at com.example.blgui3.BucketProfileActivity$updateTwitterStatusImage.doInBackground(BucketProfileActivity.java:3619) 
11-29 18:14:23.090: W/System.err(14264): at com.example.blgui3.BucketProfileActivity$updateTwitterStatusImage.doInBackground(BucketProfileActivity.java:1) 
11-29 18:14:23.090: W/System.err(14264): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
11-29 18:14:23.090: W/System.err(14264): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
11-29 18:14:23.090: W/System.err(14264): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
11-29 18:14:23.090: W/System.err(14264): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-29 18:14:23.100: W/System.err(14264): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-29 18:14:23.100: W/System.err(14264): at java.lang.Thread.run(Thread.java:864) 

어떤 아이디어?

+0

이것은 다음과 같이 중복 된 것으로 보입니다. http://stackoverflow.com/questions/19174856/403the-request-is-understood-but-it-has-been-refused-twitter-android – Jim

+0

나는 최신 twitter4j를 가지고 있습니다. 도서관. – erdomester

답변

0

라이브러리에서 오류라고 생각하지 않으면 요청에 대해 보안 연결을 사용하지 않는 것일 수 있습니다. 여기에 트위터 문서를 참조하십시오 : 나는 문제를 발견하고는 트위터 관련이없는, 그래서이 항목은 삭제해야

https://dev.twitter.com/overview/api/ssl

1

.

문제는 내 서버에 업로드 된 이미지의 이름에 특수 문자가 삭제되어 불일치가 발생했기 때문입니다. 이것이 String_to_File()이 my_image.png를 찾고 있었기 때문에 이미지를 다운로드 할 수 없었지만, 발견 된 것은 모두 myimage.png이었습니다.