有没有办法注册一个方法,以便在用户结束"文本选择模式"时自动调用它(从而将选择复制到剪贴板)?
我知道有两种方法可以替换字符串中所有出现的子字符串.
正则表达式方式(假设"要替换的子字符串"不包括正则表达式特殊字符):
String regex = "substring-to-be-replaced" + "+";
Pattern scriptPattern = Pattern.compile(regex);
Matcher matcher = scriptPattern.matcher(originalstring);
newstring = matcher.replaceAll("replacement-substring");
Run Code Online (Sandbox Code Playgroud)
String.replace()方式:
newstring = originalstring.replace("substring-to-be-replaced", "replacement-substring");
Run Code Online (Sandbox Code Playgroud)
哪两个更有效(以及为什么)?
有没有比上述两种更有效的方法?
我曾经使Proguard 4.6完美地在Eclipse 3.6.2上导出已签名的应用程序.
但是一旦我将ADT + SDK更新16.0.0.v201112150204-238534到18.0.0.v201203301601-306762我就无法再导出已签名的应用程序(调试版本工作正常).相反,我在控制台中收到以下错误日志:
Proguard returned with error code 1. See console
java.io.IOException: Can't read [\\bta\wspc\LibProj1\bin\libproj1.jar] (Can't process class [com/bta/blib/proj1/BtClsProj1.class] (Unexpected end of ZLIB input stream))
at proguard.InputReader.readInput(InputReader.java:230)
at proguard.InputReader.readInput(InputReader.java:200)
at proguard.InputReader.readInput(InputReader.java:178)
at proguard.InputReader.execute(InputReader.java:78)
at proguard.ProGuard.readInput(ProGuard.java:196)
at proguard.ProGuard.execute(ProGuard.java:78)
at proguard.ProGuard.main(ProGuard.java:492)
Caused by: java.io.IOException: Can't process class [com/bta/blib/proj1/BtClsProj1.class] (Unexpected end of ZLIB input stream)
at proguard.io.ClassReader.read(ClassReader.java:112)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.JarReader.read(JarReader.java:65)
at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
at proguard.InputReader.readInput(InputReader.java:226)
... 6 more
Caused by: java.lang.RuntimeException: Unexpected end …Run Code Online (Sandbox Code Playgroud) 是否有适用于Android的"hocus-pocus"功能,可将HTML转换为纯文本?
我指的是像Internet Explorer,Firefox等浏览器中的剪贴板转换操作这样的函数:如果在浏览器中选择所有呈现的HTML并将其复制/粘贴到文本编辑器,您将收到(大部分)文本,没有任何HTML标签或标头.
在一个类似的线程中,我看到了对html2text的引用,但它是在Python中.我正在寻找Android/Java功能.
有没有这样的东西,或者我必须自己这样做,使用Jsoup还是Jtidy?
在这个依赖注入的初学者指南中,我注意到UML图区分了"使用"和"依赖".
由于两者都需要在"使用"或"依赖"的类中使用某种形式的引用,我想知道:两者之间的区别是什么?
我最近遇到了一个令人费解的问题,没有解释我以某种方式设法解决.
该解决方案本身提出了一个问题,我是因为我不明白:它迫使我直接Proguard的忽略关于我自己的应用程序在其包中的所有的警告全部.
-dontwarn com.bta.**
Run Code Online (Sandbox Code Playgroud)
除了在我的开发中忽略关于最容易出错的代码的警告(最常见的代码更改)这一令人不安的问题,我对两个问题感到困惑:
我相信我介绍的一些新代码或库导致了这个问题(AdMob?),但对此有何解释?为什么第三方库会强迫我关闭我自己的应用程序资源的警告?
完全关闭我自己的应用程序包的警告有什么副作用(就像我一样)?
我正在从我的应用程序中逐字复制这个方法,这个方法还没有完成,但如果事情不顺利,它会尝试为我提供超时堆栈跟踪:
protected boolean isHttpAlive() {
boolean isHttpOk = false;
HttpURLConnection httpConnection = null;
try {
URL gurl = new URL("http://www.amazon.com/");
URLConnection connection = gurl.openConnection();
connection.setConnectTimeout(5 * 1000); // 5 seconds!
httpConnection = (HttpURLConnection) connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK)
isHttpOk = true;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (httpConnection != null)
httpConnection.disconnect();
}
return isHttpOk;
}
Run Code Online (Sandbox Code Playgroud)
现在在我的一个测试设备(Droid)上,当出现问题时,我确实得到了异常,但仅在6分36秒之后,而不是我在上面的代码中设置的5秒.
为此抛出超时异常getResponseCode().
为什么?
我错过了什么?
在练习应用程序的其中一个视图中,我尝试以编程方式执行文本选择.
我能够(以编程方式)输入"文本选择模式",它由视图左上角的CursorControllers(AKA句柄)可视地指示.
如果我手动拖动右边的CursorController,然后再次单击它(在模拟器中),它按预期工作(完美),显示一条简短的消息:"文本复制到剪贴板".
但是当我尝试以编程方式拖动正确的CursorController时,没有任何反应.
我尝试这样做的方法是模拟MotionEvent.在视图中,我打电话给:
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);
MainActivity.onTouch(this, event);
Run Code Online (Sandbox Code Playgroud)
在MainActivity中我当然实现了OnTouchListener:
@Override
public boolean onTouch(View v, MotionEvent event) { // called BEFORE button's onTouchEvent()
Log.v("MainActivity::onTouch()", describeEvent(v, event));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,仅仅从onTouch返回'false',Android就会继续寻找另一个UI对象来使用MotionEvent对象,最终到达我的视野.
为什么不这样呢?
我必须遗漏一些非常基本的东西......
在这个初学者指南依赖注入的第一个代码示例中,我遇到了一些新构造,我不确定我是否完全理解:
// Instantiate CabAgency, and satisfy its dependency on an airlineagency.
Constructor constructor = cabAgencyClass.getConstructor
(new Class[]{AirlineAgency.class});
cabAgency = (CabAgency) constructor.newInstance
(new Object[]{airlineAgency});
Run Code Online (Sandbox Code Playgroud)
什么是new Class[]{AirlineAgency.class}真正的意思是做?
我知道它的目标是创建一个Constructor实例,AirlineAgency.class但语法是如何new Class[]{}实现的呢?
[]当只涉及一个对象时,为什么数组概念?
{}这里的语法是什么?为什么不()呢?
阅读Android的新ProGuard改进所做的所有精彩事情,我通过在新创建的项目中取消注释以下行来切换到新方案:
proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt;proguard-project.txt
Run Code Online (Sandbox Code Playgroud)
但是当我尝试导出这个项目的APK时,我会收到以下消息:
无效的proguard配置文件路径C:\ android-sdk-windows\tools\proguard\proguard-android.txt不存在或不是常规文件
好吧,我检查了目录C:\android-sdk-windows\tools\proguard,当然,虽然这个目录存在并且有子目录甚至是README文件,但是proguard-android.txt无处可寻.
顺便说一句,我尝试了它:而不是;但似乎没有改变任何东西.
是不是Eclipse + ADT + Proguard应该为我自动生成这个文件?我错过了什么?
另外,我在哪里可以找到Android proguard-android.txt 的"标准" 默认规则集,以便我可以将其复制到其缺失的插槽中?