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



我是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))

最新更新