I have a DialogFragment
that handles login and fingerprint authentication for my application. This fragment uses two classes that are exclusive to API 23, KeyGenParameterSpec
and KeyPermanentlyInvalidatedException
. I had been under the impression that I could use these classes, as long as I check the build version before I try to initialize the classes (outlined here):
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
But it appears that this is not the case. If I try …
android dalvik android-version android-api-levels android-fingerprint-api
我一直在测试Dagger 2,一切都在工作,直到我做了一些重构.现在gradle正在抛出一个IllegalArgumentException
,我无法弄清楚我改变了什么,现在导致错误.我没有对gradle文件进行任何更改,这似乎是堆栈跟踪的主要内容:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':mobile:compileDebugJavaWithJavac'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
...
Caused by: java.lang.IllegalArgumentException
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
at dagger.internal.codegen.writer.ClassName.peerNamed(ClassName.java:130)
at dagger.internal.codegen.SourceFiles.membersInjectorNameForMembersInjectionBinding(SourceFiles.java:266)
at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:194)
at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:171)
at dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:129)
at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:228)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
... 89 more
Run Code Online (Sandbox Code Playgroud)
Dagger也没有生成任何文件,而且之前也是如此.我一直在尝试解决这个问题的每个方法,我可以找到,主要涉及修复gradle文件或清除build文件夹,但到目前为止还没有任何工作.
快速更新(因为我注意到一些上升票); 我从未弄清楚我做错了什么,最后我恢复了旧版本.恢复之后,我再次进行了重构,并且工作正常.当我最初重构代码时,我必须做一些不同的事情,但我不知道它是什么.
如果有人知道可能导致这种情况的原因,我相信它会帮助那些已经或将来会遇到这个问题的人.
我使用的是NestedScrollWebView
(在很大程度上受到影响NestedScrollView
),这可以解决许多已知 问题与使用相关联WebView
的CoordinatorLayout
.
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="enterAlways|scroll|snap">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleTextAppearance="@style/TextAppearance.AppCompat.Subhead"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_gravity="bottom"
android:visibility="gone"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"/>
</FrameLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<com.example.app.widget.NestedScrollWebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
这些NestedScrollWebView
作品很好用AppBarLayout
和enterAlways|scroll|snap
滚动标志,但不是很好SwipeRefreshLayout
.
我删除了以下行NestedScrollWebView
:
setOverScrollMode(WebView.OVER_SCROLL_NEVER);
Run Code Online (Sandbox Code Playgroud)
这样可以确保视图不会显示在滚动指示器上.我想要显示滚动指示符,但即使启用了过度滚动,也不会出现以下情况.
根据我的理解,SwipeRefreshLayout
应该拦截导致刷新指示符被拖动的任何触摸事件(基于其实现onInterceptTouchEvent()
).SwipeRefreshLayout
也拒绝任何requestDisallowInterceptTouchEvent()
已启用嵌套滚动的子项; 这是真的NestedScrollWebView
.因此,应按 …
android swiperefreshlayout android-touch-event android-nestedscrollview
Android Studio模拟器突然停止工作.当我尝试运行虚拟设备时,我在事件日志中收到以下错误.
模拟器:PANIC:找不到AVD系统路径.请定义ANDROID_SDK_ROOT仿真器:处理完成,退出代码为1
所以我检查了ANDROID_SDK_ROOT
环境变量设置的值,它是空的.所以我把它设置为/Users/{username}/Library/Android/sdk
基于类似问题的答案 ; 但我仍然得到同样的错误.
我尝试从AVD管理器中删除所有虚拟设备并创建一个新设备(如此处所示),但没有运气.我还尝试卸载并重新安装所有SDK组件包; 我仍然得到同样的错误.
我无法弄清楚发生了什么,或者如何解决它.ANDROID_SDK_ROOT
我设置的值可能不正确吗?(我设置的值与我的ANDROID_HOME
变量相同,它确实指向包含Android SDK的目录).
我唯一能想到的就是我还没有尝试过卸载并重新安装Android Studio(如果可以的话,我宁愿尽量避免这种情况).
嗯...我删除了有关Android Studio的所有内容.
~/.android
~/.AndroidStudio*
~/Applications/Android \Studio.app
~/Library/Android
~/Library/Application \Support/AndroidStudio*
~/Library/Caches/AndroidStudio*
~/Library/Logs/AndroidStudio*
~/Library/Preferences/AndroidStudio*
~/Library/Preferences/com.android.Emulator.plist
~/Library/Preferences/com.google.android.*
Run Code Online (Sandbox Code Playgroud)
然后重新安装了Android Studio ......我仍然遇到同样的错误.我错过了什么?是什么导致了这个问题?
android android-virtual-device android-emulator android-studio
我正在使用Retrofit 2(beta 4),我希望从使用标准Call
响应转向RxAndroid Observable
响应.我成功地通过简单的交换Call<List<ExampleObject>>
来切换我的大部分呼叫Observable<List<ExampleObject>>
.我的一些电话使用Call<okhttp3.ResponseBody>
,效果很好,但当我换掉时Call
,我遇到了一个错误:
03-03 15:21:44.237 27333-27333/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 27333
java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable<okhttp3.ResponseBody>
for method AuthenticationService.getLoginForm
at retrofit2.Utils.methodError(Utils.java:119)
at retrofit2.MethodHandler.createCallAdapter(MethodHandler.java:52)
at retrofit2.MethodHandler.create(MethodHandler.java:25)
at retrofit2.Retrofit.loadMethodHandler(Retrofit.java:164)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy6.getLoginForm(Unknown Source)
at com.example.app.ui.fragment.LoginFragment.login(LoginFragment.java:214)
at com.example.app.ui.fragment.LoginFragment.lambda$onContinue$1(LoginFragment.java:168)
at com.example.app.ui.fragment.LoginFragment.access$lambda$1(LoginFragment.java)
at com.example.app.ui.fragment.LoginFragment$$Lambda$4.onClick(Unknown Source)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) …
Run Code Online (Sandbox Code Playgroud) 我试图在用户通过Android M指纹API进行身份验证后解密加密文本.我一直在尝试遵循Android安全示例以及KeyGenParameterSpec
文档中提供的示例.我已经能够成功地加密与公钥的文本,但是当我打电话cipher.doFinal
用Cipher
在使用私有密钥DECRYPT_MODE
,我得到一个KeyStoreException
"未知错误":
03-15 10:06:58.074 14702-14702/com.example.app E/LoginFragment: Failed to decrypt password
javax.crypto.IllegalBlockSizeException
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:486)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251)
at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96)
at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805)
at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.security.KeyStoreException: Unknown error
at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251)
at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96)
at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805)
at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757)
at android.os.Handler.dispatchMessage(Handler.java:102)
at …
Run Code Online (Sandbox Code Playgroud) encryption android keystore android-keystore android-fingerprint-api
在我MainActivity
,我有:
@Override
protected void onResume() {
super.onResume();
checkForCrashes();
checkForTutorial();
checkForUpdates();
setStore();
setup();
}
Run Code Online (Sandbox Code Playgroud)
在setup()
,我打电话initializeTabs()
回调:
protected void setup() {
final Store s = getStore();
setBackground();
if (s == null) {
unauthorizedHandler();
return;
}
final Context mainActivity = this;
fragments = getTabFragments();
StoresController.getStoreDetails(s, mainActivity, new Callback<StoreDetailDecorator>() {
@Override
public void success(StoreDetailDecorator storeDetailDecorator, Response response) {
s.prettyName = storeDetailDecorator.store.pretty_name;
s.save();
Log.v(TAG, s.prettyName);
TextView toolbar_label = (TextView)findViewById(R.id.toolbar_label);
toolbar_label.setText(MainActivity.getTruncatedMenuName(s.name()));
SummaryTab t1 = (SummaryTab)fragments.get(0);
t1.notifier = (SummaryTabLoadingNotifier)mainActivity;
initializeTabs(s, fragments);
t1.populateReport(); …
Run Code Online (Sandbox Code Playgroud) 我注意到三星应用程序具有特定的形状; 例如,下面的图库,相机,手机,消息和互联网应用程序图标.
有没有办法只为三星设备指定图标?类似于新的Google Pixel如何android:roundIcon
在清单中使用该属性?
我尝试在Samsung Developer文档中寻找一些东西,但似乎没有关于这个主题的任何内容.
这些设备确实有一种识别三星应用程序的方法,考虑到带有背景设置的图标 [ 设置 > 显示 > 图标背景 ]为所有其他应用程序启用类似形状的背景.例如,下面是Google Play商店图标.
但我不确定这是否是一个公开可用的选项.
如果三星采用Android Oreo的新自适应图标,这个问题将无关紧要; 但据我所知,他们还没有.
我创建了一个自定义UITableViewCell
,并且UITextView
放在这个原型单元格中.当我单击此textView时,键盘可以自动弹跳.但是,如果我想隐藏键盘,我将不得不点击Return
键.这不太方便.
这是问题所在.firstResponder
当我滚动tableview时,如何重新设置textView 以隐藏键盘.
cellForRowAtIndex
方法如下.
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = UITableViewCell()
if(indexPath.section == 0){
cell = self.tableView.dequeueReusableCellWithIdentifier("InputCell")!
let textView = cell.viewWithTag(102) as! UITextView
textView.editable = true
textView.keyboardType = UIKeyboardType.Default
textView.delegate = self
textView.targetForAction(#selector(FeedBackViewController.getTextViewInsideCell(_:)), withSender: textView)
}
if(indexPath.section == 1){
cell = self.tableView.dequeueReusableCellWithIdentifier("ConfirmButtonCell")!
let label = cell.textLabel
label?.text = "send"
label?.textAlignment = NSTextAlignment.Center
label?.textColor = UIColor.redColor()
}
return cell
}
Run Code Online (Sandbox Code Playgroud)
以下是我实施的一些方法.
func textView(textView: UITextView, shouldChangeTextInRange range: …
Run Code Online (Sandbox Code Playgroud) android ×9
dagger-2 ×1
dalvik ×1
encryption ×1
ios ×1
keystore ×1
okhttp3 ×1
retrofit2 ×1
rx-android ×1
rx-java ×1
swift ×1
uitableview ×1
uitextview ×1