我在使用标签<include>和<merge>ConstraintLayout内部时遇到问题.
我想创建一个平面视图层次结构(因此Constraints),但仍然有可重用的元素.所以我<include>在我的布局和<merge>包含的布局中使用以避免嵌套布局(特别是避免嵌套的ConstraintLayouts)
所以我写了这样的:父布局
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/review_1"
layout="@layout/view_movie_note"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/review_2"/>
<include
layout="@layout/view_movie_note"
android:id="@+id/review_2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="7dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/review_1"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
这个view_movie_note:
<merge>
<TextView
android:id="@+id/note_origin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginStart="5dp"
app:layout_constraintStart_toStartOf="@+id/cardView2"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginLeft="5dp" />
<android.support.v7.widget.CardView
android:id="@+id/five_star_view_container"
android:layout_width="0dp"
android:layout_height="52dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="10dp"
android:elevation="3dp"
app:cardUseCompatPadding="true"
app:contentPaddingTop="22dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_min="52dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/note_origin">
<FiveStarsView
android:id="@+id/five_star_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id="@+id/cardView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:cardBackgroundColor="@color/colorPrimary"
app:contentPaddingLeft="15dp"
app:contentPaddingRight="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/note_origin">
<TextView
android:id="@+id/grade" …Run Code Online (Sandbox Code Playgroud) 是否有可能在运行时构造一个查询?
@Query("SELECT * FROM playlist " +
"WHERE playlist_title LIKE '% :playlistTitle %' " +
"GROUP BY playlist_title " +
"ORDER BY playlist_title " +
"LIMIT :limit")
List<IPlaylist> searchPlaylists(String playlistTitle, int limit);
Run Code Online (Sandbox Code Playgroud)
该limit部分是可选的.也就是说,它应该能够在有或没有限制的情况下执行相同的查询.
在前一种情况下,可以使用和不使用限制部分进行两个静态查询,并且每次都可以使用适当的一个.但有时我们可能不得不处理更复杂的情况,例如构建过滤器.
在这种情况下,与前面的示例不同,将有多个可选部分.对于书籍表,我们可能需要根据书籍所属的类别,作者姓名,价格范围,出版日期等进行过滤.使用这些部分的所有组合进行静态查询几乎是不可能的.
我有一个用于以KML格式构建的3D模型,我想通过谷歌或苹果地图导入它以获取用户位置并找到POI.
我发现google maps v2 [1]:https://developers.google.com/maps/documentation/android/views支持3d对象.
我正在使用Room作为应用程序的数据库.我有一个场景,其中Object某种类型需要存储在单独的表中.举个例子,让我们来Object看看Book.java
现在,我想要两个SQL表:
请忽略SQL DB的任何命名约定 - 这只是一个例子
问题
通常,人们只会@Entity(tableName = "Books_Read")在Book.java类中使用并拥有一个DAO将使用该表名的类.
事情是; 那么我怎么能够使用相同的Book.java类来存储在Books_To_Read表中?因为我已经定义@Entity(tableName = "Books_Read")为Book.java类的一部分,我看不到在哪里定义类的Books_To_Read表Book.java
我能够提出的唯一解决方案是创建一个新类 - 让我们称之为在类BookToRead.java 中扩展Book.java和定义@Entity(tableName = "Books_To_Read")的新类.
题
有没有更好的方法来做到这一点,或者这是处理它的预期方法?
我正在使用Room Persistence Library 1.1.0.我可以/data/data/<package_name>/databases/使用Android Studio的Device File Explorer 找到数据库文件.它包含多个表,我可以使用room-DAOs 访问该表的内容而没有任何问题.但是打开时sqlite-browser,显示没有表格.
可能是什么原因?是否有可能解决这个问题,而无需切换回旧SQLiteOpenHelper的/data/data/<package_name>/databases/?
sqlite android sqlite-browser android-room sqlite-journal-mode
当目标平台为Level 26(Android 8.0.0)或更高版本时,我的android模拟器无法启动.模拟器只显示黑屏,而模拟器进程持续运行大约.100%CPU.请注意,25级和更低级别工作正常.
这是我到目前为止发现的:
我从命令行启动了模拟器,以便我可以检查logcat:
./emulator -avd Test2 -logcat '*:e'
Run Code Online (Sandbox Code Playgroud)
这是logcat的摘录:
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.18.91+ (android-build@wphr1.hot.corp.google.com) (gcc version 4.9 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Tue Jan 9 20:30:51 UTC 2018
[ 0.000000] Command line: qemu=1 androidboot.hardware=ranchu clocksource=pit androidboot.console=ttyS0 android.qemud=1 console=0 console=0 android.checkjni=1 qemu.gles=1 androidboot.logcat=*:e androidboot.selinux=permissive ndns=2 ndns=2
[ 0.000000] Disabled fast string operations
...
(skipping a few hundred lines)
...
[ 1.443608] init: init first …Run Code Online (Sandbox Code Playgroud) 我在运行wal_checkpoint(FULL)后使用cp commmand来备份SQLite DB.DB正在WAL模式下使用,因此我的文件夹中还有其他文件,如-shm和-wal.当我运行wal_checkpoint(FULL)时,WAL文件中的更改将提交到数据库.我想知道运行检查点后-wal和-shm文件是否被删除了.如果没有,那么它们包含什么?
我知道我的备份过程不好,因为我没有使用SQLite备份API.这是我的代码中的一个错误.
任何人都可以建议运行检查点后-shm和-wal文件包含哪些内容.
提供的任何链接都会有所帮助.
谢谢
我有一个EditText字段,变量名称valueInputField.
我听文本输入更改,我想要实现的是在输入过程中,当输入格式与正则表达式不匹配时,我想停止显示更多输入,但保持字段集中并且用户能够键入键盘仍然只是没有真正的效果将采取该领域.
@OnTextChanged(R.id.value_input)
protected void onTextChanged(CharSequence charSequence) {
String inputChars = charSequence.toString().trim();
// if doesn't match regular expression, stop showing more inputs
if (!inputChars.matches(MY_REGEXP)) {
// this doesn't achieve what I need.
valueInputField.setInputType(0)
}
}
Run Code Online (Sandbox Code Playgroud)
我试过上面的方法,它不起作用.如何实现我的需求?
我有一个Android应用程序,通过供应商提供的库连接第三方硬件.当准备好处理来自硬件的数据时,库将回调我的应用程序.
由于它的设计,第三方库只对应用程序进行一次回调.但是,我的应用程序在调用回调时有一些不同的异步任务(例如,记录,更新UI显示,调用外部程序).试图以某种方式将事件分散到不同的方法中.所以,我正在考虑在我的Application类中执行此操作:
interface MyCallback {
public void doSomething(ArrayList<DataClass>);
}
public class MyApp extends Application {
...
private MyCallback cb;
public void registerCallback (MyCallback callback) {
cb = callback;
}
public methodCalledBy3rdPartyAPIOnData (ArrayList<DataClass> data){
cb.doSomething(ArrayList<DataClass> data);
}
Run Code Online (Sandbox Code Playgroud)
这将适用于单个方法调用,但我遇到了如何为一系列回调执行此操作的问题...并确保它们被异步调用.是否有任何示例或最佳实践在Android应用程序或Java中执行此类操作?
由于应用程序在多个进程中打开,我们最近开始在我们的Android应用程序中遇到崩溃.几个不同的错误指向了这一点.比如这个错误:
com.google.firebase.database.DatabaseException:无法获得对Firebase数据库的脱机持久性的独占锁定.这通常意味着您正在使用应用中多个进程的Firebase数据库.请记住,多进程Android应用程序在所有进程中执行Application类中的代码,因此您可能需要避免在Application类中初始化FirebaseDatabase.如果您有意从多个进程使用Firebase数据库,则只能在其中一个进程中启用脱机持久性(即调用setPersistenceEnabled(true)).
我们也看到了SQLite和H2的类似错误.这是一个新问题,我们没有明确允许多个进程运行.我们的AndroidManifest.xml中没有任何内容指定自定义的android:process属性.
我怀疑某些第三方库造成了这种情况.如何确定多个流程的根本原因以及如何预防?
我们的另一个应用是通过ContentProvider连接到此应用.起初我认为它android:multiprocess="true"是罪魁祸首但将其改为"假"并没有帮助.我仍然怀疑其他应用程序以某种方式触发了新进程的创建.这是如何定义ContentProvider:
<provider
android:name=".DegooContentProvider"
android:authorities="${applicationId}.DegooContentProvider"
android:exported="true"
android:protectionLevel="signature"
android:multiprocess="false">
</provider>
Run Code Online (Sandbox Code Playgroud)