Представление является нулевым в onActivityResult - PullRequest
2 голосов
/ 21 ноября 2019

По какой-то причине мой взгляд равен нулю в onActivityResult. Вот как я это реализовал:

public class Player extends AppCompatActivity {
    RelativeLayout selectVideo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);
        selectVideo = findViewById(R.id.selectVideo);
        selectVideo.setOnClickListener(view -> {
            Intent intent = new Intent(Player.this, SelectVideo.class);
            startActivityForResult(intent, 852);
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (requestCode == 852){
            if (resultCode == RESULT_OK) {
                if (data != null) {
                    // The view is null here
                    selectVideo.setVisibility(View.GONE);
                }
            }
        }
    }

}

и в SelectVideo я установил результат следующим образом:

public void returnToPlayer(String path){
    Intent output = new Intent();
    output.putExtra("path", path);
    setResult(RESULT_OK, output);
    finish();
}

Я не смог воспроизвести это, но я получаю этов аварийных ситуациях

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference

Я знаю, что могу сделать следующее: (Но я хотел бы знать, почему это происходит)

if (selectVideo != null){
    selectVideo.setVisibility(View.GONE);
}

Как возможно, чтобы представление было нулевым?


Редактировать 1:

Я сомневаюсь, что проблема связана с моим xml, но здесь, как и требовалось в разделе комментариев:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    tools:context=".Player">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/selectVideo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true">

            <ImageView
                android:id="@+id/addimg"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:background="@drawable/ab_add_video"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="20dp"
                />

            <TextView
                android:layout_marginTop="10dp"
                android:id="@+id/addtxt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="SELECT A VIDEO"
                android:layout_below="@+id/addimg"
                android:textColor="@android:color/white"
                android:textSize="20sp"
                android:layout_marginEnd="20dp"
                android:layout_marginStart="20dp"
                android:layout_marginBottom="20dp"/>

    </RelativeLayout>

</RelativeLayout>

1 Ответ

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

Может быть только одна возможная причина, по которой он может не работать. Представления снова инициализируются при вызове onActivityResult.

Однако вы можете попробовать использовать статическую переменную, а затем попытаться скрыть или показать повторные инициализации представлений (или) в * 1008. * и проверьте, решает ли это вашу проблему.

У меня были сомнения, хотя, увидев этот пост здесь , я подтвердил, что это может быть.

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

...