小编Adm*_*kka的帖子

2048 kb 的 WorkManager 光标窗口分配失败

我使用了 WorkManager 版本android.arch.work:work-runtime:1.0.0-beta03。我使用这个 workmanager 使用 OneTimeWorker 以动态间隔时间将文件上传到服务器。

这就是我所做的。希望你能检查一下并告诉我我错在哪里以及解决它的替代方法。

首先,我提出工作要求

    OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorkRequest.class)
            .setInitialDelay(0), TimeUnit.SECONDS)
            .addTag("UploadData")
            .build();

    WorkManager
            .getInstance()
            .getWorkInfoByIdLiveData(workRequest.getId())
            .observeForever(workInfoObserverBackground);
    WorkManager
            .getInstance()
            .enqueueUniqueWork("UploadData", ExistingWorkPolicy.REPLACE, workRequest);
Run Code Online (Sandbox Code Playgroud)

然后,定义观察者以听取其结果。我也从这里开始下一次运行。

workInfoObserverBackground = workInfo -> {
            if (workInfo != null){
                switch (workInfo.getState()) {
                    case SUCCEEDED:
                    case FAILURE:
                        WorkManager.getInstance().getWorkInfoByIdLiveData(workRequest.getId()).removeObserver(workInfoObserverBackground);
                        WorkManager.getInstance().cancelUniqueWork("UploadData");
                        WorkManager.getInstance().cancelAllWorkByTag("UploadData");
                        workRequest = new OneTimeWorkRequest.Builder(MyWorkRequest.class)
                                .setInitialDelay(next_interval_time_received_from_api), TimeUnit.SECONDS)
                                .addTag("UploadData")
                                .build();
                        WorkManager
                                .getInstance()
                                .getWorkInfoByIdLiveData(workRequest.getId())
                                .observeForever(workInfoObserverBackground);
                        WorkManager
                                .getInstance()
                                .enqueueUniqueWork("UploadData", ExistingWorkPolicy.REPLACE, workRequest);
                        break;
                }
            }
        };
Run Code Online (Sandbox Code Playgroud)

几分钟后(我无法记录它,因为它是随机发生的)它崩溃了,这是从 logcat 收集的堆栈跟踪。

1-15 21:46:14.806 25964-26054/com.example.app E/AndroidRuntime: FATAL EXCEPTION: pool-8-thread-1 …
Run Code Online (Sandbox Code Playgroud)

android android-workmanager

6
推荐指数
0
解决办法
279
查看次数

在 EditText 中自动显示错误文本

我正在使用类似的代码

EditText.setError("Something went wrong");
Run Code Online (Sandbox Code Playgroud)

显示 上的错误EditText。但只有感叹号R.drawable.ic_error显示图标,而不是错误文本。单击它会显示错误文本。

如何让错误文本自动显示,而不需要先触摸图标?

android android-edittext

5
推荐指数
1
解决办法
1115
查看次数

Firebase 是否会对实际上不会更改任何字段值的文档写入收费?

我必须appVersion在名为userA. 我更新appVersion到 Firestore 并且不关心 remote appVersion

如果 remoteappVersion等于 local,Firebase 会向我收费appVersion吗?谢谢。

编辑: 我正在使用 Blaze 计划,我必须支付 $0.18/100K。看起来它很小,但对于庞大的用户来说则不然。

我有一个这样的 Firestore 数据库。 在此处输入图片说明 我在 Android/Java 中使用此代码来更新 appVersion:

String appVersion = "2.0.0";
App.getInstance().mFirestoreUsers
   .document("GgRu62z0b2CgQFbgNebe")
   .update("appVersion", appVersion)
   .addOnSuccessListener(aVoid -> {
      LogWrapper.i(TAG, "update appversion complete: " + appVersion);
 });
Run Code Online (Sandbox Code Playgroud)

我想问的是,如果 Firestore 上的用户文档的 appVersion 值为“2.0.0”并且我使用上面的代码发送相同的值,Firebase 会计算 1 次写入还是 0 次?

firebase google-cloud-firestore

5
推荐指数
1
解决办法
527
查看次数

使用自定义 UncaughtExceptionHandler 升级 Firebase Crashlytics

在工作时Update your apps to use latest Firebase Crashlytics SDKs before November 15, 2020,在我激活自定义后UncaughtExceptionHandler,它不会再向 Crashlytics 发送崩溃。

下面的代码我将其设置onCreate()Application.

        FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
        crashlytics.setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG); // only release able to send.
        crashlytics.sendUnsentReports(); // send reports
        Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
            FirebaseCrashlytics.getInstance().recordException(e); // record exception.
            // below things are restart app when crash appeared.
            PackageManager packageManager = getPackageManager();
            Intent intent = packageManager.getLaunchIntentForPackage(getPackageName());
            if (intent != null) {
                ComponentName componentName = intent.getComponent();
                Intent mainIntent = Intent.makeRestartActivityTask(componentName);
                startActivity(mainIntent);
                Runtime.getRuntime().exit(0);
            } …
