2013-04-05 1 views
0

Exception с помощью пытается чирикать после аутентификации, Twitter Войти Errortweeter4j и сообщение от андроида

если { Uri Uri = getIntent() GetData() (isTwitterLoggedInAlready (!)).

 if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { 
      // oAuth verifier 
      Log.d("Inside","inside"); 
      String verifier = uri 
        .getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); 

      try { 
       // Get the access token 
       AccessToken accessToken = twitter.getOAuthAccessToken(
         requestToken, verifier); 

       // Shared Preferences 
       Editor e = mSharedPreferences.edit(); 

       // After getting access token, access token secret 
       // store them in application preferences 
       e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); 
       e.putString(PREF_KEY_OAUTH_SECRET, 
         accessToken.getTokenSecret()); 
       // Store login status - true 
       e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); 
       e.commit(); // save changes 

       Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); 

       // For now i am getting his name only 
       long userID = accessToken.getUserId(); 
       User user = twitter.showUser(userID); 
       String username = user.getName(); 
       Log.d("usrnm",username); 
       // Displaying in xml ui 

      } catch (Exception e) { 
       // Check log for login errors 
       Log.e("Twitter Login Error", "> " + e.getMessage()); 
      } 
     } 




private void loginToTwitter() { 
     Log.d("user",""+isTwitterLoggedInAlready()); 
     // Check if already logged in 
     if (!isTwitterLoggedInAlready()) { 
      ConfigurationBuilder builder = new ConfigurationBuilder(); 
      builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
      builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 
      Configuration configuration = builder.build(); 

      TwitterFactory factory = new TwitterFactory(configuration); 
      twitter = factory.getInstance(); 

      try { 
       requestToken = twitter 
         .getOAuthRequestToken(TWITTER_CALLBACK_URL); 
       this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
         .parse(requestToken.getAuthenticationURL()))); 
      } catch (TwitterException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      // user already logged into twitter  
      new updateTwitterStatus().execute("Hello"); 

     } 
    } 

трассировки стека

04-12 11:21:52.479: E/Twitter Login Error(1065): > null 
+0

Опубликуйте также стек. –

+0

- IceMAN я его обновил – hemant

+0

Я действительно думаю, что вы должны опубликовать это как другой вопрос. Обновленный вопрос и, возможно, мой ответ изменят весь характер исходного вопроса и будут вводить в заблуждение будущих посетителей. Верните исходный вопрос, отправьте новый вопрос, и я постараюсь помочь. –

ответ

1

Это решение для загрузки изображения в Twitter через API TwitPic. Вам необходимо будет зарегистрировать свой счет в своем Developer Section

Решение, которое я нахожу, может считаться двухэтапным решением.

Во-первых, когда пользователь нажимает кнопку сообщения, я сначала беру изображение и загружаю его в TwitPic. Оттуда я беру URL, который возвращается TwitPic (String url = upload.upload(finalFile);).

На втором шаге этого кода в экземпляре String (String finalStatusWithURL) я захватываю содержимое EditText, а затем добавляю URL-адрес с шага 1 к нему. С этим сделано сообщение, наконец, отправлено в Twitter.

Configuration conf = new ConfigurationBuilder() 
.setOAuthConsumerKey(TWITTER_CONSUMER_KEY) 
.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET) 
.setOAuthAccessToken(twit_access_token) 
.setOAuthAccessTokenSecret(twit_access_token_secret) 
.setMediaProviderAPIKey(TWIT_PIC_API) 
.build(); 

// SET THE FILE PATH (THIS IS UPDATED! NOTICE THE CHANGES MADE!!) 
Uri tempUri = getImageUri(getApplicationContext(), bmpFinal); 
File finalFile = new File(getRealPathFromURI(tempUri)); 

// THIS IS IMPORTANT. TWITPIC NEEDS THE ACTUAL/ABSOLUTE PATH OF THE IMAGE. JUST THE URI DOES NOT WORK!!!! 

ImageUpload upload = new ImageUploadFactory(conf).getInstance(MediaProvider.TWITPIC); 

String url = upload.upload(finalFile); 
Log.e("TWITTER URL RESPONSE", url); 

// END OF FIRST STEP: 

// SECOND STEP IS TO UPLOAD TO TWITTER 

ConfigurationBuilder builder = new ConfigurationBuilder(); 

builder.setOAuthConsumerKey(YOUR_TWITTER_CONSUMER_KEY); 
builder.setOAuthConsumerSecret(YOUR_TWITTER_CONSUMER_SECRET); 

AccessToken accessToken = new AccessToken(your_twit_access_token, your_twit_access_token_secret); 
Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken); 

String finalStatusWithURL = null; 

if (finalStatusMessage.trim().length() > 0) { 

    finalStatusMessage = editStatusUpdate.getText().toString(); 
    finalStatusWithURL = finalStatusMessage + ":\n " + url; 

} else { 
    finalStatusWithURL = url; 
} 

twitter4j.Status response = twitter.updateStatus(finalStatusWithURL); 
Log.e("TWITTER RESPONSE", response.getText()); 

Это метод, чтобы получить реальный путь изображения, который вы хотите загрузить:

// HELPER METHOD TO GET REAL PATH FOR THE SELECTED IMAGE 
public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
} 

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
    return Uri.parse(path); 
} 

UPDATE:

Сделайте это, прежде чем пытаться загрузить:

Bitmap bmpFinal = getBitmapFromURL("http://www.cosmopolitanclublahore.com/wp-content/uploads/2011/06/mexicanfoodrestaurant.jpg"); 

И метод, возвращающий растровое изображение:

// THE METHOD TO DOWNLOAD THE IMAGE INTO A BITMAP 
public Bitmap getBitmapFromURL(String strURL) { 
    try { 
     URL url = new URL(strURL); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

Возможно, вам потребуется адаптировать несколько вещей. В моем коде используются изображения, выбранные пользователем из галереи, или изображение, которое он снимает с помощью камеры. Вам нужно загрузить изображение, снятое с Интернета. Расстояние может варьироваться, и код, возможно, потребуется изменить.

+0

-IceMAN Что такое initialURI ?? Я пытаюсь инициализировать его как \t URI initialURI = новый URI («http://www.cosmopolitanclublahore.com/wp-content/uploads/2011/06/mexicanfoodrestaurant.jpg»); но он не работает – hemant

+1

@hemant: «initialURI» - это экземпляр Uri, который я использую в своем коде. Ури не совпадает с URL. Вам нужно будет загрузить изображение из URL-адреса в растровое изображение, а затем продолжить код. Это потребует нескольких изменений. Дайте мне минуту или две, чтобы обновить мой пост. –

+0

Ok Take Your Time .. и дайте мне знать .. http://www.cosmopolitanclublahore.com/wp-content/uploads/2011/06/mexicanfoodrestaurant.jpg это URL-адрес изображения, который мне нужно загрузить в мой твитер .. – hemant