小编phr*_*eed的帖子

如何在Android内容提供商中存储大blob?

我有一些大文件(图像和视频),我需要存储在内容提供商.android文档表明......

如果您公开的字节数据太大而无法放入表本身 - 例如大型位图文件 - 将数据公开给客户端的字段实际上应该包含content:URI字符串.这是允许客户端访问数据文件的字段.该记录还应该有另一个名为"_data"的字段,该字段列出设备上该文件的确切文件路径.此字段不是由客户端读取,而是由ContentResolver读取.客户端将在面向用户的字段上调用ContentResolver.openInputStream(),该字段包含项目的URI.ContentResolver将为该记录请求"_data"字段,并且因为它具有比客户端更高的权限,所以它应该能够直接访问该文件并将该文件的读取包装器返回给客户端. - http://developer.android.com/guide/topics/providers/content-providers.html#creating

我找一个例子有点困难.特别是我希望在ImageView的上下文中使用位图.考虑以下代码准代码(它不起作用)......

ImageView iv = ....
String iconUri = cursor.getString(cursor.getColumnIndex(Table.ICON));
iv.setImageURI(Uri.parse(iconUri));
Run Code Online (Sandbox Code Playgroud)

意见/问题...

  1. 如何正确重建存储/恢复的uri?(这是表格中的文字)
  2. setImageURI实现使用内容解析openInputStream,所以这应该工作.

    String scheme = mUri.getScheme();
    ...
    } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)
            || ContentResolver.SCHEME_FILE.equals(scheme)) {
      try {
        d = Drawable.createFromStream(
                mContext.getContentResolver().openInputStream(mUri),
                null);
    
    Run Code Online (Sandbox Code Playgroud)

    --frameworks /碱/核心/ JAVA /机器人/插件/ ImageView.java

我搞定了.我从MediaStore和MediaProvider中提取了一些提示.包含数据的文件根据内容提供者(目录),列名,行ID和媒体类型命名.然后内容解析器获取文件描述符,如此...

Uri iconUri = Uri.withAppendedPath(Table.getUri(cursor), Table.ICON);
ib.setImageURI(iconUri);
Run Code Online (Sandbox Code Playgroud)

......内容提供商以实物回应......

@Override
public ParcelFileDescriptor openFile (Uri uri, String mode) {
int imode = 0;
if (mode.contains("w")) imode |= ParcelFileDescriptor.MODE_WRITE_ONLY;
if (mode.contains("r")) imode |= ParcelFileDescriptor.MODE_READ_ONLY;
if (mode.contains("+")) imode |= …
Run Code Online (Sandbox Code Playgroud)

android inputstream android-contentresolver android-contentprovider

13
推荐指数
1
解决办法
1万
查看次数

如何在clojure中编写可变参数defmulti/defmethod

我有一个defmulti/defmethod组,它接受这样的参数......

(defmulti foo "some explanation" (fn [arg1 arg2] (mapv class [arg1 arg2])))
(defmethod foo [N P] (->L 1 2 3))
(defmethod foo [L P] (->N 5))
(defmethod foo [P N] (->L 6 7 8))
 ...
Run Code Online (Sandbox Code Playgroud)

以您期望的方式调用它们.

(foo (->N 9) (->P 9))
Run Code Online (Sandbox Code Playgroud)

我想要的是用超过2个参数调用'foo'.我知道如何使用函数执行此操作,我想我可以使用一些包装函数将args拆分成对,然后组合结果(或者只使用'reduce'),但这似乎是错误的.

我的问题是......在clojure中定义可变参数多功能的惯用方法是什么?

polymorphism clojure variadic

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

tsserver:错误处理请求(无项目)

在"Visual Studio Code"(v1.5.3)中处理TypeScript(v2.0 +)项目时,出现以下错误:

[Error - 10:03:50 AM] 'format' request failed with error.
Error processing request. No Project.
Error: No Project.
...
Run Code Online (Sandbox Code Playgroud)

我用详细日志重新启动了visual-studio-code.

export TSS_LOG='-level verbose -file <my-home>/tss.log'
Run Code Online (Sandbox Code Playgroud)

这提供了更多信息:

Info 1233 request: {"seq":522,"type":"request","command":"format","arguments":{"file":"/<my_project>/src/ts/<the-file>.ts","line":1,"offset":1,"endLine":616,"endOffset":1}}

Err 1234  Exception on executing command {"seq":522,"type":"request","command":"format","arguments":{"file":"/<my_project>/src/ts/<the-file>.ts","line":1,"offset":1,"endLine":616,"endOffset":1}}:
No Project.
Error: No Project.
    at Errors (<my_global_node>/lib/node_modules/typescript/lib/tsserver.js:50793:32)
    at ts.server.ts.server (<my_global_node>/lib/node_modules/typescript/lib/tsserver.js:50795:11)
    at ts (<my_global_node>/lib/node_modules/typescript/lib/tsserver.js:51775:7)
    at Object.<anonymous> (<my_global_node>/lib/node_modules/typescript/lib/tsserver.js:51776:3)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)

Info 1235 response:        
{"seq":0,"type":"response","command":"format","request_seq":522,"success":false,"message":"Error processing …
Run Code Online (Sandbox Code Playgroud)

typescript visual-studio-code typescript2.0

3
推荐指数
1
解决办法
1332
查看次数

ContentResolver如何找到相应的ContentProvider?

这是一个很神奇的问题.我理解对ContentResolver方法的调用需要一个特定于ContentProvider的URI,但android如何实际建立关联?

我猜测任何与AndroidManifest.xml中的ContentProvider提供的权限相匹配的URI都会涉及到.请求是否发送到包含该权限的每个提供商?如果我尝试创建其权限前缀为另一个权限的提供程序将是一个问题?

有没有办法看看ContentProvider是否正在运行?我想也许getType()方法的虚拟响应可能表示活跃.

android android-contentresolver android-contentprovider

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

如何强制 Kotlin 哈希图中的键对象等效?

我有一个类“Foo”(不在我的控制之下),我希望将其用作 kotlin(java)哈希图中的键。问题是“Foo”的“equals”方法确实值相等。对于我的情况来说,价值对等太宽松了。我需要对象等价。

有哪些方法可以强制在键上强制使用对象等效性?

我在想类似的事情...

data class Foo(val prop: String)
data class Bar(val prop: String)

fun main() {
    val fooMap = mutableMapOf<Any, Bar>()

    val fooA = Foo("common value")
    val fooB = Foo("common value")

    fooMap[fooA] = Bar("different A")
    fooMap[fooB] = Bar("different B")
    println("${fooMap.keys} ${fooMap.values}")
}
Run Code Online (Sandbox Code Playgroud)

这会导致 fooMap 只有一个条目,而我期望有两个条目。

[Foo(prop=common value)] [Bar(prop=different B)]
Run Code Online (Sandbox Code Playgroud)

java key equals hashmap kotlin

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

Antlr4 导入组合语法失败

我目前正在...

error(56): AqlCommentTest.g4:12:4: reference to undefined rule: htmlCommentDeclaration
error(56): AqlCommentTest.g4:13:4: reference to undefined rule: mdCommentDeclaration
Run Code Online (Sandbox Code Playgroud)

词法分析器语法的导入似乎正在加载。以下文件存在问题。

AqlCommentTest.g4

grammar AqlCommentTest;
import AqlLexerRules;
import AqlComment;

program: commentDeclaration+;

commentDeclaration:
    htmlCommentDeclaration     #Comment_HTML
  | mdCommentDeclaration       #Comment_MD
;
Run Code Online (Sandbox Code Playgroud)

AqlComment.g4

grammar AqlComment;
import AqlLexerRules;

htmlCommentDeclaration: 'html' '{' '(*' STRING '*)' '}';

mdCommentDeclaration: 'md' '{' '(*' STRING '*)' '}';
Run Code Online (Sandbox Code Playgroud)

AqlLexerRules.g4

lexer grammar AqlLexerRules;
STRING :  '"' [a-z]? '"' ;
Run Code Online (Sandbox Code Playgroud)

可以通过删除“import AqlLexerRules;”来停止错误 来自“AqlCommentTest.g4”文件。

为什么这可以“解决”问题?

如何检查是否实际应用了 antlr4 导入语句以及如何应用?

import antlr4

0
推荐指数
1
解决办法
568
查看次数