我写了一个Java程序,其中,我需要追加一个字符串
" u13a2"到现有的"u1234 u12de u1386 ... u15a3".
因此,弦逐渐变得越来越长.我发现每次追加所花费的时间也变得越来越长.有什么方法可以在某种程度上改善这一点吗?
我想到的实现包括:
unicodeArray += " "+unicode;
Run Code Online (Sandbox Code Playgroud)
要么
unicodeArray = unicodeArray.concat(" "+unicode);
Run Code Online (Sandbox Code Playgroud)
他们给出了类似的表现 我认为造成这些不良表现的主要原因是特殊类型String.它为每个作业创建一个新对象.如果你也这么认为,这是否意味着我最好使用另一种类型,比如字节数组?
简短的总结是:我如何构建一个APK和单独的库(我指的是某些形式的类集合(理想情况下也是资源),例如JAR,AAR或DEX文件),但不包括那些库中的库. APK; 相反,应用程序在运行时加载它们?
所以我的主要问题是如何构建这样的应用程序(例如Gradle配置).如何指定哪些类进入哪些JAR或DEX文件?我是否为每个想要最终使用的DEX文件创建了一个Android Studio模块?
一个密切相关的问题是Java代码应该如何加载外部库并在运行时访问它们的类.对于后者,我希望通过类加载器从dex文件访问app类时显示的方法可行.
我试着在说明https://developer.android.com/studio/projects/android-library.html,但是这是建立一个APK 不包括依赖库.
我也尝试过Multidex(https://developer.android.com/studio/build/multidex.html),但这似乎并没有让开发人员控制哪些类进入哪个DEX文件,此外,将它们打包成一个APK.AFAICT无法在运行时控制这些DEX文件的加载.
这里有" XY问题 " 的可能性,所以我最好解释一下背景.
我正在为客户构建一个应用程序.它不会通过应用程序商店分发,因此它无法访问正常的更新机制.相反,客户希望应用程序能够通过下载自身的新组件来更新自己,以替换旧组件,而无需手动加载新的APK.这里的主要动机是非技术用户的更新必须容易.如果应用程序可以控制更新过程,它可以使其流畅并引导用户.
此外,该应用程序将用于互联网访问稀缺和昂贵的领域,因此客户希望能够以较小的块(例如2MB)发布应用程序更新,而不是强迫用户重新下载整个应用程序以接收小更新.
如果重要的话,我应该提到的要求的一个方面是,在运行时加载的库应该存在于microSD卡上.这也有助于在没有互联网访问的情况下分发更新.
该应用程序的当前状态是大约50%写入:即,已发布了几个早期版本,但现在需要修改(重组)应用程序以满足上述要求以及其他要求.
android dynamic-class-loaders mobile-application android-gradle-plugin
它有点像"鸡或鸡蛋"类型的查询,但有人可以梦想一个可以返回查询执行的当前数据库实例的名称的查询吗?相信我,当我说我明白悖论:如果你已经连接执行查询,为什么你需要知道数据库实例的名称?在多数据库环境中进行审计.
我查看了联机丛书中的所有@@ globals." SELECT @@servername"接近,但我想要数据库实例的名称而不是服务器.
在河内塔问题是递归的一个经典问题.在其中一个上有3个带磁盘的挂钩,您必须按照给定的规则将所有磁盘从一个挂钩移动到另一个挂钩.您还必须使用最少的移动次数执行此操作.
这是一个解决问题的递归算法:
void Hanoi3(int nDisks, char source, char intermed, char dest)
{
if( nDisks > 0 )
{
Hanoi3(nDisks - 1, source, dest, intermed);
cout << source << " --> " << dest << endl;
Hanoi3(nDisks - 1, intermed, source, dest);
}
}
int main()
{
Hanoi3(3, 'A', 'B', 'C');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,想象同样的问题,只有4个钉子,所以我们添加另一个中间挂钩.当面临必须在任何一点选择哪个中间挂钩的问题时,我们将选择最左边的一个,以防1个以上是免费的.
我有这个问题的递归算法:
void Hanoi4(int nDisks, char source, char intermed1, char intermed2, char dest)
{
if ( nDisks == 1 )
cout << source << " …Run Code Online (Sandbox Code Playgroud) 我正在努力学习THREE.js的基础知识.我已经阅读了几个教程,我想开始尝试.我的问题是我找不到任何文件
这应该是一个API浏览器,但我无法找到非常基本的对象,比如PlaneGeometry或SphereGeometry.还有其他地方可以找到API吗?
我相信这应该只能使用标准XPath来回答,而不需要参考实现,但仅供参考我在.Net(System.Xml命名空间)中使用XML DOM对象.
我有一个节点从一个XML文档深处的某个地方传递给我的函数,我想选择具有特定名称的该节点的所有后代元素,而不管这些节点的中间路径.我正在制作的电话看起来像这样:
node.SelectNodes("some XPath here");
Run Code Online (Sandbox Code Playgroud)
我正在使用的节点看起来像这样:
...
<food>
<tart>
<apple color="yellow"/>
</tart>
<pie>
<crust quality="flaky"/>
<filling>
<apple color="red"/>
</filling>
</pie>
<apple color="green"/>
</food>
...
Run Code Online (Sandbox Code Playgroud)
我想要的是所有"苹果"节点的列表,即3个结果.我尝试过几种不同的东西,但没有一种能得到我想要的东西.
node.SelectNodes("apple");
Run Code Online (Sandbox Code Playgroud)
这给了我一个结果,绿苹果.
node.SelectNodes("*/apple");
Run Code Online (Sandbox Code Playgroud)
这给了我一个结果,黄色的苹果.
node.SelectNodes("//apple");
Run Code Online (Sandbox Code Playgroud)
这给了我数百个结果,看起来像文档中的每个苹果节点,或者至少可能是文档根目录的直接子节点的每个苹果节点.
如何创建一个XPath,它将为我提供当前节点下的所有苹果节点,无论它们在当前节点下的深度如何?具体来说,根据我上面的例子,我应该得到三个结果 - 红色,绿色和黄色的苹果.
我正在尝试执行查询以使用MySQL通过Python搜索数据库中的3个表.每次我尝试执行以下字符串作为查询时,它会给我一个关于字符串中连接的错误.
"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"
Run Code Online (Sandbox Code Playgroud)
这是它给我的错误:
ValueError: unsupported format character ''' (0x27) at index 1
Run Code Online (Sandbox Code Playgroud)
如果我删除它要求的字符,那么我还必须删除%,这会阻止查询实际正常工作.我能做些什么来解决这个问题,因为我对Python很陌生.
谢谢,克里斯
在某些版本的Android和Linux的其他版本中,可以获取已安装SD卡的序列号,例如通过读取/sys/class/mmc_host/mmc0/mmc0:0001/serial或的内容/sys/block/mmcblk0/device/serial(特定数字可能会有所不同).在我的测试中,只要将SD卡插入内置SD卡插槽(不通过USB适配器安装),这就非常可靠.
但是从Android 7.0 Nougat开始,据说操作系统阻止访问这些信息,至少在某些设备上是这样.我通过在新的阿尔卡特A30 GSM(Android 7.0)上运行测试应用程序对此进行了测试,实际上上述方法失败并出现权限错误:
java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at java.io.FileInputStream.open(Native Method)
Run Code Online (Sandbox Code Playgroud)
为了将来参考,我们(从adb shell测试)具有ls -ld以下权限:
/sys/class/mmc_host 但不是 /sys/class/mmc_host/mmc0/sys/block 但不是 /sys/block/mmcblk0由于上述方法不再有效,
有没有其他方法可以获得Android 7.0或更高版本中安装的SD卡的序列号?
如果不这样做,谷歌是否有关于提供或不提供此功能的计划的任何文件或其他声明?我没有在Android 问题跟踪器中找到任何内容,但也许我没有找到正确的搜索引擎.
为了确保问题清楚,我正在谈论在非根设备上运行的普通(非系统)应用程序可以做什么,以及应用程序通常可以请求和接收的任何权限.
仅供参考,该/sbin目录似乎不可读,因此命令/sbin/udevadm不是一个选项.
TL; DR问题摘要:我的Android应用程序尝试写入 SD卡上应用程序的外部存储目录.它失败并出现权限错误.但是,提取到最小测试应用程序中的相同代码(方法)成功了!
由于我们的目标API级别包括KitKat及更高版本(以及JellyBean),并且KitKat限制应用程序在SD卡上的任何位置写入(应用程序指定的外部存储目录除外),应用程序会尝试写入该指定目录/path/to/sdcard/Android/data/com.example.myapp/files.我通过获取目录列表Activity.getExternalFilesDirs(null);并找到一个目录来验证此目录的路径isRemovable().即我们不是硬编码SD卡的路径,因为它因制造商和设备而异.以下是演示此问题的代码:
// Attempt to create a test file in dir.
private void testCreateFile(File dir) {
Log.d(TAG, ">> Testing dir " + dir.getAbsolutePath());
if (!checkDir(dir)) { return; }
// Now actually try to create a file in this dir.
File f = new File(dir, "foo.txt");
try {
boolean result = f.createNewFile();
Log.d(TAG, String.format("Attempted to create file. No errors. Result: %b. Now exists: %b",
result, f.exists()));
} catch …Run Code Online (Sandbox Code Playgroud) android file-permissions android-sdcard android-external-storage
这是我有的:
JAVA_HOME = C:\ Software\Java\jdk1.5.0_12(指向JDK 5.0)
在Eclipse"Installed Runtimes"中我有:jre 1.5.0_12(指向JRE 5.0)jre 1.6.0_3(指向JRE 6.0)(这是默认值)
我的PATH上没有"javac"(即如果我不在JDK/bin中,我无法从命令行运行javac -version).
我的项目设置为使用jre 1.6.0_3,编译器的合规级别设置为6.0.
问题是:Eclipse如何编译我的项目?在哪里找到6.0的编译器?此外,有没有办法准确地告诉Eclipse使用哪个编译器(即javac的路径)?
PS OS XP SP2如果它是相关的PPS我没有在eclipse.ini中设置任何-vm.在eclipse中,我看到eclipse.vm = C:\ Program Files\Java\jre6\bin\client\jvm.dll,它仍然是一个JRE.