Я создал адаптер синхронизации контактов. Все работает нормально, но мне нужно еще кое-что. Если по какой-то причине синхронизация не завершается успешно, я хочу показать сообщение, подобное тому, которое показывает учетная запись Google, когда синхронизация не удалась.
Как показать сообщение об ошибке синхронизации
Ответы (2)
Решение состояло в том, чтобы установить задержку результата синхронизации. После этой задержки синхронизация будет перезапущена.
try {
DO THE SYNCHRONIZATION
} catch (AuthenticationException e) {
Log.e(TAG, "AuthenticationException");
syncResult.stats.numAuthExceptions++;
syncResult.delayUntil = 180;
} catch (ParseException e) {
Log.e(TAG, "ParseException");
syncResult.stats.numParseExceptions++;
} catch (IOException e) {
Log.e(TAG, "IOException");
syncResult.stats.numIoExceptions++;
syncResult.delayUntil = 180;
}
person
nikmin
schedule
12.02.2013
Он покажет сообщение в нижней части экрана, подобное изображенному на картинке, и повторит попытку синхронизации через количество секунд, указанное с помощью
syncResult.delayUntil = numOfSeconds;
.
- person nikmin; 12.02.2013
Я думаю, вам нужны тосты
Простой тост:
Toast.makeText(context, text, duration).show();
text
— это, как вы понимаете, текст, который вы хотите отобразить. duration
— это Toast.LENGTH_SHORT или Toast.LENGTH_LONG (зависит от того, как долго Toast будет виден)
Более сложный подход с изображением в тосте: (sync_toast_lo.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/SynctoastLayout"
android:background="@android:color/black">
<ImageView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:src="@drawable/your_logo"
android:layout_toLeftOf="@+id/textView"
android:layout_margin="5dip"
android:id="@+id/syncLogo">
</ImageView>
<TextView
android:id="@+id/syncFailedText"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="The sync has failed!"
android:gravity="center"
android:textColor="@android:color/white">
</TextView>
</RelativeLayout>
И в вашем коде:
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.Sync_toast_lo,
(ViewGroup) findViewById(R.id.SynctoastLayout));
Toast toast = new Toast(this);
toast.setView(view);
toast.show();
person
Martin Grohmann
schedule
12.02.2013
НЕТ, я не хочу тост. Я очень хорошо знаю, что такое тост. Я хочу показывать сообщение в учетных записях и синхронизировать точно так же, как учетная запись Google показывает сообщение при сбое синхронизации
- person nikmin; 12.02.2013
не должен был быть отклонен... Единственная проблема с тостом заключается в том, что он находится в классе бездействия в SyncAdapter.java
- person Brandon; 18.02.2015
+ синхронизация выполняется в фоновом режиме и отображение всплывающего уведомления от bg не работает.
- person User; 09.05.2017
catch
блоки вonPerformSync
, которые перехватывают исключения, и в этих блоках у меня естьsyncResult.stats.numParseExceptions++
иsyncResult.stats.numIoExceptions++
. Я надеюсь, что это правильный способ поймать исключения. Если это так, мне нужно, как показать сообщение - person nikmin   schedule 12.02.2013