
我正在尝试设计一个与此非常相似的UI.我能够设计它几乎与上面的图像类似,但我没有办法实现倾斜或倾斜的部分.
1)任何人都可以举例说明如何实现倾斜布局?
2)如何将FAB放在倾斜部分上?
任何帮助将非常感激.
我最近升级到Firebase的'Blaze'计划.我正在尝试使用Firebase测试实验室测试发布APK,但每次上传APK时,我都会得到这个.
该文件无法上传到Google云端存储(GCS).此问题可能是由不正确的GCS权限引起的.
如何解决这个问题呢?我是否需要更改项目中的某些设置?
PS - 我知道这不是一个编程相关的问题.我不得不求助于SO,因为即使将此问题提交给Firebase支持,我也没有解决方案.
我有一段时间有这个问题,已经搜索了很多StackOverflow问题,但无法解决我的问题.
我之前也问过类似的问题并得到了使用的建议,
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
Run Code Online (Sandbox Code Playgroud)
它没有解决我的问题.我从来没有在我的任何测试设备上遇到此异常,但我的一些用户已经定期报告它.我真的很无能为力.
例外
这是我得到的例外,
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:743)
at java.util.TimSort.mergeAt(TimSort.java:479)
at java.util.TimSort.mergeCollapse(TimSort.java:404)
at java.util.TimSort.sort(TimSort.java:210)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2023)
at java.util.Collections.sort(Collections.java:1883)
Run Code Online (Sandbox Code Playgroud)
或者有时候,
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:864)
at java.util.TimSort.mergeAt(TimSort.java:481)
at java.util.TimSort.mergeCollapse(TimSort.java:406)
at java.util.TimSort.sort(TimSort.java:210)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2010)
at java.util.Collections.sort(Collections.java:1883)
Run Code Online (Sandbox Code Playgroud)
我做了什么
enum FileItemComparator implements Comparator<FileItem> {
//Using ENUM
NAME_SORT {
public int compare(FileItem o1, FileItem o2) {
int result = 0;
if (o1 != null && o2 != null) { …Run Code Online (Sandbox Code Playgroud) 我拥有的
我有一个包含一些敏感数据的 Android 应用程序。我想确保客户端应用程序只有在没有以任何方式被篡改的情况下才调用服务器。基本上,我想检查 Android 应用程序的完整性。
我做了什么
为此,我实现了一种方法,可以检查签名是否与我对 APK 签名的签名相同。这是一个代码示例,
fun isApkSignatureBroken(): Boolean {
val packageInfo = context.packageManager.getPackageInfo(context.packageName, GET_SIGNATURES)
val signatures = packageInfo.signatures
if (signatures == null || signatures.isEmpty()) {
return true
}
return signatures
.map { it.toByteArray() }
.map { hash.getSha1(it) }
.none { it.equals(getRealAppSignature(), true) }
}
Run Code Online (Sandbox Code Playgroud)
在这里,getRealAppSignature()返回我在应用程序上签名的实际签名。
观察
我已经看到这种方法有时效果很好。每当发现被篡改的应用程序时,此方法都会返回 true 并且用户被阻止使用该应用程序,并且我会收到一个事件通知。我发现很多用户都以这种方式被屏蔽了。
我在论坛和其他社交媒体网站上看到了许多其他案例,人们正在使用我的应用程序,即使他们的应用程序被篡改。我观察到我的许多应用程序的版本名称和应用程序名称格式不正确,许多用户都在使用它。就像,如果我的原始应用程序版本是2.2那么他们将创建一个格式错误的版本2.2-TERMINATOR。
分析
我对这些应用程序进行了一些分析,并从一些论坛中发现了一些被篡改的应用程序。这些显然是修改过的应用程序,具有格式错误的版本和应用程序名称。有些甚至对 UI 进行了细微的更改。我尝试安装这些应用程序,但无法安装它们并显示“程序包已损坏”消息。
我试图在这些应用程序上运行 keytool 来检查它们的签名,就像这样,
keytool -list -printcert -jarfile TAMPERED_APP.apk
Run Code Online (Sandbox Code Playgroud)
但我总是得到,
keytool error: java.lang.SecurityException: SHA1 digest …Run Code Online (Sandbox Code Playgroud) 问题
这个想法非常简单.每当用户从最近的用户返回我的应用程序时,我想显示一个提示密码的简单对话框.
我知道如何使用密码提示对话框,但我的问题是我如何理解用户已从最近进入我的应用程序.如果我在每个活动中将提示放在onResume中,那么即使用户没有从"最近"菜单进入,它也会每次都被触发.
我的应用中有很多活动和片段.所以,我希望有一个更通用或应用程序级别的解决方案.
我知道PrintWriter如果我们想要编写格式化数据,那真的很好,而且我也知道使用它BufferedWriter来提高IO性能.
但我试过这样的事,
PrintWriter pw = new PrintWriter(System.out);
pw.println("Statement 1");
pw.println("Statement 2");
//pw.flush();
Run Code Online (Sandbox Code Playgroud)
我观察到当注释flush方法时没有输出,但是当我取消注释它时,我得到了所需的输出.
只有在PrintWriter被缓冲时才可以这样做.如果是这样,那么使用BufferedWriter包装PrintWriter然后编写它有什么意义呢?
虽然javadoc没有提到PrintWriter被缓冲的任何地方,但似乎如此.
故事
我在应用程序中使用Firebase Storage将大文件上传到Firebase Storage。文件主要是视频,有时甚至会大于2 GB。
我做了什么
这就是我所做的。
UploadTask originalUpload = originalDestination.putFile(Uri.fromFile(originalSource));
mCurrentUploadTask = originalUpload;
originalUpload.addOnProgressListener(mOnProgressUpdateListener);
originalUpload.addOnSuccessListener(mOriginalSuccessListener);
Run Code Online (Sandbox Code Playgroud)
只是为了告知,我还需要将这些同步任务转换为异步,因为我需要使用
Tasks.await(originalUpload);
Run Code Online (Sandbox Code Playgroud)
问题
这个问题很奇怪而且出乎意料。上传/下载效果很好,但是速度很慢。
我的互联网连接速度为1 MBps,但是这些文件从未以这种速度传输。它大约为100-150 KBps,几乎是我网络可用速度的15%。
在声明之前,我已经在多个不同的网络上对此进行了多次测试。我无处发现Firebase会充分利用可用带宽,而其他非Firebase的下载/上传则可以全速运行。
我的应用需要下载和上传大文件,因此无法承受如此缓慢的速度。Firebase完全没有想到这一点。
如果我在实现中做任何错误或Firebase固有的问题,请告诉我。
更新
我也遇到了一个问题,只有上传。每当我下载某些内容并关闭Wifi时,都会由于该错误而取消下载。
com.google.firebase.storage.StorageException: An unknown error occurred, please check the HTTP result code and inner exception for server response.
Read error: ssl=0xb7e7a510: I/O error during system call, Connection timed out
javax.net.ssl.SSLException: Read error: ssl=0xb7e7a510: I/O error during system call, Connection timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method) …Run Code Online (Sandbox Code Playgroud) 是)我有的
我有一个自定义光标适配器,我运行一个线程来执行一些升沉任务.
我想要的是
我希望在完成线程后更新UI,就像显示Toast一样.
我的问题
因为我在自定义游标适配器中,我无法让Activity使用runAnUiThread方法,如getActivity().runOnUiThread().Custom Cursor Adapter类只是一个Java类,而不是Activity或Fragment.
如何从CustomCursorAdapter获取Activity引用并执行runOnUiThread方法?
我想要的是
我有一个预定义的颜色作为主色和强调色。但并非所有用户都喜欢我喜欢的颜色。所以,我想创建一个具有 10-15 种预定义颜色的颜色选择器,用户可以选择将其作为他/她的主要颜色和强调色。
我已经读过styles.xml 文件是不可变的,那么我可以通过什么方式来实现这一点。我见过很多像 Talon for Twitter Plus 这样的应用程序,还有更多这样的应用程序。
我怎样才能做到这一点?一个有效的解决方案将不胜感激。
编辑 - 用户可以在浅色主题和深色主题之间进行选择。And there will be some preset colors which when selected will change the primary color and accent color of the theme, so that any widget in the app using these two colors get changed automatically.
我一直在我的应用程序中使用 Firebase 身份验证,并注意到一个特定用例的问题。
我为我的应用程序启用了帐户链接注册流程,因此我可以附加与单个电子邮件地址关联的多个提供商。
场景 1:(工作正常)
用户最初与 Google 注册,稍后使用 Facebook 登录或使用电子邮件和密码注册。
该帐户链接正常工作和Facebook和/或电子邮件在供应商列表中。
因此,我可以有 2 或 3 个电子邮件提供商,Google(最初)、Facebook 和密码(之后)。
场景2:(错误)
用户最初使用 Facebook 和/或电子邮件注册,后来使用 Google 登录,现在帐户链接不起作用。谷歌替换了以前的提供者。
帐户链接失败,我只是将 Google 作为与电子邮件地址关联的唯一提供商,而其他提供商都消失了。
在第二种情况下,当使用 Google 登录时,它应该失败并抛出,FirebaseAuthCollisionException但它没有成功。这是主要问题。
我不能在这里粘贴整个代码,但肯定只是一个片段。
firebaseAuth
.signInWithCredential(credential)
.addOnFailureListener(exception -> {
if (exception instanceof FirebaseAuthUserCollisionException) {
mCredentialToLinkWith = credential;
if (mProviderList.size() == 1) {
if (mProviderList.contains(EmailAuthProvider.PROVIDER_ID)) {
mRegisterProviderPresenter.linkWithEmailProvider(credential, email);
} else {
linkProviderAccounts(email, AuthenticationHelper.getProviderToLinkAccounts(mWeakActivity, mProviderList));
}
} else {
linkProviderAccounts(email, AuthenticationHelper.getProviderToLinkAccounts(mWeakActivity, mProviderList));
} …Run Code Online (Sandbox Code Playgroud) android ×9
firebase ×3
java ×2
apk ×1
certificate ×1
comparator ×1
cursor ×1
file-io ×1
jarsigner ×1
java-io ×1
printwriter ×1
resume ×1
signature ×1
sorting ×1