这个问题在很多时候被问过,但我仍然找不到解决这个问题的好方法.
为什么我需要这样做?好吧,因为项目我和我的团队开发有iOS风格.
我尝试了什么?
那么有没有办法改变CardView的阴影颜色,只需对所有布局文件进行最少的编辑,并在视图外部绘制阴影,就像原始的CardView一样?
android shadow android-view android-cardview android-elevation
我知道如何使用从目录中AssetManager读取a ,但对于我的特殊用例,我需要一个.我需要一个具体的原因是因为我需要通过调用从中获取对象.Fileres/rawInputStreamFileInputStreamFileInputStreamFileChannelgetChannel()
这是我到目前为止的代码,它从一个读取数据(在我的例子中是一个基元列表)File:
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
Run Code Online (Sandbox Code Playgroud)
我试图File从一个创建Uri,但这只会导致FileNotFoundException:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,我可以得到FileInputStream一个File在res/raw目录中?
我们是否需要UseCases从Repository域层中的接口创建每个方法?
例如,假设我有这样的Repository接口
interface ThingRepository {
void create(Thing thing);
void delete(Thing thing);
List<Thing> readAll();
int size();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,有一种size()方法可以返回数据库或文件中的记录数,无论如何.这种方法非常快.我想UseCase这个方法没有必要,因为它不会阻塞UI线程并且可以同步执行.
所以,当你创建UseCases时,你可以解释我.基本上是否有任何UseCase创作规则?
对不起,如果这个问题存在一些误解.
提前致谢 ;)
我也在github上的Android-CleanArchitecture repo上打开了同样的问题,但没有人回答它,这就是我在这里问的原因.
我正在尝试File使用FileInputStream.
这就是我创建的方式FileInputStream:
AssetManager assetManager = getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)
之后,我试图从File这样的读取数据:
FileChannel fileChannel = inputStream.getChannel();
MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
IntBuffer intBuffer = mappedByteBuffer.asIntBuffer();
int[] array = new int[intBuffer.limit()];
intBuffer.get(array);
inputStream.close();
fileChannel.close();
Run Code Online (Sandbox Code Playgroud)
但这不起作用。出于某种原因,fileChannel.size()返回了一个巨大的数字。我有一个正好 13 个字节长的测试文件,但fileChannel.size()返回 1126498!此外,如果我忽略大小并开始读取返回的字节,则根本不匹配我的测试文件!
那么这里发生了什么?有没有办法解决这个问题?
为了了解ProGuard它是如何工作的,我创建了一个小Android示例,添加了一些示例jar,编写了几行代码,启用ProGuard等等。
接下来是我的 ProGuard 选项
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-optimizationpasses 5
-optimizations !class/unboxing/enum
Run Code Online (Sandbox Code Playgroud)
因此,在对我的 APK 名称进行逆向工程后,所有Object方法(例如toString()、hashCode()、 )equals()保持不变。除了Object的方法之外,Externalizable方法的名称也保留
那么您知道为什么会发生这种情况吗?是否可以解决?
我需要在文件中存储包含 80,000 个项目的布尔数组。我不在乎节省多少时间,我只对数组的加载时间感兴趣。我没有尝试通过 DataOutputStream 存储它,因为它需要访问每个值。
我试图通过 3 种方法来做到这一点,例如:
为了测试通过这些方法读取文件,我在循环中运行了每种方法 1,000 次。所以我得到了如下所示的结果:
第一种方法和第二种方法太长了,第三种方法可能根本就不是方法。
也许有最好的方法来完成它,所以我需要你的建议
编辑
每个方法运行一次
我正在使用ViewTreeObserver.OnGlobalLayoutListenerin onCreate()方法来获取布局的宽度。它很好用,但是当我在onGlobalLayout()回调更改中使用变量时,请不要将其保留在外部。
例如,当我在“活动”字段中保存布局的宽度时,它会在onGlobalLayout()方法外返回上一个值或默认情况下的值(在我的情况下为0)。当我更改变量的引用时,方法外它们将为null。
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
width = layout.getWidth(); // width - activity's field
Log.d("myLogs", width); //return rigth value
}
});
Log.d("myLogs", width); //return 0
Run Code Online (Sandbox Code Playgroud)
我不知道如何处理,也许我需要Layout以另一种方式获得宽度。
提前致谢)
我有公共方法add(String)调用私有方法inspectSequence(String)来检查String是否有效.
如果传递String有效,则此方法返回数组,如果它无效则抛出方法IllegalArgumentException
代码是下一个
public void add(String sequence) throws IllegalArgumentException{
inspectSequence(sequence);
}
private int[] inspectSequence(String sequence){
int[] array;
//some actions
if(<some condition>) throw new IllegalArgumentException("description");
return array;
}
Run Code Online (Sandbox Code Playgroud)
所以在情况下,当无效String传递给add方法输出时,下一步是:
java.lang.IllegalArgumentException: description
at inspectSequence
at add
Run Code Online (Sandbox Code Playgroud)
但是我不希望用户知道私有inspectSequence方法,因为这是实现细节,对吧?
那么在那种情况下我能做些什么呢?在这里抛出未经检查的异常是一个好主意吗?
而且是一个好主意,抛出异常中inspectSequence的方法,或者我应该返回null提供时String是无效的,然后检查返回结果add的方法,并根据它扔还是不扔异常?