繁体   English   中英

在微调器选项上运行 if 语句时,Android 应用程序崩溃

[英]Android app crashing when running if statement on a spinner option

我是 Android Studio 的初学者,正在创建一个将从 API 读取的应用程序。 我试图让 API 使用两个微调器中选择的选项过滤结果; 一个选项用于一种电动汽车充电器,另一个选项用于显示结果的最大半径。 应用程序在执行“if (defaultCharger.equals("0"))”语句时突然崩溃。 由于没有显示错误,我已经注释掉了不同的代码部分以查看哪些有效,这部分似乎是问题所在。 这是此处,因此如果尚未选择充电器类型,则该链接将不包含充电器类型的过滤器。 任何有关此问题的帮助将不胜感激。

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Spinner;

public class results extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    String link, getLong, getLat;

    TextView newAddress, see, testResult;

    //Create spinner options
    Spinner dropdownone, dropdowntwo;
    String[] distance = {"Change the radius in miles", "1", "5", "10"};
    String[] chargeType = {"Filter by type of charger", "Under 2kW", "Over 2kW", "40kW and higher"};
    String defaultMiles, defaultCharger;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);

        //text link to go back to home and enter a new address
        newAddress = findViewById(R.id.newAddress);
        newAddress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newAddress.setTextColor(getResources().getColorStateList(R.color.colorAccent));
                Intent intent = new Intent(results.this, home.class);
                startActivity(intent);
            }
        });

        //get longitude and latitude
        home home = new home();
        if (home.status.equals("gps")){

            getLong = home.gpsLong;
            getLat = home.gpsLat;
        }
        else if (home.status.equals("address")){
            GeoLocation geoLocation = new GeoLocation();
            getLong = geoLocation.adLongitude;
            getLat = geoLocation.adLatitude;
        }
        else {
            getLong = "-5.926437";
            getLat = "54.607868";
        }

        //drop down one - choose radius of results
        dropdownone = findViewById(R.id.spinner1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(results.this,
                android.R.layout.simple_spinner_item,distance);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        dropdownone.setAdapter(adapter);
        dropdownone.setOnItemSelectedListener(this);

        //drop down two - choose charger type
        dropdowntwo = findViewById(R.id.spinner2);
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(results.this,
                android.R.layout.simple_spinner_item,chargeType);

        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        dropdowntwo.setAdapter(adapter2);
        dropdowntwo.setOnItemSelectedListener(this);

        //see if correct values are being returned
        see = findViewById(R.id.textView6);
        see.setText(defaultMiles + " " + defaultCharger);

        //create link
        if (defaultCharger.equals("0")){
            link = "https://api.openchargemap.io/v3/poi/?output=json&Latitude=" + getLat + "&Longitude=" + getLong + "&distance=" + defaultMiles + "&distanceunit=miles&maxresults=10&compact=true&verbose=false";
        }
        else {
            link = "https://api.openchargemap.io/v3/poi/?output=json&Latitude=" + getLat + "&Longitude=" + getLong + "&distance=" + defaultMiles + "&distanceunit=miles&LevelID=" + defaultCharger + "&maxresults=1&compact=true&verbose=false";
        }

        testResult = findViewById(R.id.testResult);
        testResult.setText(link);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

        switch (parent.getId()){
            case R.id.spinner1:
                switch (position) {
                    case 0:
                        // Create default if nothing is changed
                        defaultMiles = "0";
                        break;
                    case 1:
                        // 1 mile radius
                        defaultMiles = "1";
                        break;
                    case 2:
                        // 5 mile radius
                        defaultMiles = "5";
                        break;
                    case 3:
                        // 10 mile radius
                        defaultMiles = "10";
                        break;
                }
            case R.id.spinner2:
                switch (position) {
                    case 0:
                        // Default for no charger filter
                        defaultCharger = "0";
                        break;
                    case 1:
                        // Type 1 charger
                        defaultCharger = "1";
                        break;
                    case 2:
                        // Type 2 charger
                        defaultCharger = "2";
                        break;
                    case 3:
                        // Type 3 charger
                        defaultCharger = "3";
                        break;
                }
        }

    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        defaultMiles = "10";
        defaultCharger = "0";
    }


}

您的 defaultCharger 字符串在 onCreate 方法中将是 null ,在尝试比较它时会导致 NullPointerException: if (defaultCharger.equals("0"))

您可以通过在变量声明期间为 defaultCharger 设置类似 "" 的值来防止它:

String defaultCharger = "";

或者通过切换 equals 语句:

if ("0".equals(defaultCharger))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM