我收到了来自谷歌的电子邮件:
我们最近宣布将弃用 install_referrer 意图广播机制。由于您的一个或多个应用使用此 Intent 来跟踪引荐,我们希望确保您在 2020 年 3 月 1 日之前进行切换。在此日期之后,Play 商店应用的新版本将不再在应用安装后广播 install_referrer Intent。
我没有install_referrer直接使用,但是在浏览合并的清单时,我发现一些以包名命名的 firebase 服务com.google.firebase.measurement使用它。
我的 firebase 依赖项更新到最新版本。
我应该关心它吗?
模拟器版本更新后,我无法使用 Firebase Google/anonymous 登录或使用 firestore。
网络类型完整/良好。
更新: 看起来与 Firebase 的连接非常慢,大约需要 5 分钟才能登录,并且获取数据非常慢,但是模拟器浏览器中的互联网工作正常。
在真实设备上一切正常。
同样的情况发生在不同网络的两台机器上。
有熟悉的人吗?
解决:
将模拟器版本降级到31.2.9
android android-emulator firebase firebase-authentication google-cloud-firestore
在ViewModel和之间进行通信的正确方法是什么View,Google architecture components使用LiveData视图订阅更改并相应地更新自身,但这种通信不适用于单个事件,例如显示消息、显示进度、隐藏进度等。
有一些像SingleLiveEventGoogle 示例中的hack ,但它仅适用于 1 个观察者。一些开发人员使用EventBus但我认为当项目增长时它会很快失控。
有没有方便正确的实现方式,你是如何实现的?
(也欢迎 Java 示例)
LiveData开始观察时是否可以防止接收到最后一个值?我正在考虑LiveData用作事件。
例如类似于show message,导航事件或对话框触发器之类的事件EventBus。
ViewModel与片段之间的通信有关的问题,Google给我们LiveData提供了用数据更新视图的方法,但是这种类型的通信不适用于仅需通过单个事件更新视图一次的情况,也无法保存视图的引用ViewModel并调用某些方法,因为它将导致内存泄漏。
我发现了类似的SingleLiveEvent-但它仅适用于1个观察者,不适用于多个观察者。
android android-livedata android-architecture-components mutablelivedata
我尝试使用以下代码
initLocalSettingsIfNeed()
.andThen(initGlobalSettingsIfNeed(configuration))
.doOnComplete(callback::onSuccess)
.doOnError(throwable -> callback.onError(throwable.getLocalizedMessage()))
.subscribe();
Run Code Online (Sandbox Code Playgroud)
但我有例外
由于 subscribe() 方法调用中缺少 onError 处理程序,因此未处理异常。
我想我没有正确使用这些方法,我认为可以doOnComplete doOnError用观察者内部subscribe()方法替换,我错了吗?
使用新的依赖注入库Hilt,如何在ViewModel没有构造函数参数的情况下注入一些类ViewModelFactory?是否可以?
就像在 中一样Fragment,我们只使用@AndroidEntryPoint和@Inject。
我在 crashlytics 日志中收到错误
java.lang.RuntimeException:在 com.android.billingclient.api.zzg@c300e4d android.app 中接收广播 Intent { act=com.android.vending.billing.PURCHASES_UPDATED flg=0x10 pkg=*** (has extras) } 时出错.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1577) android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(未知来源:2) android. os.Handler.handleCallback(Handler.java:938) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:368) android.app.ActivityThread.main(ActivityThread. java:7710) java.lang.reflect.Method.invoke(本机方法) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
使用标准 Google 结算库订阅 + 应用内结算
https://developer.android.com/google/play/billing/integrate
我在文档中没有看到我应该注册广播接收器,从哪里来PURCHASES_UPDATED?
在orLiveData内部观察是否安全,是否会向 中添加新的观察者并且多个观察者将在同一个中处于活动状态?例如,当我们从 导航到然后导航回时,\ in将被调用两次,并且将被调用两次。onActivityCreatedonViewCreatedLifecycleOwnerFragmentFragment AFragment BFragment AonActivityCreatedonViewCreatedFragment AviewModel.liveData.observe()
TextView具有自定义颜色属性的布局预览中不会呈现。
我已经attr.xml在值文件夹中定义了属性。
<attr name="secondary_text_color" format="color"/>
Run Code Online (Sandbox Code Playgroud)
并在 xml 中覆盖此颜色style以实现深色和浅色主题。
里面TextView:
android:textColor="?attr/secondary_text_color"
Run Code Online (Sandbox Code Playgroud)
布局预览显示错误,但应用程序按预期工作。
java.lang.NullPointerException 在 android.widget.TextView.updateTextColors(TextView.java:5773) 在 android.widget.TextView.setHintTextColor(TextView.java:5047) 在 android.widget.TextView.applyTextAppearance(TextView.java:4053)在 android.widget.TextView.(TextView.java:1604) 在 android.widget.TextView.(TextView.java:968) 在 android.widget.TextView.(TextView.java:964) 在 sun.reflect.GenerateConstructorAccessor273.newInstance (未知来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 android.view.LayoutInflater.createView(LayoutInflater.java:854) )在 android.view.LayoutInflater.createView(LayoutInflater.java:776) 在 android.view.BridgeInflater.onCreateView(BridgeInflater.java:129) 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:930) 在 android.view .LayoutInflater.onCreateView(LayoutInflater.java:950) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1004) 在 android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:308) 在 android.view.LayoutInflater.createViewFromTag( LayoutInflater.java:961)在android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)在android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)在android.view.LayoutInflater.rInflate(LayoutInflater.java:1097) )在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:682) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:501) 在 com.android .layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:353) 在 com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:404) 在 com.android.tools.idea.layoutlib.LayoutLibrary.createSession (LayoutLibrary.java:141) 在 com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:713) 在 com.android.tools.idea.rendering.RenderTask.lambda$inflate$6(RenderTask.java:第844章 844 (ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)
是否可以引用片段的 xml 布局中定义的元素(如按钮)并在另一个活动中使用它?
我尝试这样做,但对象引用为空。
fragment_date_picker.xml
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker"
android:layout_gravity="center_horizontal|top" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ok"
android:id="@+id/bt_ok"
android:layout_gravity="center" />
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
btPickTime=(Button)findViewById(R.id.bt_pickTime);
AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
final DatePickerFragment dp=new DatePickerFragment();
btOk=(Button)findViewById(R.id.bt_ok);
btOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.remove(dp);
ft.commit();
}
});
btPickTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.ll_main
,dp);
ft.commit();
}
});
Run Code Online (Sandbox Code Playgroud) 例如,我有带有图像的 Firestore 对象,我应该如何存储图像?
我应该存储arraystring( urls)array还是reference Storage(不确定是否可能,也许引用为字符串)?
感觉存储 areference更灵活,例如我们可以reference在上传图像之前创建,并且我们不依赖于url,但我想知道这是否是正确的决定。
ViewModel如果不处理,为什么建议使用架构组件process death?
例如,如果我保存状态,onSaveInstanceState状态为configuration change和都持续存在process death,而ViewModel只生存configuration change,生存process death需要从中获取状态ViewModel并使用相同的onSaveInstanceState机制。
我想念什么?
android ×12
firebase ×3
android-architecture-components ×2
dagger-hilt ×1
rx-java ×1
rx-java2 ×1