我的AS版本是1.4稳定的香奈儿.当我进入主题编辑器时,我有一个空的预览屏幕.
在1.5.1上仍然存在同样的问题,从事件日志中获取了堆栈:
java.lang.NullPointerException
at com.android.tools.idea.configurations.ConfigurationMenuAction$PreviewAction.actionPerformed(ConfigurationMenuAction.java:269)
at com.intellij.ui.popup.PopupFactoryImpl$ActionPopupStep$1.run(PopupFactoryImpl.java:746)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:734)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Run Code Online (Sandbox Code Playgroud) 如何使用Robolectric测试AndroidX片段?
我添加了testImplementation "org.robolectric:shadows-supportv4:4.0-alpha-3"依赖项并尝试使用此代码:
val controller = SupportFragmentController.setupFragment(
TestableFragment.buildFragment(DATA),
TestableFragmentHolderActivity::class.java)
Run Code Online (Sandbox Code Playgroud)
TestableFragment是的androidx.fragment.app.Fragment,TestableFragmentHolderActivity是的androidx.appcompat.app.AppCompatActivity
但是我在测试期间遇到错误:
java.lang.NoSuchMethodError:org.robolectric.shadows.support.v4.SupportFragmentController.setupFragment(Landroidx/fragment/app/Fragment; Ljava/lang/Class;)Landroidx/fragment/app/Fragment;
我上课了
class ThreadComment(
banned: Int,
closed: Int,
comment: String?,
date: String?,
email: String?,
files: ArrayList<File>?,
lasthit: Int,
name: String?,
num: String?,
op: Int,
parent: String?,
postsCount: Int,
sticky: Int,
subject: String?,
tags: String?,
timestamp: Int,
trip: String?) : Comment(banned, closed, comment, date, email, files, lasthit, name, num, op, parent, postsCount, sticky, subject, tags, timestamp, trip) {
val answers: ArrayList<String> = ArrayList()}
Run Code Online (Sandbox Code Playgroud)
父类看起来像
open class Comment(
@com.google.gson.annotations.SerializedName("banned")
val banned: Int = 0,
@com.google.gson.annotations.SerializedName("closed")
val closed: Int = 0,
@com.google.gson.annotations.SerializedName("comment")
val comment: …Run Code Online (Sandbox Code Playgroud) OnDragListener:
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_ENTERED:
switch (v.getId()) {
case R.id.delete_zone: {
addToShowCaseZone.setImageDrawable(getResources().getDrawable(R.drawable.showcase_2));
inAddToShowcasesZone = true;
break;
}
case MagazineGridAdapter.ID: {
enteredView = v;
break;
}
}
return false;
case DragEvent.ACTION_DRAG_EXITED: {
switch (v.getId()) {
case R.id.delete_zone: {
addToShowCaseZone.setImageDrawable(getResources().getDrawable(R.drawable.showcase_1));
inAddToShowcasesZone = false;
break;
}
case MagazineGridAdapter.ID: {
enteredView = null;
break;
}
}
return true;
}
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DRAG_LOCATION:
return false;
case DragEvent.ACTION_DROP: {
if (inAddToShowcasesZone) {
final int …Run Code Online (Sandbox Code Playgroud) 如果定义全局属性,private var raceLoadJob: Job? = null那么Kotlin将要求您在方法中执行类似的操作
if (raceLoadJob != null){
if (raceLoadJob!!.isActive) return // null assertation
}
Run Code Online (Sandbox Code Playgroud)
Kotlin会要求断言,因为raceLoadJob值可以更改.我想到的第一件事是多线程.
所以你可以改变代码
raceLoadJob?.let {
if (it.isActive) return
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您反编译这部分代码,您将会看到
Job var10000 = this.raceLoadJob;
if (this.raceLoadJob != null) {
Job var1 = var10000;
if (var1.isActive()) {
return;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到,这种情况是this.raceLoadJob != null,但不是var10000 != null.这意味着理论上这个代码可能因为raceLoadJob赋值而失败,但var10000是null.
这是一个问题,还是我的推理错误?