2015-09-30 2 views
-1

Я хочу получить профиль pic для подписанного пользователя. Я использую следующую функцию. Имя пользователя возвращается, но профиль pic в переменной mIcon11 возвращает значение null.В Android, как получить профиль pic пользователя, который подписал в

String username; 
Bitmap mIcon11 = null; 
private void getProfileInformation() { 
    try { 
     if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
      Person currentPerson = Plus.PeopleApi 
        .getCurrentPerson(mGoogleApiClient); 
      username = currentPerson.getDisplayName(); 
      String personPhotoUrl = currentPerson.getImage().getUrl(); 

      try { 
       InputStream in = new java.net.URL(personPhotoUrl).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 

     } else { 
      Toast.makeText(getApplicationContext(), 
        "Person information is null", Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Я устанавливаю в ImageView и TextView в моем экране следующим образом

imageview.setImageBitmap(mIcon11); 
textview.setText(username); 

текст становится распечатанный, но изображение null.Where я ошибся в своем коде. Пожалуйста, помогите мне!!

+0

подписан в какой? – Elltz

+0

, подписанный в googleplay – Aparna

ответ

2

Попробуйте это:

if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
       Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 

       String personName = currentPerson.getDisplayName(); 
       String personPhoto = currentPerson.getImage().getUrl(); 
       System.out.println(personPhoto); 
       //We can adjust size of image according to our requirements: here 200 is the size of image 
       String personImage=personPhoto.substring(0,personPhoto.lastIndexOf("=")+1)+"200"; 
       System.out.println(personImage); 

      } 

Вы получите изображение URL в personImage String, а затем вы можете загрузить ее с помощью Пикассо http://square.github.io/picasso/

Picasso.with (контекст) .load (personImage) .into (ImageView);

+0

Большое спасибо за ваш ответ, но мое приложение не очень много работает с изображениями, и мне просто нужно было отобразить pic в виде профиля в моем приложении. Мне все еще нужно сделать это в отдельном потоке, и мне нужно скачать Picasso. Будет ли это приложение очень тяжелым? – Aparna

+0

Нет, он не сделает приложение тяжелым вообще, вместо этого он позволяет вам кэшировать изображения, а не загружать изображения в отдельный поток снова и снова, вы также можете использовать обратные вызовы на пикассо, а также изменять размер изображений и преобразовывать их – Aakash

+0

Ничего себе это сработало и мое приложение тоже не стало тяжело .. спасибо много !!! – Aparna

1

Попробуйте сделать это в отдельной теме.

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView image; 

    public DownloadImageTask(ImageView image) { 
     this.image = image; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     // Do downloading stuff 
     return bitmap; 
    } 

    protected void onPostExecute(Bitmap result) { 
     image.setImageBitmap(result); 
    } 
} 

Это будет так просто, если вы можете использовать Picasso или Volley библиотеки.

С Пикассо, его так просто, как это

Picasso.with(context).load(personPhotoUrl).into(imageview); 
+0

Большое спасибо за ваш ответ, но мое приложение не очень много работает с изображениями, и мне просто нужен рисунок, чтобы отображать как профиль в моем приложении. Мне все еще нужно сделать это в отдельном потоке, и мне нужно скачать Picasso. Будет ли это приложение очень тяжелым? – Aparna

+0

Я всегда предлагал отдельный поток для сетевых действий. Но моим предложением будет Пикассо. Его чуть-чуть 120 КБ. http://repo1.maven.org/maven2/com/squareup/picasso/picasso/2.5.2/picasso-2.5.2.jar. Главным преимуществом использования этого будет эффективное управление памятью растровых изображений. – Ads

+0

Ничего себе это сработало, и мое приложение тоже не стало слишком тяжелым. – Aparna

0

Загрузка данных с сервера всегда должно быть сделано от потока пользовательского интерфейса. Вы можете использовать https://developer.android.com/reference/android/os/AsyncTask.html или библиотеки с открытым исходным кодом, такие как glide, picasso.

Смежные вопросы