Android сбой приложения при запуске оператора if для параметра счетчика - PullRequest
1 голос
/ 05 мая 2020

Я новичок с Android Studio, создающим приложение, которое будет читать из API. Я пытаюсь заставить API фильтровать результаты, используя параметры, выбранные в двух прядильщиках; один вариант для типа автомобильного зарядного устройства c и другой для максимального радиуса отображения результатов. Приложение неожиданно завершает работу, когда доходит до оператора 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";
    }


}

1 Ответ

1 голос
/ 05 мая 2020

Ваша строка defaultCharger будет иметь значение null в методе onCreate, что вызовет исключение NullPointerException при попытке сравнения: if (defaultCharger.equals("0")).

Вы можете предотвратить это, установив значение типа «» для defaultCharger во время объявления переменной:

String defaultCharger = "";

или переключив оператор equals:

if ("0".equals(defaultCharger))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...