以下是我的一项活动的Java代码,当手机的语言为英语时,它可以正常工作,但是当手机的语言设置为波斯语或阿拉伯语时,它会崩溃. logcat表示Double.parseDouble出了点问题.看来,当用户输入数字时,会将其更改为波斯数字或阿拉伯数字,这就是崩溃的原因.任何想法如何解决?
Java代码:
import androID.content.Intent;import androID.os.Bundle;import androID.support.design.Widget.Snackbar;import androID.support.v7.app.AppCompatActivity;import androID.support.v7.Widget.Toolbar;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.TextVIEw;import java.math.BigDecimal;import java.text.DecimalFormat;public class stressesoninclinedsections extends AppCompatActivity {private EditText input1;private EditText input2;private EditText input3;private TextVIEw sh_resultt;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_stressesoninclinedsections); Toolbar toolbar = (Toolbar) findVIEwByID(R.ID.toolbar); setSupportActionbar(toolbar); input1 = (EditText) findVIEwByID(R.ID.editText); input2 = (EditText) findVIEwByID(R.ID.editText2); input3 = (EditText) findVIEwByID(R.ID.editText3); button bt_calculate1 = (button) findVIEwByID(R.ID.button4); sh_resultt = (TextVIEw) findVIEwByID(R.ID.textVIEw8); bt_calculate1.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { makeCalculationss(); } });}private voID makeCalculationss() { if ( input1.getText().toString().trim().equals("") || input1.getText().toString().trim().equals("-") || input1.getText().toString().trim().equals(".") || input1.getText().toString().trim().equals("-.") || input2.getText().toString().trim().equals("") || input2.getText().toString().trim().equals(".") || input3.getText().toString().trim().equals("") || input3.getText().toString().trim().equals("-") || input3.getText().toString().trim().equals(".") || input3.getText().toString().trim().equals("-.")) { sh_resultt.setText(""); Snackbar.make(findVIEwByID(androID.R.ID.content), "لطفا مقادیر تمامی متغیرها را وارد کنید ", Snackbar.LENGTH_LONG) .show(); } else { Double n1 = Double.valueOf(input1.getText().toString()); Double n2 = Double.valueOf(input2.getText().toString()); Double n3 = Double.valueOf(input3.getText().toString()); Double n3pi2 = n3+90; Double n3pi2rad = (n3pi2*Math.PI)/180; Double n3radians = (n3*Math.PI)/180; Double result1 = ((n1 / n2) *Math.cos(n3radians)*Math.cos(n3radians))/1000; Double result2 = ((n1 / n2) *Math.cos(n3pi2rad)*Math.cos(n3pi2rad))/1000; Double result3 = -((n1 / n2) *Math.sin(n3radians)*Math.cos(n3radians))/1000; result1 =Double.parseDouble(new DecimalFormat("##.######").format(result1)); result2 =Double.parseDouble(new DecimalFormat("##.######").format(result2)); result3 =Double.parseDouble(new DecimalFormat("##.######").format(result3)); sh_resultt.setText( "σx' (MPa)=\n" + result1 + "\n" + "\nσy' (MPa)=\n" + result2 + "\n" + "\nTx'y' (MPa)=\n" + result3 ); }}@OverrIDepublic voID onBackpressed() { Intent intent = new Intent(stressesoninclinedsections.this, solIDmechanics.class); startActivity(intent); finish();}}
这是Logcat:
03-08 19:16:32.457 3035-3035/com.wima.civilengineeringcalculator E/AndroIDRuntime: FATAL EXCEPTION: main java.lang.NumberFormatException: InvalID long: "٠٫٠١١٧٥٢" at java.lang.Long.invalIDLong(Long.java:125) at java.lang.Long.parse(Long.java:362) at java.lang.Long.parseLong(Long.java:353) at java.lang.Long.parseLong(Long.java:319) at java.math.BigDecimal.<init>(BigDecimal.java:350) at java.math.BigDecimal.<init>(BigDecimal.java:438) at com.wima.civilengineeringcalculator.stressesoninclinedsections.makeCalculationss(stressesoninclinedsections.java:65) at com.wima.civilengineeringcalculator.stressesoninclinedsections.accesstry { Double d=(Double)NumberFormat.getInstance(new Locale("en","US")).parse("123");} catch (ParseException e) { e.printstacktrace();}
0(stressesoninclinedsections.java:16) at com.wima.civilengineeringcalculator.stressesoninclinedsections.onClick(stressesoninclinedsections.java:42) at androID.vIEw.VIEw.performClick(VIEw.java:3549) at androID.vIEw.VIEw$PerformClick.run(VIEw.java:14393) at androID.os.Handler.handleCallback(Handler.java:605) at androID.os.Handler.dispatchMessage(Handler.java:92) at androID.os.Looper.loop(Looper.java:154) at androID.app.ActivityThread.main(ActivityThread.java:4945) 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:784) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method)03-08 19:16:32.467 1595-2005/? E/EmbeddedLogger: App crashed! Process: com.wima.civilengineeringcalculator03-08 19:16:32.467 1595-2005/? E/EmbeddedLogger: App crashed! Package: com.wima.civilengineeringcalculator v1 (1.0)
解决方法:
您需要使用拉丁语言环境(例如,英语-美国)将数字从字符串转换为双精度数:
尝试以这种方式解析:
总结以上是内存溢出为你收集整理的java-由于Double.parseDouble将手机的语言设置为波斯语或阿拉伯语,我的应用程序崩溃全部内容,希望文章能够帮你解决java-由于Double.parseDouble将手机的语言设置为波斯语或阿拉伯语,我的应用程序崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)