我正在构建一个应用程序,我需要在其中使用数据库.我正在考虑使用Room,因为它现在是新的和热门的.但我也听说过很多关于Realm的好东西.有人能指出使用每种产品的可能优势吗?
我做了我的研究并阅读了文档,但我没有经验可以自己理解
随着OkHttp图书馆,应用程序面临以下SocketTimeoutException问题.如果请求大小较小,那么它工作正常(小于1MB).我在10秒内收到此异常,即使我的socket timeout(readTimeout)值更高.它总是失败的请求(大小是1.8MB).当我执行请求时HttpUrlConnection它工作正常.什么可能是失败的原因?
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: java.net.SocketTimeoutException: timeout
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.Okio$3.newTimeoutException(Okio.java:207)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:261)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:158)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:96)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.RequestBody$2.writeTo(RequestBody.java:96)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:704)
03-29 12:16:38.997 32066-4018/com.mobile W/System.err: …Run Code Online (Sandbox Code Playgroud) 我有一个标准的文本字段,我想知道用户何时在其中设置焦点。有没有办法做到这一点?
我尝试设置可点击修饰符以在有人单击它时触发事件,但看起来它不适用于 TextField:
modifier = Modifier
.clickable {
shouldShowSearchKeyBoard.value = true
},
Run Code Online (Sandbox Code Playgroud) 我通过这种方式添加了一个到我的 Android 应用程序的深层链接:
<activity
android:name=".views.DeepLinkingActivity"
android:exported="true">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
当我点击https://example.com我被重定向到网站。
当我更改它时android:scheme="https",android:scheme="appscheme"它会工作并将我重定向到我的应用程序。
如何强制通过https方案打开我的应用程序?
更新
我添加了一个子域,但它仍然不起作用。
<activity
android:name=".views.DeepLinkActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="www.example.ru"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud) 我有motionLayout动画transition:
<Transition
app:constraintSetEnd="@+id/end"
app:constraintSetStart="@+id/start">
<OnSwipe
app:dragDirection="dragUp"
app:dragScale="0.1"
app:touchAnchorId="@id/my_scrollview" />
</Transition>
Run Code Online (Sandbox Code Playgroud)
但是动画对我来说太快了。我想慢下来。我尝试设置,dragScale=0.1, maxAcceleration=1, maxVelocity=1但它不会影响动画速度。我怎样才能让它慢下来?
更新:问题已在较新版本中修复,constraintlayout并且似乎正在处理中"2.0.4"
我正在使用 JetPack 导航组件在片段之间导航。我在图表 xml 中的 2 个片段之间添加了幻灯片动画:
<action
android:id="@+id/action_Fragment_to_DetailsFragment"
app:enterAnim="@anim/slide_left"
app:popEnterAnim="@anim/slide_right"
app:destination="@id/DetailsFragment" />
Run Code Online (Sandbox Code Playgroud)
问题是 - b/c 我正在使用导航组件,它使用fragmentManager.replace(), 而不是fragmentManager.add(), 而不是平滑动画,我看到:
第一个片段消失了
正在触发第二个片段的动画并将新片段滑动到屏幕
第二个片段出现在屏幕上。
并且 b/c 我在两个屏幕上都有不同的内容,它看起来有问题。我想要实现的是“就像在 IOS 中一样”,用户看到 2 层屏幕,彼此滑动。有没有办法用不支持“ fragmentManager.add()”的导航组件来实现它?
我也试过
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
Run Code Online (Sandbox Code Playgroud)
但情况也好不到哪里去。
android android-animation android-fragments android-navigation
我获得了为 IP 地址(不是通用名称)颁发的证书,我正在尝试使用该证书连接到服务器。
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
OkHttpClient okHttpClient = builder.build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
ServerRouts service = retrofit.create(ServerRouts.class);
Resp_json> call = service.login(param, user, pw);
Run Code Online (Sandbox Code Playgroud)
我得到了一个错误:
Hostname 11.8.222.333 not verified:
Run Code Online (Sandbox Code Playgroud)
但是当我使用
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
然后一切正常。
如何在不关闭主机名验证程序的情况下解决该错误?
PS 我为 IP 颁发的证书 (11.8.222.333)
我的代码中有很多Single,比如
Disposable disp = Single.fromCallable(()-> loadData())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(res-> showInUI(res),
throwable -> Log.e(TAG, throwable.getMessage()))
);
Run Code Online (Sandbox Code Playgroud)
当我从资料了解,之间的差别Observable,并Single是单可以响应错误,决不响应,有成功的回答它发射只有一次.现在我没有在任何地方处置,一切正常.
所以我需要执行disp.dispose()吗?
我想创建一个string包含*符号n时间的内容.我只看到这种方式:
val s = ""
val n = 100
for (j in 0 until n) {
s += "*"
}
Run Code Online (Sandbox Code Playgroud)
但它看起来很丑陋,而且时间复杂度为O(n ^ 2).Kotlin有没有办法在没有时间复杂度更高的循环的情况下做到这一点?
我很久以前就听说过惯例,但从未使用它们.据我所知,协同例程类似于生成器.
为什么我们需要Python中的协同例程?