2015-12-07 3 views
0

В моем приложении пользователь может войти в систему, используя свою учетную запись Google+. Среди прочего мы получаем изображение профиля пользователя.Получение нового профиля профиля Google+ на Android

Мы обнаружили, что если пользователь меняет свое изображение в Интернете, это изменение не отражается на телефоне. Я предполагаю, что это связано с тем, что выход из нашего приложения не выходит из Google и поэтому обновление не производится.

Есть ли способ получить последнее изображение. Я бы предпочел избегать «обходов», которые могут не сработать в будущем.

ответ

0

Таким образом, мы будем считать, что мы есть кнопка входа в систему, которая запускает метод, который первым проверяет подлинность нас и, конечно, дают нам необходимы данные login.setOnClickListener(view -> syncGoogleAccount());

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

public String findGmailAccount() { 

    AccountManager am = AccountManager.get(context); 
    Account[] accounts = am.getAccounts(); 

    if (accounts.length > 0) { 
     for (int j = 0; j < accounts.length; j++) { 
      Account account = accounts[j]; 
      if (account.type != null && account.type.equals("com.google")) { 

       String email = account.name; 
       return email; 

      } else 

      { 

       return null; 

      } 
     } 
    } 


    return null; 
} 


public void syncGoogleAccount() { 

    if (isNetworkAvailable()) { 
     String accountarrs = findGmailAccount(); 
     if (accountarrs != null) { 
      //you can set here account for login 
      getTask(register.this, accountarrs, SCOPE).execute(); 

     } else { 
      Toast.makeText(mContext, "No Google Account Sync!", 
        Toast.LENGTH_SHORT).show(); 
     } 
    } else { 
     Toast.makeText(mContext, "No Network Service!", 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

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

public boolean isNetworkAvailable() { 

    ConnectivityManager cm = (ConnectivityManager) mContext 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     Log.e("Network Testing", "***Available***"); 
     return true; 
    } 
    Log.e("Network Testing", "***Not Available***"); 
    return false; 
} 

, а затем, если мы вошли в системе мы называем наш метод информации геттера, который получает нашу информацию с Img URL включены

public static void getUserInformationFromAccount() { 
    try { 
     System.out.println("On Home Page***\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" 
       + AbstractGetNameTask.GOOGLE_USER_DATA); 
     JSONObject profileData = new JSONObject(
       AbstractGetNameTask.GOOGLE_USER_DATA); 

     if (profileData.has("picture")) { 
      String userImageUrl = profileData.getString("picture"); 
      new GetImageFromUrl().execute(userImageUrl); 
     } 

     if (profileData.has("name")) { 
      myname = profileData.getString("name"); 
      userDetails.setName(myname); 


     } 
     if (profileData.has("gender")) { 
      gender = profileData.getString("gender"); 

     } 
     if (profileData.has("birthday")) { 
      birthday = profileData.getString("birthday"); 

     } 


    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

нашей ссылкой на изображение асинхр который загружает наше изображения/изображение профиля пользователя

public static class GetImageFromUrl extends AsyncTask<String, Void, Bitmap> { 
    @Override 
    protected Bitmap doInBackground(String... urls) { 
     Bitmap map = null; 
     for (String url : urls) { 
      map = downloadImage(url); 
     } 
     return map; 
    } 

    // Sets the Bitmap returned by doInBackground 
    @Override 
    protected void onPostExecute(Bitmap result) { 
     profilepic.setImageBitmap(result); 
     CommonMethods.saveUserImageToSd(result, Constant.GOOGLE_IMAGE, Constant.DISPLAY_IMAGE); 
    } 

    // Creates Bitmap from InputStream and returns it 
    private Bitmap downloadImage(String url) { 
     Bitmap bitmap = null; 
     InputStream stream = null; 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 

     try { 
      stream = getHttpConnection(url); 
      bitmap = BitmapFactory.decodeStream(stream, null, bmOptions); 
      stream.close(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return bitmap; 
    } 

    // Makes HttpURLConnection and returns InputStream 
    private InputStream getHttpConnection(String urlString) 
      throws IOException { 
     InputStream stream = null; 
     URL url = new URL(urlString); 
     URLConnection connection = url.openConnection(); 

     try { 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       stream = httpConnection.getInputStream(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return stream; 
    } 
} 
0

Причиной того же изображения профиля может быть сохраненный кэш изображения. Попробуйте удалить кеш из библиотеки загрузки изображений, которую вы используете. Я использую библиотеку Universal Image Loader, и у нее есть возможность удаления кеша.

Попробуйте это может быть, это может помочь вам в некотором роде.

Могу ли я узнать, какую библиотеку вы используете для загрузки изображения?

EDIT:

Если вы хотите получить профиль Pic затем нажмите на URL т.е. запроса URL

https://www.googleapis.com/plus/v1/people/10343557736...774874?fields=image&key={YOUR_API_KEY} 

Вы просто должны пройти UserId и ваш ключ API. После этого вы получите ответ вроде.

{ 
"image": { 
    "url": "https://lh3.googleusercontent.com/-xIeb3BMYFMU/AAAAAAAAAAI/AAAAAAAAAhU/gQOwkKFA2OE/photo.jpg?sz=50", 
    "isDefault": false 
} 
} 

Вы можете изменить размер в соответствии с вашими потребностями, как sz=150

Когда вы будете использовать этот URL убедитесь, что кэш отключен от загрузки изображений библиотеки. После этого, когда вы будете извлекать изображение пользователя, он будет отображать последнее изображение профиля, а не предыдущее изображение, хранящееся в кеше.

+0

Я непосредственно загружаю изображение, используя URL-адрес, указанный Google+ при подключении. – theblitz

+0

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

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