Java 将字符串解析为Float-Android

Java 将字符串解析为Float-Android,java,android,Java,Android,希望有人能帮忙 我正在使用谷歌天气API获取某个位置的天气。 当温度返回时,它将以凯文格式返回,我希望将其转换为摄氏度 不幸的是,我的代码抛出了错误;原因:java.lang.NumberFormatException:无效浮点:温度 我需要能够将字符串解析为浮点或双精度,以便将其转换为摄氏度。显然,我无法将字符串转换为摄氏度作为文本,而不是数字 当我试图从凯文转变成摄氏度的时候,这种情况就发生了。有人能帮我找出我做错了什么吗 public void open(View view){ S

希望有人能帮忙

我正在使用谷歌天气API获取某个位置的天气。 当温度返回时,它将以凯文格式返回,我希望将其转换为摄氏度

不幸的是,我的代码抛出了错误;原因:java.lang.NumberFormatException:无效浮点:温度

我需要能够将字符串解析为浮点或双精度,以便将其转换为摄氏度。显然,我无法将字符串转换为摄氏度作为文本,而不是数字

当我试图从凯文转变成摄氏度的时候,这种情况就发生了。有人能帮我找出我做错了什么吗

public void open(View view){
    String url = location.getText().toString();
    String finalUrl = url1 + url;
    country.setText(finalUrl);
    obj = new HandleJSON(finalUrl);
    obj.fetchJSON();

    float celsius = 273.15f;

    String temp = obj.getTemperature().toString();
    Float finalTemp = Float.parseFloat(temp) - celsius;

    while(obj.parsingComplete);
    country.setText(obj.getCountry());
    temperature.setText(finalTemp.toString());
    humidity.setText(obj.getHumidity());
    pressure.setText(obj.getPressure());
}
错误日志***

java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4007)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4002)
    at android.view.View.performClick(View.java:4756)
    at android.view.View$PerformClick.run(View.java:19749)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NumberFormatException: Invalid float: "temperature"
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.initialParse(StringToReal.java:114)
at java.lang.StringToReal.parseFloat(StringToReal.java:323)
at java.lang.Float.parseFloat(Float.java:306)
at com.testing.listco.testrecycler.MainActivity.open(MainActivity.java:47)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at android.view.View$1.onClick(View.java:4002)
    at android.view.View.performClick(View.java:4756)
    at android.view.View$PerformClick.run(View.java:19749)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
HandleJSON**

public class HandleJSON {
private String country = "country";
private String temperature = "temperature";
private String humidity = "humidity";
private String pressure = "pressure";
private String urlString = null;

public volatile boolean parsingComplete = true;

public HandleJSON(String url){
    this.urlString = url;
}

public String getCountry(){
    return country;
}
public String getTemperature(){
    return temperature;
};
public String getHumidity(){
    return humidity;
}
public String getPressure(){
    return pressure;
}

@SuppressLint("NewApi")
public void readAndrParseJSON(String in){
    try {
        JSONObject reader = new JSONObject(in);

        JSONObject sys = reader.getJSONObject("sys");
        country = sys.getString("country");

        JSONObject main = reader.getJSONObject("main");

        temperature = main.getString("temp");
        pressure = main.getString("pressure");
        humidity = main.getString("humidity");

        parsingComplete = false;
    }
    catch(Exception e){
        //TODO: Auto-generated catch block
        e.printStackTrace();
    }
}

    public void fetchJSON(){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(urlString);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setReadTimeout(10000 /* milliseconds */);
                    conn.setConnectTimeout(15000 /* milliseconds */);
                    conn.setRequestMethod("GET");
                    conn.setDoInput(true);

                    //Starts the query
                    InputStream stream =  conn.getInputStream();

                    String data = convertStreatToString(stream);

                    readAndrParseJSON(data);
                    readAndrParseJSON(data);
                    stream.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        });

        thread.start();
    }

    static String convertStreatToString(java.io.InputStream is){
        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";
    }

}

原因:java.lang.NumberFormatException:无效浮点:温度

温度不是有效的浮点,因此引发该异常。有效浮动应为4.5等。这是罪魁祸首:

String temp = obj.getTemperature().toString();

这会将字符串温度指定给字符串温度,并且您正在尝试将浮点温度转换为整数。这是不可能的,因为字符串温度显然不是浮点数。

string temp=obj.getTemperature.toString;没有达到您期望的效果,因为它最终的结果是temp=temperature,而temp=temperature不是要解析的有效浮点。似乎getTemperature返回的是温度而不是实际温度。对不起,我应该解释更多,我知道错误发生在哪里。我需要做的是将温度解析为浮点或双精度,这样我就可以将它转换为Celcius,@zgc7009告诉了你它失败的确切原因。你实际上没有得到温度,你得到的是字符串温度。请确保getTemperature返回浮点数的字符串表示形式,如10.50。您有HandleJSON的源代码吗?对不起,我应该解释更多,我知道错误发生在哪里。我需要做的是将温度解析为浮点或双精度,以便将其转换为摄氏度。对不起,我应该解释更多,我知道错误发生在哪里。我需要做的是将温度解析为浮点或双精度,这样我就可以将其转换为摄氏度。@Matt首先你必须得到温度。只有这样,您才能希望将其解析为float、double或其他任何形式。