我正在使用Android P并针对AndroidX进行编译.在debug/beta中运行良好,但是当我发布时,我在运行时遇到了一个神秘的崩溃:
2018-06-24 00:21:26.080 11971-11971 /?E/LoadedApk:无法实例appComponentFactory抛出java.lang.ClassNotFoundException:未找到路径类 "androidx.core.app.CoreComponentFactory":DexPathList [zip文件"/data/app/app.itsyour.elegantstocks-EuVZWdDgzplhm0Hpa90VwA= =/base.apk"],nativeLibraryDirectories = [/数据/应用/ app.itsyour.elegantstocks-EuVZWdDgzplhm0Hpa90VwA ==/LIB/86,/系统/ lib中]在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126 )java.lang.ClassLoader.loadClass(ClassLoader.java:379)at java.lang.ClassLoader.loadClass(ClassLoader.java:312)at android.app.LoadedApk.createAppFactory(LoadedApk.java:226)at android.app .LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:731)在android.app.LoadedApk.getClassLoader(LoadedApk.java:772)在android.app.LoadedApk.getResources(LoadedApk.java:994)在android.app.ContextImpl.createAppContext(在android.app.ActivityThread.access $ 1000的android.app.ActivityThread.handleBindApplication(ActivityThread.java:5736)上的ContextImpl.java:2345(Activ)ityThread.java:197)在Android.os.Looper.loop(Looper.java)的android.app.Handler.dispatchMessage(Handler.java:106)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1634) :193)在android.app.ActivityThread.main(ActivityThread.java:6642)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java) :493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)2018-06-24 00:21:26.145 1667-1854 /?E/SurfaceFlinger:ro.sf.lcd_density必须定义为构建属性2018-06-24 00:21:26.233 1667-1703 /?E/SurfaceFlinger:ro.sf.lcd_density必须定义为构建属性2018-06-24 00:21:29.627 1796-1913 /?E/TaskPersister:访问最近目录的文件错误(目录不存在?).2018-06-24 00:21:30.087 11971-11971 /?E/AndroidRuntime:FATAL EXCEPTION:main进程:app.itsyour.elegantstocks,PID:11971 java.lang.IllegalArgumentException:指定为非null的参数为null:方法cdbhb,参数$ receiver at app.itsyour.elegantstocks.aba(Unknown资料来源:2)app.itsyour.elegantstocks.feature.navigator.ba $ aa(未知来源:24)at app.itsyour.elegantstocks.feature.navigator.baa(未知来源:13)at app.itsyour.elegantstocks.feature .navigator.baa(未知来源:2)androidx.recyclerview.widget.RecyclerView $ aa(未知来源:0)androidx.recyclerview.widget.RecyclerView $ ab(未知来源:29)androidx.recyclerview.widget.RecyclerView $ pa(未知来源:39)在androidx.recyclerview.widget.RecyclerView $ pa(未知来源:510)在androidx.recyclerview.widget.RecyclerView $ pa(未知来源:5)在androidx.recyclerview.widget.RecyclerView $ pc (未知来源:1)在androidx.recyclerview.widget.LinearLayoutManager $ ca(未知来源:11)在androidx.recyclerview.widget.LinearLayoutManager.a(未知的酸)ce:0)androidx.recyclerview.widget.LinearLayoutManager.a(未知来源:44)在androidx.recyclerview.widget.RecyclerView.O的androidx.recyclerview.widget.LinearLayoutManager.c(未知来源:371)处(未知来源: 42)在androidx.recyclerview.widget.RecyclerView.q(未知来源:41)androidx.recyclerview.widget.RecyclerView.onLayout(未知来源:5)在android.view.View.layout(View.java:20670)at在android.view.View.View的android.widget.FrameLayout.onLayout(FrameLayout.java:261)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.view.ViewGroup.layout(ViewGroup.java:6194) .layout(View.java:20670)位于android.view.Viewout上的android.view.Loutout.onLayout(未知来源:66)的android.view.ViewGroup.layout(ViewGroup.java:6194) .java:20670)在Android.widget.FrameLayout.onLayout(FrameLayout.java:261)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.view.ViewGroup.layout(ViewGroup.java:6194)在androi 在android.view上的android.view.reshout(浏位于androidx.coordinatorlayout.wout上的android..coout.Loutout.(android.Co.:606),androidx.coordinatorlayout.widget.CoordinatorLayout.(未知来源:143).在androidx.coordinatorlayout.widget.CoordinatorLayout上的android.viewout(View.java:61670). a(未知来源:32)在Android.view.ViewGroup.layout(ViewGroup.java)的android.view.View.layout(View.java:20670)的androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(未知来源:48) :6194)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.widget.FrameLayout.onLayout(FrameLayout.java:261)在android.view.View.layout(View.java:20670)在android .view.ViewGroup.layout(ViewGroup.java:6194)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)在android.widget.LinearL 在Android.widget.FrameLayout.layoutChildren(FrameLayout)的android.view.View.layout(ViewGroup.java:6194)的android.view.View.layout(View.java:20670)的ayout.onLayout(LinearLayout.java:1565) .java:323)在android.view.View.Loutout(ViewLayout.java:261)android.view.View.layout(View.java:20670)的android.view.View.layout(ViewGroup.java:6194)上的android.widget.FrameLayout.onLayout(FrameLayout.java:261)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)在android.widget.LinearLayout.onLayout(LinearLayout.java:1565)在android.view. View.layout(View.java:20670)在android.view.ViewGroup.layout(ViewGroup.java:6194)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)在android.widget.FrameLayout.onLayout(的FrameLayout .java:261)在com.android.internal.policy.DecorView.onLayout(DecorView.java:753)在android.view.View.layout(View.java:20670)2018-06-24 00:21:30.087 …
我正在查看最近的c ++ 14重载std::equal,我无法弄清楚它们的用途和用途......
两个重载是:
template< class InputIt1, class InputIt2 >
bool equal( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2 );
template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
BinaryPredicate p );
Run Code Online (Sandbox Code Playgroud)
我完全理解std::equal只使用一种传统的传统InputIt2,但第二种InputIt2 last2是扭曲我的大脑.有人可以解释一下这个例子吗?
我发现这个代码示例用于研究:
T & T::operator=(T const & x)
{
if (this != &x)
{
this->~T(); // destroy in place
new (this) T(x); // construct in place
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
当我查看文档时,new没有带指针的版本.从而:
我有一个包装矢量的类:
template <typename T>
class PersistentVector
{
private:
std::vector<T> values;
public:
std::vector<T> & getValues() throw () { return values; }
....
}
Run Code Online (Sandbox Code Playgroud)
实例是:
PersistentVector<double> moments;
Run Code Online (Sandbox Code Playgroud)
我试图将所有双打的副本复制到由其他人分配的缓冲区中.这是我创建缓冲区的地方:
// invariant: numMoments = 1
double * data_x = new double[numMoments];
Run Code Online (Sandbox Code Playgroud)
这是我尝试将向量的内容复制到缓冲区:
double theMoment = moments.getValues()[0];
// theMoment = 1.33
std::memcpy(
data_x,
&(moments.getValues().operator[](0)),
numMoments * sizeof(double));
// numMoments = 1
double theReadMoment = data_x[0];
// theReadMoment = 6.9533490643693675e-310
Run Code Online (Sandbox Code Playgroud)
如您所见,我从缓冲区获取垃圾值.为什么会这样?
使用std::copy(感谢WhozCraig)
double theMoment = moments.getValues()[0];
// theMoment = 1.33
std::copy(moments.getValues().begin(), moments.getValues().end(), data_x); …Run Code Online (Sandbox Code Playgroud) 当且仅当在最后x毫秒内发出相同的确切项目时,我想防止发生排放.我看过油门和去抖操作员,但我不确定他们是否可以帮助我.我可以使用另一个操作员,还是可以用某种方式编写它们?
我有一个QComboBox.我有两个用例.在一个用例中,组合框以编程方式更改为通过setCurrentIndex()获得新索引.在另一个用例中,用户单击并使用鼠标选择新的组合框选择.
这两个用例都会触发QComboBox :: currentIndexChanged(int)信号.这是我尝试移植的代码的主要问题.在旧框架(不是Qt)中,只有当用户选择了一个项目时才会调用类似的回调机制,而不是以编程方式更改的索引.
我怎样才能在Qt中模仿这种行为?
根据Accelerated C++:
要使用此策略,我们需要一种从向量中删除元素的方法.好消息是这样的设施存在; 坏消息是从向量中删除元素的速度足够慢,不能反对将大量输入数据用于此方法.如果我们处理的数据变得非常大,性能会下降到惊人的程度.
例如,如果我们所有的学生都失败了,我们即将看到的功能的执行时间将与学生数量的平方成比例增长.这意味着对于100名学生来说,该课程的运行时间将是一名学生的10,000倍.问题是我们的输入记录存储在一个向量中,该向量针对快速随机访问进行了优化.该优化的一个代价是插入或删除除向量末尾之外的元素可能是昂贵的.
作者没有解释为什么向量对于10,000多名学生而言如此缓慢,以及为什么通常在向量中间添加或删除元素的速度很慢.Stack Overflow上有人可以为我提供一个漂亮的答案吗?
我从通知抽屉中的通知开始一项活动 - 谁有父活动.子活动已启用导航功能.我希望在单击向上导航按钮时子活动返回到父活动.此行为适用于正常的应用程序流.但是,当用户通过通知输入子活动时,单击向上导航按钮不会将用户带到父活动; 相反,它结束了应用程序.
以下是单击通知时应启动的活动的清单.它有一个父母TabbedActivity
<activity
android:name=".activity.AnimalDetailsActivity"
android:parentActivityName=".activity.TabbedActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.TabbedActivity"/>
</activity>
Run Code Online (Sandbox Code Playgroud)
这是我生成通知和意图的地方:
Intent resultIntent = new Intent(context.getApplicationContext(), AnimalDetailsActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context.getApplicationContext());
stackBuilder.addParentStack(AnimalDetailsActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(icon_resource_id)
.setLargeIcon(large_icon)
.setContentTitle(title)
.setContentText(text)
.setContentIntent(resultPendingIntent)
.setAutoCancel(true);
return builder.build();
Run Code Online (Sandbox Code Playgroud)
然后我发送它们
private static void sendNotifications(List<android.app.Notification> notifications) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
for (android.app.Notification notification : notifications) {
manager.notify(++drawerId, notification);
}
}
Run Code Online (Sandbox Code Playgroud)
在目标活动中,我启用向上按钮箭头和向上导航:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
我相信我正确地遵循指南.那么为什么向上箭头没有将用户带到父活动?
我喜欢@OnClickButterKnife 属性的可读性:因此,我什至在 Kotlin 中也使用它。不幸的是,当我点击时,点击处理程序并没有被触发。我错过了什么吗?我需要做些什么才能在 kotlin 中集成点击监听器?
分段:
import kotlinx.android.synthetic.main.fragment_profile.*
class ProfileFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_profile, container, false)
ButterKnife.bind(this, view)
return view
}
companion object {
fun newInstance(): ProfileFragment {
return ProfileFragment()
}
}
@OnClick(R.id.fab)
public fun onFab() {
Toast.makeText(activity, "ABC", Toast.LENGTH_LONG).show()
Snackbar.make(container, "Hey there!", Snackbar.LENGTH_LONG).show()
}
}
Run Code Online (Sandbox Code Playgroud)
布局
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="300dp">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_gravity="bottom|right|end"
android:src="@drawable/ic_edit"
app:fabSize="normal"
app:elevation="6dp"
app:pressedTranslationZ="12dp"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) 我在Cloud Datastore中存储了大约一百个对象Kind= Animal.我想Animal通过低级API或Objectify从数据库中获取所有内容.
android ×3
c++ ×3
androidx ×1
c++14 ×1
containers ×1
kotlin ×1
objectify ×1
performance ×1
qt ×1
rx-android ×1
rx-java ×1
rxjs ×1
stl ×1
vector ×1