我正在使用android的存储访问框架(SAF)与文档进行交互。我已经能够找到/读取/写入文档,没有任何麻烦,但是当我尝试对Google Drive文档使用DocumentsContract#renameDocument()重命名时遇到了问题。我发布的代码与内部存储中的文件配合正常。
为了使事情变得容易,我制作了一个示例应用程序并将其推送到github。您可以在以下位置找到该代码:https : //github.com/scottTomaszewski/SafExample,我与文档本身的交互都在此类https://github.com/scottTomaszewski/SafExample/blob/master/app/src/main中/java/com/example/safexample/SafDocument.java
重命名通过Google Drive的SAF界面获取的Uri时出现的错误是这样的(更易于阅读的版本:https : //github.com/scottTomaszewski/SafExample/blob/master/README.md)
03-03 14:10:41.529 29069-29069/com.example.safexample W/grok: java.io.FileNotFoundException
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:144)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:692)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1103)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:942)
at android.content.ContentResolver.openInputStream(ContentResolver.java:662)
at com.example.safexample.SafDocument$2.openStream(SafDocument.java:66)
at com.google.common.io.ByteSource$AsCharSource.openStream(ByteSource.java:420)
at com.google.common.io.CharSource.read(CharSource.java:147)
at com.example.safexample.SafDocument.read(SafDocument.java:73)
at com.example.safexample.MainActivity.onOptionsItemSelected(MainActivity.java:61)
at android.app.Activity.onMenuItemSelected(Activity.java:2912)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:404)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:167)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69)
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:169)
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:760)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948)
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:21163)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at …Run Code Online (Sandbox Code Playgroud) 我试图通过用字符串替换每个单元格中的数据来格式化表的整个列.简单地说,如果我在输入字段中输入"nargles"并单击表格列顶部的格式按钮,则该列中每个单元格中的文本将替换为"nargles".这工作正常.
我的问题涉及用表值替换输入字符串中的"%0","%1","%2"等实例.%0对应于第0列,%1表示第1列,%2表示第2列,等等.此外,它必须获取正在修改的当前行的列值.
为了澄清一个例子,让我们拿表:
1 cat description
2 dog description
3 fish description
Run Code Online (Sandbox Code Playgroud)
如果我为输入输入"Row%0 for%1"并在第3列上执行,结果将是:
1 cat Row 1 is for cat
2 dog Row 2 is for dog
3 fish Row 3 is for fish
Run Code Online (Sandbox Code Playgroud)
希望这是一个充分的解释=)
所以,这是示例表中的示例:
<tr>
<td></td>
<td><button class="format" col="1">Format Col</button></td>
<td><button class="format" col="2" >Format Col</button></td>
</tr>
<tr>
<td><input type="text" col="0" row="0" value="0" size="1"></td>
<td><input type="text" col="1" row="0" value="cat" /></td>
<td><input type="text" col="2" row="0" value="description" /></td>
</tr>
...
Run Code Online (Sandbox Code Playgroud)
这是每列顶部格式按钮的代码
$('td button.format').on('click', function () {
// get formatter variables …Run Code Online (Sandbox Code Playgroud) 在我的代码中,我有以下内容:
if all(requiredField in submittedFields for requiredField in requiredFields):
# all required fields in submittedFields exist
else:
# error handling
Run Code Online (Sandbox Code Playgroud)
我们的目标是,以检查是否在一个字符串列表requiredFields全部存在于submittedFields
当requiredFields长度> 1的字符串列表时,这可以正常工作.但是,当你有类似的东西时
requiredFields = ('single element')
Run Code Online (Sandbox Code Playgroud)
然后for循环迭代每个字符而不是字符串本身.
所以我的问题是,是否有更多的pythonic方法来处理这个问题
try:
requiredFields.sort()
# requiredFields is a list of strings
except AttributeError:
# requiredFields is a string list whose length == 1
Run Code Online (Sandbox Code Playgroud) android ×1
formatting ×1
google-docs ×1
javascript ×1
jquery ×1
python ×1
python-3.x ×1
regex ×1
replace ×1