Попытка вызвать виртуальный метод по нулевой ссылке на объект при запуске Intent - PullRequest
0 голосов
/ 11 февраля 2020

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

Ситуация выглядит следующим образом. Я пытаюсь запустить новое намерение в адаптере recyclerView в методе onClick, и приложение запускается при запуске с помощью (второй метод снизу)

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

, и вот мой класс recyclerView

public class RecyclerView_Config extends FragmentActivity {
private Context mContext;
private BooksAdapter mBooksAdapter;
private RecyclerView mRecyclerView;
private View.OnClickListener onItemClickListener;

public void setConfig(RecyclerView recyclerView, Context context, List<Book> books, List<String> keys ){

    mContext = context;
    mBooksAdapter = new BooksAdapter(books, keys);
    mRecyclerView = recyclerView;
    mRecyclerView.setLayoutManager(new LinearLayoutManager(context));
    mRecyclerView.setAdapter(mBooksAdapter);

}

//inflate layout BookListItem
class BookItemView extends RecyclerView.ViewHolder{

    private TextView mTitle;
    private TextView mAuthor;
    private TextView mIsbn;
    private TextView mCategory;

    private String key;

    public BookItemView(View inflatedView){
        super(inflatedView);
        inflatedView.setTag(this);
        inflatedView.setOnClickListener(onItemClickListener);

        mTitle = inflatedView.findViewById(R.id.title_textView);
        mAuthor = inflatedView.findViewById(R.id.author_textView);
        mCategory = inflatedView.findViewById(R.id.category_textView);
        mIsbn = inflatedView.findViewById(R.id.isbn_textView);
    }

    public void bind (Book book, String key){
        mTitle.setText(book.getTitle());
        mAuthor.setText(book.getAuthor());
        mCategory.setText(book.getCategory());
        mIsbn.setText(book.getIsbn());
        this.key = key;
    }

    public void setItemClickListener(View.OnClickListener clickListener)
    {
        onItemClickListener = clickListener;
    }
}

// creating bookItemView
class BooksAdapter extends RecyclerView.Adapter<BookItemView> {
    private List<Book> mBookList;
    private List<String> mKeys;
    private ReviewFragment mFragment;
    public static final String EXTRA_MESSAGE = "com.example.bookrate.MESSAGE";


    public BooksAdapter(List<Book> mBookList, List<String> mKeys) {
        this.mBookList = mBookList;
        this.mKeys = mKeys;
    }

    @NonNull
    @Override
    public BookItemView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new BookItemView(LayoutInflater.from(parent.getContext())
                .inflate(R.layout.book_list_item,parent, false));

    }

    @Override
    public void onBindViewHolder(@NonNull BookItemView holder, final int position) {
        holder.bind(mBookList.get(position), mKeys.get(position));
        holder.setItemClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String isbn = mBookList.get(position).isbn;
                Intent intent = new Intent(v.getContext(), BookDetailActivity.class);
                intent.putExtra(EXTRA_MESSAGE, isbn);
                startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return mBookList.size();
    }
}
}

Здесь это изображение debbuger (все еще я не могу понять, почему он не работает) enter image description here

и здесь полная ошибка, если необходимо

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bookrate, PID: 9950
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
    at android.app.Activity.startActivityForResult(Activity.java:4588)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
    at android.app.Activity.startActivityForResult(Activity.java:4545)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
    at android.app.Activity.startActivity(Activity.java:4906)
    at android.app.Activity.startActivity(Activity.java:4874)
    at com.example.bookrate.RecyclerView_Config$BooksAdapter$1.onClick(RecyclerView_Config.java:107)
    at android.view.View.performClick(View.java:6597)
    at android.view.View.performClickInternal(View.java:6574)
    at android.view.View.access$3100(View.java:778)
    at android.view.View$PerformClick.run(View.java:25889)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6746)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

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

Вот манифест

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true">
    <activity android:name=".BookDetailActivity"></activity>
    <activity android:name=".RegisterActivity" />
    <activity
        android:name=".LoginActivity"
        android:label="@string/title_activity_login">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity" />
    <activity android:name=".RecyclerView_Config" />
</application>

и нет, я не объявил это занятие, но похоже, что я получил ответ на это

Ответы [ 2 ]

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

Хорошо, так что через несколько часов я немного изменил его, чтобы заставить его работать с помощью NavigationView

вот объявление NavigationView в MainActivity:

    navigationView = findViewById(R.id.nav_view);
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);

здесь изменено при щелчке

@Override
    public void onBindViewHolder(@NonNull BookItemView holder, final int position) {
        holder.bind(mBookList.get(position), mKeys.get(position));
        holder.setItemClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String isbn = mBookList.get(position).isbn;
                Bundle bundle = new Bundle();
                bundle.putString("isbn", isbn);
                Navigation.findNavController(v).navigate(R.id.action_nav_browse_to_nav_send, bundle);
            }
        });
    }

вот код для файла навигации

<fragment
    android:id="@+id/nav_browse"
    android:name="com.example.bookrate.ui.browse.BrowseFragment"
    android:label="@string/browse"
    tools:layout="@layout/fragment_browse">
    <action
        android:id="@+id/action_nav_browse_to_nav_send"
        app:destination="@+id/nav_send" >
        <argument
            android:name="isbn"
            app:argType="string"
            android:defaultValue="0"/>
    </action>
</fragment>

Кстати, вот фрагмент для получения этого аргумента в следующем фрагменте для некоторых новичков, таких как я

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    sendViewModel =
            new ViewModelProvider(this).get(SendViewModel.class);
    View root = inflater.inflate(R.layout.fragment_send, container, false);
    final TextView textView = root.findViewById(R.id.text_send);
    Bundle bundle = this.getArguments();
    if(bundle != null)
    {
        String test = (String) bundle.getString("isbn", "0");
        textView.setText(test);
    }

    return root;
}

Althought now У меня есть еще одна странная вещь, потому что я не могу щелкнуть по первому элементу в моем RecyclerView, а остальные из них изменили позицию на -1, но я все еще работаю над этим

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

Вы должны заявить о своей активности в манифесте следующим образом

<activity
     android:name=".BookDetailActivity
      />
...