Run Code Online (Sandbox Code Playgroud)

android firebase crashlytics

5
推荐指数
1
解决办法
1125
查看次数

使BottomNavigationView停留在其他视图下

我已经实现了BottomNavigationView(BNV)。我的BNV始终停留在其他视图的顶部,如何使其停留在其他视图的顶部?

这是我的看法

<RelativeLayout xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
<android.support.design.widget.BottomNavigationView
            android:id="@+id/bottomNavi"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/color_bottom_navi"
            app:itemBackground="@drawable/selector_navi_bottom"
            app:itemIconTint="@color/colorPrimary"
            app:itemTextColor="@color/colorPrimary"
            app:menu="@menu/bottom_navigation" />
        <FrameLayout
            android:id="@+id/frm_content_full"
            android:layout_width="match_parent"
            android:background="@color/colorPrimaryDark"
            android:layout_height="match_parent" />
    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

这就是它所显示的。

在此处输入图片说明

谢谢。

编辑1: BNV下方的空间用于AdView,我的问题是我使用上述代码时,屏幕将变为蓝色,BNV将被隐藏。

android android-layout bottomnavigationview

4
推荐指数
1
解决办法
4547
查看次数

Kotlin DataBinding将静态函数传递到布局xml

在Java中,我可以使用以下方法轻松地将静态函数传递给布局xml:

public static String formatUnixTime(long timeInSeconds, String pattern) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, Locale.US);
    String value = simpleDateFormat.format(new Date(timeInSeconds * 1000));

    return value;
}
Run Code Online (Sandbox Code Playgroud)

在xml中:

android:text='@{Utils.formatUnixTime(model.start_time, "hh:mm:ss")}'
Run Code Online (Sandbox Code Playgroud)

但是我在科特林尝试过companion但没有运气。它说

error: cannot find symbol
import my.package.name.HistoryItemBindingImpl;
                      ^
  symbol:   class HistoryItemBindingImpl
  location: package my.package.name
Run Code Online (Sandbox Code Playgroud)

这就是我在科特林尝试过的

class Utils {
    companion object {
        fun formatUnixTime(timeInSeconds : Long, pattern: String) : String {
            val simpleDateFormat = SimpleDateFormat(pattern, Locale.US)
            val value = simpleDateFormat.format(Date(timeInSeconds * 1000))

            return value
        }
    }
Run Code Online (Sandbox Code Playgroud)

并在xml中

android:text='@{Utils.Companion.formatUnixTime(model.start_time, "hh:mm:ss")}'
Run Code Online (Sandbox Code Playgroud)

真希望有人能帮忙。谢谢!

使用@Max …

android kotlin android-databinding

4
推荐指数
2
解决办法
1328
查看次数

Retrofit 2 - Post FieldMap 与 Body 对象

我想使用 Retrofit 发布一个 HashMap 和一个对象。我在下面尝试了此代码,但收到了IllegalArgumentException.

@POST("update")
Call<RSP010> postApi010(@FieldMap HashMap<String, String> defaultData, @Body User user);
Run Code Online (Sandbox Code Playgroud)

逻辑猫

java.lang.IllegalArgumentException: @FieldMap parameters can only be used with form encoding. (parameter #1)
Run Code Online (Sandbox Code Playgroud)

但是当我添加@FormUrlEncoded. 它说

java.lang.IllegalArgumentException: @Body parameters cannot be used with form or multi-part encoding. (parameter #2)
Run Code Online (Sandbox Code Playgroud)

更新代码

public static HashMap<String, String> defaultData(){
    HashMap<String, String> map = new HashMap<>();
    map.put("last_get_time", String.valueOf(SharedPreferencesHelper.getLongValue(AppConstants.LAST_GET_UPDATE)));
    map.put("duid", SharedPreferencesHelper.getStringValue(AppConstants.DUID));
    return map;
Run Code Online (Sandbox Code Playgroud)

我要发布的对象

int profile_id;
private String name;
private String name_kana; // ?????
private int gender; // 1 …
Run Code Online (Sandbox Code Playgroud)

android retrofit retrofit2

2
推荐指数
1
解决办法
9646
查看次数

错误:不支持类型'int []'的字段 如何将整数列表添加到Realm?

我正在使用Realm Database创建Realm对象.我想将List声明integer为我的对象.这是我的班级:

@PrimaryKey
private int id;
private String name;
private String image;
private String thumbnail;
private String message;
private int[] genre;
private int[] method;
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我得到错误

Error:(12, 8) error: Type 'int[]' of field 'genre' is not supported
Run Code Online (Sandbox Code Playgroud)

怎么办?我试过List<Integer>但没有运气.

然后我意识到Integer对象没有延伸,RealmObject所以我不能使用它.

任何想法都会有帮助.谢谢.

java int android list realm

0
推荐指数
1
解决办法
1114
查看次数