语言环境不是英语时,Kotlin崩溃

时间:2019-02-12 19:40:25

标签: kotlin locale

首先,我是编程新手,我读了其他文章,但没有一个解决我的问题。

我有一个与当地人一起使用的三种语言的应用程序:罗马尼亚语,英语,西班牙语 该应用程序有2个活动:主要是数据填充,另一个是计算结果。
当我在英语以外的其他语言环境中测试应用程序时,会暗恋。

问题在于,英语应用程序的性能非常好,在其他语言环境中进行调试时却出现致命异常:

  package com.example.sportbetodds
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.annotation.RequiresApi
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var ntm = etntm.text
        var gda= etntGDA.text
        var gdd = etntGDD.text
        var ntmM = etntmM.text
        var gdaMG = etMGDA.text
        var gdaMO = edMGDD.text
        var gpaMG = edMGPA.text
        var gpaMO =etMGPD.text
            try {
            btCalT.setOnClickListener {
 /** Statistici din liga **/
 val intent = Intent(this@MainActivity, Rezultate::class.java)
//acasa date
 var ntmA = ntm.toString().toBigDecimal().toDouble()
        var gdaA = gda.toString().toBigDecimal().toDouble()
        var goluriDA = (gdaA/ntmA).toString().toDouble()
 //Debug Exception.kt:45---->       val dgoluriDA:Double = String.format("%.3f", goluriDA).toDouble()
var goluriDAa = dgoluriDA.toString()
                intent.putExtra("tvRgda",goluriDAa)
        //deplasare date
        var gdda = gdd.toString().toBigDecimal().toDouble()
        var goluridd = (gdda/ntmA).toString().toDouble()
        val dgoluridd:Double = String.format("%.3f", goluridd).toDouble()
        var goluridda = dgoluridd.toString()
        intent.putExtra("tvgdd",goluridda)


        /** Calcularea medie goluri selectie **/
        //inscrise acasa gazde
        var ntmMA = ntmM.toString().toBigDecimal().toDouble()
        var gdaMgA = gdaMG.toString().toBigDecimal().toDouble()
        var gdaMgaA: Double =  (gdaMgA/ntmMA).toString().toDouble()
        var goluriMG = gdaMgaA.toString()
        //  inscrise deplasare oaspeti
        var gdMO = gdaMO.toString().toBigDecimal().toDouble()
        var gdMOd = (gdMO/ntmMA).toString().toDouble()
      //  var gdMOda = gdMOd.toString()
        //primite  acasa gazda
        var gpMGa = gpaMG.toString().toBigDecimal().toDouble()
        var gpMGaA = (gpMGa/ntmMA).toString().toDouble()
    //    var gpMGaAa = gpMGaA.toString()
//primite acasa oaspete
        var gpMOa = gpaMO.toString().toBigDecimal().toDouble()
        var gpMOaa = (gpMOa/ntmMA).toString().toDouble()
    //    var gpMOA = gpMOaa.toString()
 /** Calculare forta de atac **/
        //forta atac gazda
 var fortaAG = gdaMgaA/goluriDA
        var fortaAO =  gdMOd/goluridd
        var fortaDG = gpMGaA/goluridd
        var fortaDO = gpMOaa/goluriDA
 /** Calculare numarului de goluri estimat  sa fie inscris **/
        // cate goluri ar trebuii sa inscrie gazda
 var predGazda = fortaAG*fortaDO*goluriDA
        val dpredGazda:Double = String.format("%.3f", predGazda).toDouble()
        var gazdaGol = dpredGazda.toString()
        intent.putExtra("gazdeG", gazdaGol)
var predOaspeti = fortaAO*fortaDG*goluridd
        val dpredOaspeti:Double = String.format("%.3f", predOaspeti).toDouble()
        var oaspetiGol=  dpredOaspeti.toString()
        intent.putExtra("oaspetiG", oaspetiGol)
startActivity(intent)

    }
}catch (ex: Exception){
    println("Exception $ex")
 }

    }

    }
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
fun fixUpLocale(ctx: Context, newLocale: Locale) {
    val res = ctx.resources
    val config = res.configuration
    val curLocale = getLocale(config)
    if (curLocale != newLocale) {
        Locale.setDefault(newLocale)
        val conf = Configuration(config)
        conf.setLocale(newLocale)
        res.updateConfiguration(conf, res.displayMetrics);
    }
}

fun getLocale(config: Configuration): Locale {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return config.locales[0]
    } else {
        //noinspection deprecation
        return config.locale;
    }

当我在英语语言环境上调试时,一切正常,没有错误出现。 主要活动得到了很好的翻译,应用程序粉碎了第二个活动的意图 请帮忙,我在此问题上找不到解决方法

 E/AndroidRuntime: [ERB] Update app failure countmain
        [ERB] Update app failure - ActivityThread.currentProcessName : com.example.sportbetodds
        [ERB] Update app failure - Process.myPid : 10552
    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.sportbetodds, PID: 10552
        java.lang.NumberFormatException: Invalid double: "1,145"
            at java.lang.StringToReal.invalidReal(StringToReal.java:63)
            at java.lang.StringToReal.initialParse(StringToReal.java:164)
            at java.lang.StringToReal.parseDouble(StringToReal.java:282)
            at java.lang.Double.parseDouble(Double.java:301)
            at com.example.sportbetodds.MainActivity$onCreate$1.onClick(MainActivity.kt:45)
            at android.view.View.performClick(View.java:5205)
            at android.view.View$PerformClick.run(View.java:21164)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

正如异常所说,我尝试检查异常中指定的输入是什么问题,但一切都很好

1 个答案:

答案 0 :(得分:1)

通过外观

Invalid double: "1,145"

您在某处使用逗号而不是句点定义了一个double。

检查您的翻译。罗马尼亚语和西班牙语的变体使用的是1,145而不是1.145