我使用了 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) 我正在使用类似的代码
EditText.setError("Something went wrong");
Run Code Online (Sandbox Code Playgroud)
显示 上的错误EditText。但只有感叹号
显示图标,而不是错误文本。单击它会显示错误文本。
如何让错误文本自动显示,而不需要先触摸图标?
我必须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 次?
在工作时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) 我已经实现了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将被隐藏。
在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 …
我想使用 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) 我正在使用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所以我不能使用它.
任何想法都会有帮助.谢谢.