2014-10-07 3 views
1

Я совершенно новый для android.Получение изображения изображения профиля из twitter с помощью Parse twitter login для android

Я использую Parse as Baas для проверки подлинности Twitter, насколько я знаю, я могу получить объект com.parse.twitter.Twitter, а не объект twitter4j.Twitter.

Я пытаюсь загрузить и отобразить изображение профиля изображения с твиттере в андроид приложение с этим кодом:

String twitterURL = "https://api.twitter.com/1.1/users/profile_banner.json?screen_name=myScreenName"; 

// согласно документу здесь https://dev.twitter.com/rest/reference/get/users/profile_banner

И тогда я хотел бы использовать Picasso Picasso.with (aView.getContext()). load (twitterURL) .resize (100,150) .centerCrop(). в (imageView);

Но ничего не отображается ...

Я также попытался с этим кодом:

URL url = new URL(twitterURL); 
InputStream is = (InputStream) url.getContent(); 
Drawable d = Drawable.createFromStream(is, "src name"); 

Но получаю ошибку FileNotFoundException.

Большое спасибо за любую помощь.

+0

Что вы получаете от вызова API? Насколько мне известно, вам нужно пройти аутентификацию с помощью Twitter для всех вызовов API, и вы, похоже, не делаете этого. – michaelcarrano

+0

Спасибо за ваш ответ. Я проверяю подлинность на моей странице входа с учетной записью twitter. В этот момент я сохраняю в своей базе данных Parse имя экрана пользователя, чтобы позже получить изображение своего профиля с указанным выше кодом. Когда я использую код InputStream, я получаю исключение FileNotFoundException. С Пикассо не исключение. Может быть, того факта, что я аутентифицируюсь на экранах сорока, недостаточно? –

ответ

3

Я имел эту проблему сам и не нашел хороший ответ, так что ваш код помог мне понять это!

Исходный файл InputStream на самом деле находится в формате JSON (например, {"id": 4646546, "name": "ian", "profile_image_url": "http://pbs.twimg.com/profile_images/1138330557/ian-straw_normal.jpg"}). Таким образом, вы не можете просто создать оттуда. Документ Twitter API предоставляет пример: https://dev.twitter.com/rest/reference/get/users/show.

Вы можете избавиться от «_normal», если хотите получить изображение в оригинальном размере.

Используя этот профиль_image_url, вы можете получить изображение, которое вас интересует. Вы можете использовать Android Query или Picasso для этого. Вы также можете сделать еще один HttpRequest, если вы не делаете этого в основном потоке пользовательского интерфейса.

Вы код становится (я пренебрег попытку/уловы блоков для удобства чтения):

HttpClient client = new DefaultHttpClient(); 
HttpGet verifyGet = new HttpGet(
    "https://api.twitter.com/1.1/users/show.json?screen_name=" + handle); 
ParseTwitterUtils.getTwitter().signRequest(verifyGet); 
HttpResponse response = client.execute(verifyGet); 
InputStream is = response.getEntity.getContent(); 
JSONObject responseJson = new JSONObject(IOUtils.toString(is)); 
url = responseJson.getString("profile_image_url"); 

final AQuery androidQuery = new AQuery(this); 
//fetch and set the image from internet, cache with file and memory 
androidQuery.id(R.id.image1).image(url); 

Примечания: AQuery дает гораздо больше возможностей. Вы можете получить изображение непосредственно в растровом изображении, если хотите.См.: https://code.google.com/p/android-query/wiki/AsyncAPI#Bitmap

+1

это работает !! ты гений!! Большое спасибо. Мне просто нужно было взять этот код и добавить apache для использования IOUtils. –

+0

приветственный чувак;) – ian

0

Я не проверял это сам, но считаю, что он должен указывать на вас в правильном направлении.

Теперь API Twitter требует, чтобы вы были аутентифицированы для каждого созданного запроса API.

HttpClient client = new DefaultHttpClient(); 
HttpGet verifyGet = new HttpGet(
    "https://api.twitter.com/1.1/users/profile_banner.json?screen_name=myScreenName"); 
ParseTwitterUtils.getTwitter().signRequest(verifyGet); 
HttpResponse response = client.execute(verifyGet); 
HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); 

Так что я думаю, что у вас было два вопроса:

  1. Вы не кажется ли, чтобы делать любой запрос HTTP, вы только создавая URL.
  2. Вы не подписывали запрос Twitter

https://parse.com/docs/android_guide#twitterusers-requests

+0

Спасибо за помощь. Я протестировал ваше решение. Кажется, это очень интересное направление (похоже, ссылка тоже говорит об этом). Но пока изображение не отображается. InpuStream не является нулевым, но я не могу сказать, что внутри есть кусок. Поэтому я пытаюсь преобразовать InputStream в способную к рисованию: Drawable d = Drawable.createFromStream (is, "src name"); \t \t \t \t \t imageView.setImageDrawable (d); Но объект d по-прежнему равен нулю. –

+1

У кого-то была такая же проблема? –