小编Kev*_*vin的帖子

Exception.getMessage()为null

在我的Java代码中,它正在检查!null条件并抛出一个Exception.

例如

try
{
    if (stud.getCall() != null)
        acc.Call = stud.getCall().toString();
    else
        throw new Exception("Data is null");
}
catch (Exception e)
{
    logger.error("Some Error" + e.getMessage());
    throw new Exception("Please check the Manatadatory Field is Missing" + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

但在我得到的日志中:

Some Error null
Run Code Online (Sandbox Code Playgroud)

为什么e.getMessage null

java exception

53
推荐指数
4
解决办法
8万
查看次数

是否可以使用robolectric将测试双重替换MediaStore?

我有一个查询MediaStore图像的类.例如,我的代码看起来像someContentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, ... ).我想测试一下,我对MediaStore的查询是正确的.

到目前为止,我在测试中所做的是:

ContentResolver resolver = new Activity().getContentResolver();
ContentValues values = new ContentValues();
values.put( MediaStore.Images.Media.DATA,
            "/fake/path/file1.jpg" );
values.put( MediaStore.Images.Media.DATE_ADDED,
            fakeTime.getTime() );
resolver.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                 values );
Run Code Online (Sandbox Code Playgroud)

我将这个解析器注入到我的类中,该类对它执行查询.但是,查询返回null.我看到这篇文章:http: //ikaruga2.wordpress.com/2013/07/29/roboelectric-and-contentresolverscontentproviders/ 表示使用ShadowContentResolver注册内容提供者,所以,如下所示:

ShadowContentResolver.registerProvider( MediaStore.AUTHORITY, <SOMETHING_GOES_HERE> );
Run Code Online (Sandbox Code Playgroud)

但我不知道该为内容提供商提供什么.也许用一个MediaStore对象?不,它不是ContentProvider.也许是这样MediaProvider?由于某种原因,该符号无法解析.

在这一点上,我严重怀疑这是远程正确的方法.有人能引导我朝着正确的方向前进吗?

使用Robolectric 2.4快照和API 19.

android android-contentresolver android-contentprovider robolectric

11
推荐指数
1
解决办法
804
查看次数

链接批处理脚本时出现意外的双与号/管道行为

我的foo.bat文件:

exit /b 1
Run Code Online (Sandbox Code Playgroud)

我在cmd提示符下执行的操作:

foo.bat && echo "OK"
Run Code Online (Sandbox Code Playgroud)

结果:

exit /b 1
"OK"
Run Code Online (Sandbox Code Playgroud)

但是,当我使用双管道时,回声不会发生:

foo.bat || echo "OK"
Run Code Online (Sandbox Code Playgroud)

结果:

exit /b 1
Run Code Online (Sandbox Code Playgroud)

这与我期望的&&和||完全相反。去做。请参阅https://ss64.com/nt/call.html,其中显示:

commandA && commandB运行commandA,如果成功,则运行commandB

commandA || commandB运行commandA,如果失败,则运行commandB

我失去理智了吗?我在这里想念什么?

cmd batch-file

7
推荐指数
1
解决办法
97
查看次数

cmake:如何引用和构建单独的cmake项目依赖项?

我有一个交叉编译器cmake项目,该项目依赖于恰好也使用cmake的独立项目中的库:

/myProject/CMakeLists.txt (uses cross-compiler)
/anotherProject/CMakeLists.txt (platform-agnostic)
Run Code Online (Sandbox Code Playgroud)

anotherProject可以完全单独构建。它根本不了解myProject。

现在,anotherProject有很多我需要的模块,例如:

anotherProject/A/CMakeLists.txt (produces static lib A.a)
anotherProject/B/CMakeLists.txt (produces static lib B.a)
etc
Run Code Online (Sandbox Code Playgroud)

构建myProject时,我想构建并链接到anotherProject / A和anotherProject / B,以生成共享库myproject.so。如果可能,我想利用anotherProject的现有cmake-ness,而不是从myProject手动获取其各种源集。

用cmake实现此目的的正确方法是什么?我觉得我缺少明显的东西。

例如,如果myProject只是anotherProject下的子目录,或者如果存在可以同时引用myProject和anotherProject的顶级CMakeLists.txt,这将很简单。但是我追求的都不是。我知道我可以构建另一个项目并将其库导出到一个众所周知的位置,然后从myProject引用导出目录-但我也想避免这种设置。

