我一直在对Apache Shiro和Spring Security进行一些比较 - 我真的很喜欢Shiro使用的安全模型,并相信它比Spring Security更清晰.
但是,一个很好的方法是能够从方法级安全注释中引用方法参数.例如,现在我可以这样:
@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
Run Code Online (Sandbox Code Playgroud)
在此示例的上下文中,这意味着经过身份验证的用户必须具有在电子邮件帐户上发送电子邮件的权限.
但是,这不是很细粒度,因为我想要实例级权限!在此上下文中,假设用户可以拥有电子邮件帐户实例的权限.所以,我想写一下这样的代码:
@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
Run Code Online (Sandbox Code Playgroud)
通过这种方式,权限字符串引用传递给方法的参数,以便可以针对特定的EmailAccount实例保护该方法.
我知道我可以从方法中的普通Java代码轻松地做到这一点,但使用注释实现相同的东西会很棒 - 我知道Spring Security在其注释中支持Spring EL表达式.
这绝对不是Shiro的特色,因此我必须编写自己的自定义注释吗?
谢谢,
安德鲁
我们在Android中执行AsyncTask的正常方式是,从Android API:
private class DoIntenseTask extends AsyncTask<Object, Object, Void> {
protected Void doInBackground(Object... params) {
for (Object param : params) {
Object rtnObj = doIntenseJob(param);
publishProgress(rtnObj);
}
return null;
}
protected void onProgressUpdate(Object... progress) {
for (Object rtnObj : progress) {
updateActivityUI(rtnObj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的紧张任务是松散耦合的,执行顺序并不重要,通过这种方式,分配一个线程来运行一系列紧张的任务.我个人认为这是一种中途解决方案.是的,紧张的工作不再在UI线程中运行,但仍然需要逐个执行(在很多情况下,我们面临着一份紧张的工作列表,我认为这也是为什么AsyncTask中的方法是多参数化的原因).谷歌应该使API更具可重用性,以解决不同类型的场景.
我真正喜欢的是由线程池(例如poolSize = 5)并行运行多个doIntenseJob().看起来google确实通过AsyncTask.executeOnExecutor()提供了一个解决方案,但遗憾的是,自API级别11以来才可用.我正在开发移动应用程序,并想知道是否有一个解决方法,我可以在API级别11下实现相同的行为.
在此先感谢
Y.
当我打开Android Studio时,它会加载最后一个项目,然后运行build.我真的不需要这样做.如果我保存一个有错误的项目,因为我没有时间修复它们,但是计划稍后再做,我真的不希望编译器在下次打开项目时尝试编译它,因为它是只是会失败.
即使它没有错误,在启动时构建项目也是毫无意义的,因为如果项目没有错误,我总是构建它以在我停止工作之前测试它,因此新构建将是完全冗余的.谢谢,如果有人知道一种方法来禁用它.我试过谷歌搜索并搜索设置但找不到任何东西.
编辑:自从我搬到一台较慢的计算机进行开发后,这变得更加烦人.Android Studio启动已经花了足够长的时间,让程序构建只会减慢启动速度.
我目前正在Eclipse中开发一个Android项目,我的SQL查询出现问题.
我试图按两列以上的顺序排序查询,目前我正在通过KEY_DAY_ID进行,但我想通过KEY_START_TIME进行,但我无法让它工作
我的查询目前看起来像这样:
Cursor cursor = db.query(TABLE_SESSION, new String[] {KEY_ID, KEY_MODULE_CODE,
KEY_DAY_OF_WEEK, KEY_START_TIME, KEY_DURATION, KEY_SESSION_TYPE, KEY_ROOM},
null, null, null, null, KEY_DAY_ID + " ASC");
Run Code Online (Sandbox Code Playgroud)
请让我知道你的想法.先感谢您!
在ADT 17之后,非Android库需要包含在项目的"libs"文件夹中,或者通过构建路径中的"Order and Export"选项卡导出.在外部导入库之间有什么区别(如果有的话):


而在内部:


以"Android依赖关系"组中包含的方式导入库是否有优势?
我正在尝试使用全新的ArrayList更新ListView.对于API 11,使用addAll(...)方法可以很好地工作,但是这不适用于早期的API.我无法弄清楚如何为旧版本更新这样的整个列表.
ArrayAdapter<String> textList = new ArrayAdapter<String>(listener, R.layout.list_item, stringList);
listener.setListAdapter(textList);
Run Code Online (Sandbox Code Playgroud)
然后......
textList.clear();
textList.addAll(stringList); <--- works fine for Android 3.0 (API Level 11) and beyond, but not before.
Run Code Online (Sandbox Code Playgroud)
在API 11中引入addAll()之前,你是如何做到这一点的?谢谢.
我有一个班级,我有Drawable一个成员.
我用这个类作为Parcelable额外的活动跨活动发送数据.
为此,我扩展了parceble,并实现了所需的功能.
我能够使用读/写int/string发送基本数据类型.
但是在编组Drawable对象时我遇到了问题.
为此我试图转换Drawable为byte array,但我得到类强制转换异常.
我使用以下代码将我的Drawable转换为Byte数组:
Bitmap bitmap = (Bitmap)((BitmapDrawable) mMyDrawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[]byteArray = stream.toByteArray();
out.writeInt(byteArray.length);
out.writeByteArray(byteArray);
Run Code Online (Sandbox Code Playgroud)
并将字节数组转换为Drawable我使用以下代码:
final int contentBytesLen = in.readInt();
byte[] contentBytes = new byte[contentBytesLen];
in.readByteArray(contentBytes);
mMyDrawable = new BitmapDrawable(BitmapFactory.decodeByteArray(contentBytes, 0, contentBytes.length));
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到了类强制转换异常.
我们如何使用HashMap编写/传递Drawable?
我们有什么方法可以通过Parcel传递Drawable.
谢谢.
在Android设计指南中,它指出"有两种类型的标签:固定和可滚动".
我在ActionBar文档中找不到任何文档来支持指定任一类型的选项卡.
如何指定要固定或可滚动的选项卡组?如果你不能,那么选项卡是固定的还是可滚动的呢?
我不清楚在使用android-maven-plugin构建时禁用调试构建的确切过程:
我知道带有ADT(21.1)的导出向导将自动禁用调试,但它会被破坏,因为BuildConfig.DEBUG始终返回true并且我的日志记录过去依赖于它.(现在我有自己的maven构建配置文件中定义的日志记录属性.)
所以,如果我必须使用android-maven-plugin禁用调试,那么正确的方法是什么?
我使用以下插件:
我不确定签名和zipaligning是否会自动禁用调试,因为我在maven输出中看到以下行:
[INFO] --- android-maven-plugin:3.5.0:apk (default-apk) @ stackx ---
[INFO] Copying local assets files to combined assets directory.
[INFO] Enabling debug build for apk.
Run Code Online (Sandbox Code Playgroud)
是否有明确的方法来禁用调试?
我正在创建一个简单的应用程序,从网络流式传输视频,但我现在想要更改代码,以便我可以从SDCard播放视频文件
原始代码:
Uri vidFile = Uri.parse("MY SITE HERE");
VideoView videoView = (VideoView) findViewById(R.id.VideoView);
videoView.setVideoURI(vidFile);
videoView.setMediaController(new MediaController(this));
videoView.start();
Run Code Online (Sandbox Code Playgroud)
所以请帮我改变代码,以便它可以播放我的移动存储卡中的视频.
android ×9
build ×2
java ×2
adt ×1
annotations ×1
debugging ×1
eclipse ×1
maven ×1
maven-plugin ×1
parcelable ×1
project ×1
security ×1
shiro ×1
spring ×1
threadpool ×1