обрабатывать toString NullPointException, даже после проверки на! null - PullRequest
0 голосов
/ 04 февраля 2020

Я часто получаю кр sh с

Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.example.phocast/com.example.phocast.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference

AndroidStudio также показывает, что Method invocation .toString may produce NullPointException

Мой код:

public class SunFragment extends Fragment {

  ArrayList<Object> sunsList;
  Typeface sunfont;
  Double Dlat;
  Double Dlang;

  private AdView mAdView;

  //to be called by the MainActivity
  public SunFragment() {
    // Required empty public constructor
  }

  private static final String KEY_LOCATION_NAME = "location_name";
  public String TAG = "SunFragment";
  public String location;//="No location name found";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
      location = savedInstanceState.getCharSequence(KEY_LOCATION_NAME).toString();
      } else {
      location = "";
    }
  }

Так как я уже проверяю savedInstanceState, что еще я могу проверить?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Возможно, вы не устанавливаете charSecuence на пакет.

Должно быть примерно так:

    @Override
    protected void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putCharSequence(KEY_LOCATION_NAME, location);
    }

Осторожно, если вы реализуете protected void onSaveInstanceState(final Bundle outState, PersistableBundle outPersistentState) Это другой метод!

0 голосов
/ 04 февраля 2020

Вы проверяете, равен ли savedInstance ноль, но вызываете метод toString для результата getCharSequence(KEY_LOCATION_NAME), который не был проверен на ноль.

Вам следует попробовать что-то подобное

if (savedInstance != null && savedInstance.getCharSequence(KEY_LOCATION_NAME) != null)
   location = savedInstance.getCharsequence(KEY_LOCATION_NAME).toString()
...