c++ cmake

5
推荐指数
1
解决办法
1731
查看次数

cmake:查找/添加 Visual Studio 或 windows sdk 库和头文件的正确方法?

我正在使用 cmake 生成一个 Visual Studio 项目。

假设我需要使用以下 Microsoft 特定的库和标头:

  • 微软C ++单元测试框架(例如库位置: c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\UnitTest\lib\x64\Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib
  • crtdbg用于发现内存泄漏(例如报头的位置: c:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\crtdbg.h

我不想将这些路径硬编码到我的 CMakeLists.txt 中,也不想强制开发人员在构建过程中传入路径。

我希望能够做这样的事情:

# 1.  get include paths somehow
# 2.  get lib paths somehow

include_directories(
    ${MSVS_UnitTest_INCLUDE_DIR}
    ${Windows_SDK_INCLUDE_DIR}/ucrt
)

link_directories(
    ${MSVS_UnitTest_LIBRARIES_DIR}/x64
    ${Windows_SDK_LIBRARIES_DIR}/ucrt/x64
)

add_library(MyTest mytest.cpp)

target_link_libraries(MyTest
    libucrt
    Microsoft.VisualStudio.TestTools.CppUnitTestFramework
)
Run Code Online (Sandbox Code Playgroud)

做#1 和#2 的正确方法是什么?

c++ cmake visual-studio

5
推荐指数
1
解决办法
236
查看次数

使用PendingIntent时不遵守singleTask和singleInstance?

我将launchMode设置为singleTask的活动:

<activity
    android:name="com.blah.blah.MyActivity"
    android:launchMode="singleTask">
</activity>
Run Code Online (Sandbox Code Playgroud)

我有一个PendingIntent持续通知,启动该活动:

Intent activityIntent = new Intent( this,
                                    MyActivity.class );
TaskStackBuilder stackBuilder = TaskStackBuilder.create( this );
stackBuilder.addParentStack( MyActivity.class );
stackBuilder.addNextIntent( activityIntent );
PendingIntent resultingActivityPendingIntent = stackBuilder.getPendingIntent( REQUEST_CODE,
                                                                              PendingIntent.FLAG_UPDATE_CURRENT );
...
m_notificationBuilder.setContentIntent( resultingActivityPendingIntent );
startForeground( ONGOING_NOTIFICATION_ID,
                 m_notificationBuilder.build() );
Run Code Online (Sandbox Code Playgroud)

当我与现有的MyActivity交互时,我点击Home并通过启动器重新启动MyActivity,MyActivity onNewIntent()会按预期调用.

问题是当我与现有的MyActivity交互时,我点击正在进行的通知时,会创建一个新的MyActivity onCreate(),现有的MyActivity将被销毁onDestroy().我预计onNewIntent()会调用MyActivity .为什么不这样呢?

我试过这些答案没有成功:

android launchmode android-pendingintent

4
推荐指数
1
解决办法
1111
查看次数

如何在锁屏上显示通知内容 - Android

我正在使用NotificationCompat.Builder来创建通知:

Intent activityIntent = new Intent( this,
                                    MyActivity.class );
PendingIntent resultingActivityPendingIntent = getPendingIntent( activityIntent );

// create notification for foreground service
m_notificationBuilder = new NotificationCompat.Builder( this );
m_notificationBuilder.setSmallIcon( R.mipmap.ic_launcher );
m_notificationBuilder.setTicker( "some text" );
m_notificationBuilder.setContentTitle( "some text" ) );
m_notificationBuilder.setContentIntent( resultingActivityPendingIntent );
startForeground( ONGOING_NOTIFICATION_ID,
                 m_notificationBuilder.build() );
Run Code Online (Sandbox Code Playgroud)

通知在状态栏和通知下拉列表中按预期运行,但对于锁屏,它显示如下:

com.myname.mypackage 
Contents hidden
Run Code Online (Sandbox Code Playgroud)

如何更改包名称所在的行?

我已尝试在通知构建器中设置内容文本和内容信息,但它不会更改任何内容.

必须有一些显而易见的东西,因为其他应用程序,即使其内容被隐藏,也会有相关内容,例如:

USB connectivity
Contents hidden
Run Code Online (Sandbox Code Playgroud)

我正在使用SDK 19,构建工具19,目标19,min SDK 11.

notifications android

2
推荐指数
1
解决办法
1823
查看次数