Ошибка OnClickListener: «[..] вызвать виртуальный метод [...] для пустой ссылки на объект», объявлена ​​строка - PullRequest
1 голос
/ 08 ноября 2019

Я просто пытаюсь использовать 2 кнопки в моей основной деятельности. Один открывает веб-сайт (который работает), другой должен непосредственно перейти ко второму классу (который для упрощения здесь я только для второго сайта). Однако, хотя настройка кнопки аналогична другой кнопке, с использованием setOnClickListener, а также переменной, определенной в ресурсах, я получаю сообщение об ошибке ниже. Я уже исключил несколько фрагментов - кажется, что сообщение об ошибке касается кнопки для доступа ко 2-му классу.

Извинения за то, что я заблудился с этими мелочами ... Я потерян, но благодарен за любую подсказку.

java.lang.RuntimeException: Unable to start activity ComponentInfo{paperpad.app/paperpad.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

strings.xml

<resources>
    <string name="logo">Logo</string>
    <string name="app_name">PaperPad2</string>
    <string name="button_go2activity">Start Drawing</string>
    <string name="button_openPicture">Load Picture</string>
    <string name="button_closePicture">Stop</string>
    <string name="button_help">help</string>
    <string name="websiteAddress">PaperPad.app</string>
</resources>

MainActivity.java

package paperpad.app;
        import androidx.annotation.NonNull;
//etc.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button_openHelp = findViewById(R.id.button_openHelp);    
        button_openHelp.setOnClickListener(new View.OnClickListener() {     
            @Override
            public void onClick(View view) {                  
                Intent openHelp = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com"));     
                startActivity(openHelp);
            }
        });
        Button button_go2activity = findViewById(R.id.button_go2activity);    
        button_go2activity.setOnClickListener(new View.OnClickListener() {     
            @Override
            public void onClick(View view) {                  
                Intent openLink = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));      
                startActivity(openLink);
            }
        });
    }
}

my activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="false"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="254dp"
        android:layout_height="237dp"
        android:layout_marginTop="48dp"
        android:layout_marginBottom="8dp"
        android:contentDescription="@string/logo"
        app:layout_constraintBottom_toTopOf="@+id/imageView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/logo_paperpad" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="59dp"
        android:layout_marginTop="96dp"
        android:layout_marginBottom="100dp"
        app:layout_constraintBottom_toTopOf="@+id/button_openPicture"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView"
        app:srcCompat="@drawable/logo_titel"
        tools:ignore="ContentDescription" />

    <Button
        android:id="@+id/button_go2activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="269dp"
        android:text="@string/button_go2activity"
        android:textSize="24sp"
        android:typeface="normal"
        app:layout_constraintBottom_toTopOf="@+id/button_openHelp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2" />

    <Button
        android:id="@+id/button_openHelp"
        android:layout_width="45dp"
        android:layout_height="25dp"
        android:layout_marginBottom="10dp"
        android:background="#FFFFFF"
        android:text="@string/button_help"
        android:textColor="@android:color/black"
        android:textSize="12sp"
        app:layout_constraintBottom_toTopOf="@+id/linkWebsite"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_go2activity" />


    <TextView
        android:id="@+id/linkWebsite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:inputType="none"
        android:text="@string/websiteAddress"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_openHelp" />


</androidx.constraintlayout.widget.ConstraintLayout>

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Попробуйте объявить кнопки на уровне класса и инициализировать их позже:

public class MainActivity extends AppCompatActivity {

Button button_openHelp;
Button button_go2activity;

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

    button_openHelp = findViewById(R.id.button_openHelp);    
    button_openHelp.setOnClickListener(new View.OnClickListener() {     
        @Override
        public void onClick(View view) {                  
            Intent openHelp = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com"));     
            startActivity(openHelp);
        }
    });
    button_go2activity = findViewById(R.id.button_go2activity);    
    button_go2activity.setOnClickListener(new View.OnClickListener() {     
        @Override
        public void onClick(View view) {                  
            Intent openLink = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));      
            startActivity(openLink);
        }
    });
}

}

0 голосов
/ 08 ноября 2019

Ваша кнопка отсутствует в формате activity_main xml (в настоящее время). Если во фрагменте, он еще не был загружен.

Если это определено во фрагменте, вы должны переместить этот код во фрагмент.

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