我不断收到来自市场的以下错误报告:
java.lang.StringIndexOutOfBoundsException: length=51; regionStart=37; regionLength=-15 at
java.lang.String.startEndAndLength(String.java:593) at
java.lang.String.getChars(String.java:902) at
android.text.SpannableStringInternal.getChars(SpannableStringInternal.java:70)
at android.text.TextUtils.getChars(TextUtils.java:70) at
android.text.TextLine.set(TextLine.java:160) at
android.text.Layout.draw(Layout.java:424) at
android.widget.TextView.onDraw(TextView.java:5262) at
android.view.View.draw(View.java:11184) at
android.view.ViewGroup.drawChild(ViewGroup.java:2892) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.widget.ListView.drawChild(ListView.java:3231) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.widget.AbsListView.dispatchDraw(AbsListView.java:2277) at
android.widget.ListView.dispatchDraw(ListView.java:3226) at
android.view.View.draw(View.java:11289) at
android.widget.AbsListView.draw(AbsListView.java:3760) at
android.view.ViewGroup.drawChild(ViewGroup.java:2892) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.ViewGroup.drawChild(ViewGroup.java:2890) at
android.view.ViewGroup.dispatchDraw(ViewGroup.java:2494) at
android.view.View.draw(View.java:11187) at
android.widget.FrameLayout.draw(FrameLayout.java:450) at
com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2291)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2210) at
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1816) at
android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628) at
android.os.Handler.dispatchMessage(Handler.java:99) at
android.os.Looper.loop(Looper.java:137) at
android.app.ActivityThread.main(ActivityThread.java:4511) at
java.lang.reflect.Method.invokeNative(Native Method) at
java.lang.reflect.Method.invoke(Method.java:511) at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) at
dalvik.system.NativeStart.main(Native Method)
令人沮丧的是,这源于 android 本身 - 并且在我的代码中没有起点。 在做了一些研究之后,这只发生在希伯来语用户身上,我发现这个链接指向谷歌错误 - http://code.google.com/p/android/issues/detail?id=30889
我很自然地尝试联系作者和分配给这个错误的谷歌员工 - 他们都没有行屈膝礼或回复。
我设置跨度的相关代码是:
if(searchTerm!=null){
try{
Spannable str = (Spannable) name.getText();
int s_ind = fi.getSearchName().indexOf(searchTerm);
str.setSpan(new ForegroundColorSpan(Color.BLACK),s_ind, (s_ind+searchTerm.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(Color.YELLOW),s_ind, (s_ind+searchTerm.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),s_ind, (s_ind+searchTerm.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}catch(Exception ex){
FLogger.logE(DW_CODES.PREDEFINED_ERROR, "Exception while searching for view in predefined "+ex.getMessage());
}
}
搜索词是名称的一部分。 我想用不同的颜色标记 searchTerm 部分,以便用户更容易看到它。
我在这方面投入了很多时间,因为我什至没有设法在我的 4 个测试设备和 8 个 AVD 上重新创建它,我有点迷茫。 任何提示\建议在没有 Spannables 的情况下做同样的事情,将不胜感激。
最佳答案
希伯来语是一种从右到左的语言。 Android,至少在 2.3 之前,并没有很好地处理从右到左的问题——例如 canvas.drawText 会向后绘制。各种原始设备制造商在前往受影响地区(以色列、中东和其他一些国家)的手机上使用了非官方补丁,但它并不通用。当没有这些补丁的手机用于从右到左文本的语言时,通常会出现错误。我不知道谷歌是否曾经发布过官方补丁,我敢肯定他们已经发布了,但那里有数千万部损坏的 2.3 手机。
这就是问题所在 - 如果您尝试自己修复它(一种正常的方法是自己反转文本),它将无法在有这些补丁的设备上运行,而这些是大多数使用这些语言的手机.所以我不能建议。您可能想为 rtl 语言关闭此效果并查看它是否修复它 - 即希伯来语、阿拉伯语和乌尔都语。
关于android - 来自 SpannableStringInternal 的 StringIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298117/
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes
我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。
我有时遇到过Array(value)、String(value)和Integer(value)形式的转换。在我看来,这些只是调用相应的value.to_a、value.to_s或value.to_i方法的语法糖。所以我想知道:这些是在哪里/如何定义的?我在对象、模块、类等中找不到它们是否有任何常见场景更适合使用这些而不是相应/底层的to_X方法?这些可以用于泛型强制转换吗?也就是说,我可以按照[Integer,String,Array].each{|klass|klass.do_generic_coercion(foo)}?(...不,我真的不想那样做;我知道我想要的类型,但我希望避免
我是Rails的新手,正在编写一个登录表单。我使用form_tag将用户的提交传递给帐户Controller。现在,我不希望用户能够通过GET请求输入他们的登录详细信息,那么我如何检查某个参数是GET还是POST参数?提前致谢 最佳答案 在Rails中,您没有特定的POST或GET参数。您确实有一个POST或GET请求。你可以在你的Controller中这样检查它:request.post?或者您可以检查其他HTTP动词:GET、PUT和DELETE:request.get?request.put?request.delete?有关
在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件:classMyMiddlewaredefinitialize(app)@app=appenddefcall(env)env['model']=MyModel.firstendend我在config/environments/development.rb中执行此操作:config.cache_classes=false#thedefaultfordevelopmentconfig.middleware.
所以,以为我昨晚在工作,可以发誓。现在不行了,我想是时候寻求帮助了。我在数据库中定义动态字段,半EAV风格,让我们现在就说明我不想听听你对EAV是否是个好主意的意见:)无论如何,我做的这件事与我过去所做的有点不同,基本上当添加一个属性(或字段)时,我创建一个添加列到特定属性表迁移并运行它(或删除它)--无论如何,因为中间有一个类别层,它是定义所有属性的直接关系,所以我不能使用实际的属性名称作为列名称,因为属性是特定于类别的。所以,如果它能帮助你想象Entitybelongs_to:categoryCategoryhas_many:entitiesEntityAttributebel
现在我正在使用我的Rails应用程序成功收费,但我想获取有关交易的某些详细信息,例如商品购买的描述和信用卡的最后四位数字,以显示给用户他们的收据页面。我一直在查看文档,但实际上没有任何内容可以解释如何为应用提供token并取回charge_id,然后我可以使用它来获取有关费用的其他信息的哈希值。任何帮助都是巨大的。谢谢! 最佳答案 Stripe在对费用创建调用的响应中返回费用ID。如果您使用的是Ruby库,则可以执行以下操作来获取ID:require"stripe"Stripe.api_key=''charge=Stripe::Ch
如果我在ruby中有一个接受命名参数的方法...defsmoosh(first:nil,second:nil)first+secondend如果键匹配,将散列传递给该方法的最简单方法是什么:params={first:'peanut',second:'butter'}smoosh(params)以上会产生参数错误。更新:这似乎是Sinatra参数工作方式的问题。当我这样做时:get'a_sinatra_route'dohash=params.clonehash.symbolize_keys!smoosh(hash)end它工作正常。仅自行传递参数时,它不起作用。(即使您可以使用符号