NullPointerException при вызове метода setVisibility

260
08 сентября 2017, 20:35

В погодном приложении выдает ошибку NullPointerException на строчке: mWeatherLayout.setVisibility(View.INVISIBLE);

Ошибка

09-07 23:59:35.061 14038-14038/? E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.example.alex.wta, PID: 14038
   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.alex.wta/com.example.alex.wta.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setVisibility(int)' on a null object reference
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
       at android.app.ActivityThread.access$900(ActivityThread.java:177)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5951)
       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:1400)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setVisibility(int)' on a null object reference
       at com.example.alex.wta.MainActivity.onCreate(MainActivity.java:59)
       at android.app.Activity.performCreate(Activity.java:6289)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767at android.app.ActivityThread.access$900(ActivityThread.java:177at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449at android.os.Handler.dispatchMessage(Handler.java:102at android.os.Looper.loop(Looper.java:145at android.app.ActivityThread.main(ActivityThread.java:5951at java.lang.reflect.Method.invoke(Native Methodat java.lang.reflect.Method.invoke(Method.java:372at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195

MainActivity

public class MainActivity extends AppCompatActivity implements IView {
    @BindView(R.id.current_temp)
    TextView mCurrentTemp;
    @BindView(R.id.max_temp)
    TextView mMaxTemp;
    @BindView(R.id.min_temp)
    TextView mMinTemp;
    @BindView(R.id.icon)
    ImageView weatherIcon;
    @BindView(R.id.pressure)
    TextView mPressure;
    @BindView(R.id.humidity)
    TextView mHumidity;
    @BindView(R.id.search)
    EditText mSearchText;
    @BindView(R.id.city)
    TextView mCityName;
    @BindView(R.id.weather)
    LinearLayout mWeatherLayout;
    @BindView(R.id.detail)
    TextView mDetail;
    private Presenter presenter;
    private ProgressDialog mProgressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mWeatherLayout.setVisibility(View.INVISIBLE);
        DataManager dataManager = new DataManager();
        presenter = new Presenter(dataManager, this);
    }
    @Override
    public void showWeatherData(WeatherResponse response) {
        mCurrentTemp.setText(String.valueOf(response.getWeatherData().getTemp()) + "℃");
        mMaxTemp.setText(String.valueOf(response.getWeatherData().getTemp_max()) + "℃");
        mMinTemp.setText(String.valueOf(response.getWeatherData().getTemp_min()) + "℃");
        mPressure.setText(String.valueOf(response.getWeatherData().getPressure()) + " hPa");
        mHumidity.setText(String.valueOf(response.getWeatherData().getHumidity()) + " %");
        Object weatherDetail = response.getWeatherList().get(0);
        LinkedTreeMap linkedTreeMap = (LinkedTreeMap) weatherDetail;
        String iconUrl = String.valueOf(linkedTreeMap.get("icon"));
        mDetail.setText(String.valueOf(linkedTreeMap.get("main")));
        Picasso.with(this)
                .load("http://openweathermap.org/img/w/" + iconUrl + ".png").into(weatherIcon);
    }
    @Override
    public void showLoadingDialog() {
        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setTitle("Weather App");
            mProgressDialog.setMessage("Loading...");
        }
        mProgressDialog.show();
    }
    @Override
    public void hideLoadingDialog() {
        mProgressDialog.hide();
        mWeatherLayout.setVisibility(View.VISIBLE);
    }
    @Override
    public void errorLoadingData() {
        mWeatherLayout.setVisibility(View.INVISIBLE);
        Toast.makeText(this, "Error loading data, please try again.", Toast.LENGTH_SHORT).show();
    }
    @OnClick(R.id.btn_search)
    public void onClickSearch() {
        String city = mSearchText.getText().toString();
        mSearchText.setText("");
        clearFocusAndHideInput();
        mCityName.setText(city.toUpperCase());
        presenter.getWeatherForCity(city);
    }
    private void clearFocusAndHideInput() {
        mSearchText.clearFocus();
        mSearchText.setFocusable(false);
        mSearchText.setFocusableInTouchMode(false);
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    }
    @OnClick(R.id.search)
    public void onEditTextClick(View v) {
        mSearchText.setFocusableInTouchMode(true);
        mSearchText.setFocusable(true);
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethod.SHOW_EXPLICIT);
    }
    @Override
    protected void onDestroy() {
        mProgressDialog.dismiss();
        presenter.unsubscribe();
        super.onDestroy();
    }
}

Layout

 <LinearLayout
android:id="@+id/weather"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="visible">
Answer 1

в onCreate
в строчке mWeatherLayout.setVisiblity(View.INVISIBLE)
mWeatherLayout не инициализирован

READ ALSO
java сумма элементов двумерного массива

java сумма элементов двумерного массива

Есть какой-то быстрый алгоритм нахождения суммы всех чисел двумерного массива на java? Кроме этого ничего не нашел толкомЯ так понимаю, что...

283
getActivity().findViewById(R.id.towrite) иногда возвращает null

getActivity().findViewById(R.id.towrite) иногда возвращает null

Пытаюсь получить и изменить xml элемент Активити, находясь внутри Фрагмента

334
Данные для приложения на Android

Данные для приложения на Android

Пишу приложение, которое должно выдавать информацию о мероприятиях проходящих в том или ином городеЯ столкнулся с проблемой - где брать данные...

230
Пул потоков в связке с асинхронными задачами

Пул потоков в связке с асинхронными задачами

Я начал изучать многопоточность и столкнулся с проблемой что ExecutorService не работает в связке с ассинхронными задачами

256