Java Android RecyclerView中的NullPointerException
我的日志猫:Java Android RecyclerView中的NullPointerException,java,android,android-fragments,android-recyclerview,nullpointerexception,Java,Android,Android Fragments,Android Recyclerview,Nullpointerexception,我的日志猫: 07-21 12:57:34.714 2376-2376/com.example.car E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.car, PID: 2376 java.lang.NullPointerException at com.example.car.MainActivity.OnItemClicked(MainActivity.java:82)
07-21 12:57:34.714 2376-2376/com.example.car E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.car, PID: 2376
java.lang.NullPointerException
at com.example.car.MainActivity.OnItemClicked(MainActivity.java:82)
at com.example.car.CarAdapter$ViewHolder$1.onClick(CarAdapter.java:45)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Main.activity.java
package com.example.car;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements CarAdapter.ItemClicked {
Button btnCarinfo,btnOwnerinfo;
ImageView ivMake;
TextView tvModel ,tvName,tvTel;
FragmentManager fragmentManager;
CardView cvDetails;
Fragment ListFragment,ButtonFragment,CarInfoFragment,OwnerFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager=getSupportFragmentManager();
btnCarinfo=findViewById(R.id.btnCarinfo);
btnOwnerinfo=findViewById(R.id.btnOwnerinfo);
ivMake=findViewById(R.id.ivMake);
tvModel=findViewById(R.id.tvModel);
tvName=findViewById(R.id.tvName);
cvDetails=findViewById(R.id.cvDetails);
ListFragment=fragmentManager.findFragmentById(R.id.listfrag);
ButtonFragment=fragmentManager.findFragmentById(R.id.buttonfrag);
CarInfoFragment=fragmentManager.findFragmentById(R.id.carinfofrag);
OwnerFragment=fragmentManager.findFragmentById(R.id.ownerfrag);
fragmentManager.beginTransaction()
.show(ListFragment)
.show(ButtonFragment)
.show(CarInfoFragment)
.hide(OwnerFragment)
.commit();
btnOwnerinfo.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
fragmentManager.beginTransaction()
.show(OwnerFragment)
.hide(CarInfoFragment)
.commit();
}
}
);
btnCarinfo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
fragmentManager.beginTransaction()
.show(CarInfoFragment)
.hide(OwnerFragment)
.commit();
}
});
// OnItemClicked(0);
}
@Override
public void OnItemClicked(int index)
{
tvName.setText( ApplicationClass.cars.get(index).getOwnerName());
tvModel.setText(ApplicationClass.cars.get(index).getModel());
tvTel.setText(ApplicationClass.cars.get(index).getOwnerTel());
if(ApplicationClass.cars.get(index).getMake().equals("Volkswagen"))
{
ivMake.setImageResource(R.drawable.volkswagen);
}
else if(ApplicationClass.cars.get(index).getMake().equals("Nissan"))
{
ivMake.setImageResource(R.drawable.nissan);
}
else if(ApplicationClass.cars.get(index).getMake().equals("Mercedes"))
{
ivMake.setImageResource(R.drawable.b);
}
}
}
mport android.app.Application;
import java.util.ArrayList;
public class ApplicationClass extends Application
{
public static ArrayList<Car> cars;
@Override
public void onCreate()
{
super.onCreate();
cars=new ArrayList<Car>();
cars.add(new Car("Volkswagen","Polo","Bheema","9090909090"));
cars.add(new Car("Nissan","Nexa","Arjun","8585858585"));
cars.add(new Car("Mercedes","EX500","Krishna","0990099900"));
cars.add(new Car("Volkswagen","Leo","Duryodhan","9796989695"));
cars.add(new Car("Nissan","Nexa","Abhimanyu","9292929292"));
cars.add(new Car("Mercedes","PY678","Karna","4567865477"));
cars.add(new Car("Volkswagen","Polo","Bhisma","6789765434"));
}
}
package com.example.car;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class CarAdapter extends RecyclerView.Adapter<CarAdapter.ViewHolder>
{
private ArrayList<Car> cars;
ItemClicked activity;
public interface ItemClicked
{
void OnItemClicked(int index);
}
public CarAdapter(Context context,ArrayList<Car> list)
{
cars=list;
activity =(ItemClicked) context;
}
public class ViewHolder extends RecyclerView.ViewHolder
{
ImageView ivMake;
TextView tvModel,tvOwner;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ivMake=itemView.findViewById(R.id.ivMake);
tvModel=itemView.findViewById(R.id.tvModel);
tvOwner=itemView.findViewById(R.id.tvOwner);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
activity.OnItemClicked(cars.indexOf(view.getTag()));
}
});
}
}
@NonNull
@Override
public CarAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
{
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CarAdapter.ViewHolder viewHolder, int i)
{
viewHolder.itemView.setTag(cars.get(i));
viewHolder.tvOwner.setText(cars.get(i).getOwnerName());
viewHolder.tvModel.setText(cars.get(i).getModel());
if(cars.get(i).getMake().equals("Volkswagen"))
{
viewHolder.ivMake.setImageResource(R.drawable.volkswagen);
}
else if(cars.get(i).getMake().equals("Nissan"))
{
viewHolder.ivMake.setImageResource(R.drawable.nissan);
}
else if(cars.get(i).getMake().equals("Mercedes"))
{
viewHolder.ivMake.setImageResource(R.drawable.b);
}
}
@Override
public int getItemCount() {
return cars.size();
}
}
package com.example.car;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ListFragment extends Fragment {
RecyclerView recyclerView;
RecyclerView.Adapter myAdapter;
RecyclerView.LayoutManager layoutManager;
View view;
public ListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_list, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerView=view.findViewById(R.id.list);
recyclerView.setHasFixedSize(true);
layoutManager=new LinearLayoutManager(this.getActivity());
recyclerView.setLayoutManager(layoutManager);
myAdapter = new CarAdapter(this.getContext(),ApplicationClass.cars);
recyclerView.setAdapter(myAdapter);
}
}
Applicationclass.java
package com.example.car;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements CarAdapter.ItemClicked {
Button btnCarinfo,btnOwnerinfo;
ImageView ivMake;
TextView tvModel ,tvName,tvTel;
FragmentManager fragmentManager;
CardView cvDetails;
Fragment ListFragment,ButtonFragment,CarInfoFragment,OwnerFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager=getSupportFragmentManager();
btnCarinfo=findViewById(R.id.btnCarinfo);
btnOwnerinfo=findViewById(R.id.btnOwnerinfo);
ivMake=findViewById(R.id.ivMake);
tvModel=findViewById(R.id.tvModel);
tvName=findViewById(R.id.tvName);
cvDetails=findViewById(R.id.cvDetails);
ListFragment=fragmentManager.findFragmentById(R.id.listfrag);
ButtonFragment=fragmentManager.findFragmentById(R.id.buttonfrag);
CarInfoFragment=fragmentManager.findFragmentById(R.id.carinfofrag);
OwnerFragment=fragmentManager.findFragmentById(R.id.ownerfrag);
fragmentManager.beginTransaction()
.show(ListFragment)
.show(ButtonFragment)
.show(CarInfoFragment)
.hide(OwnerFragment)
.commit();
btnOwnerinfo.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
fragmentManager.beginTransaction()
.show(OwnerFragment)
.hide(CarInfoFragment)
.commit();
}
}
);
btnCarinfo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
fragmentManager.beginTransaction()
.show(CarInfoFragment)
.hide(OwnerFragment)
.commit();
}
});
// OnItemClicked(0);
}
@Override
public void OnItemClicked(int index)
{
tvName.setText( ApplicationClass.cars.get(index).getOwnerName());
tvModel.setText(ApplicationClass.cars.get(index).getModel());
tvTel.setText(ApplicationClass.cars.get(index).getOwnerTel());
if(ApplicationClass.cars.get(index).getMake().equals("Volkswagen"))
{
ivMake.setImageResource(R.drawable.volkswagen);
}
else if(ApplicationClass.cars.get(index).getMake().equals("Nissan"))
{
ivMake.setImageResource(R.drawable.nissan);
}
else if(ApplicationClass.cars.get(index).getMake().equals("Mercedes"))
{
ivMake.setImageResource(R.drawable.b);
}
}
}
mport android.app.Application;
import java.util.ArrayList;
public class ApplicationClass extends Application
{
public static ArrayList<Car> cars;
@Override
public void onCreate()
{
super.onCreate();
cars=new ArrayList<Car>();
cars.add(new Car("Volkswagen","Polo","Bheema","9090909090"));
cars.add(new Car("Nissan","Nexa","Arjun","8585858585"));
cars.add(new Car("Mercedes","EX500","Krishna","0990099900"));
cars.add(new Car("Volkswagen","Leo","Duryodhan","9796989695"));
cars.add(new Car("Nissan","Nexa","Abhimanyu","9292929292"));
cars.add(new Car("Mercedes","PY678","Karna","4567865477"));
cars.add(new Car("Volkswagen","Polo","Bhisma","6789765434"));
}
}
package com.example.car;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class CarAdapter extends RecyclerView.Adapter<CarAdapter.ViewHolder>
{
private ArrayList<Car> cars;
ItemClicked activity;
public interface ItemClicked
{
void OnItemClicked(int index);
}
public CarAdapter(Context context,ArrayList<Car> list)
{
cars=list;
activity =(ItemClicked) context;
}
public class ViewHolder extends RecyclerView.ViewHolder
{
ImageView ivMake;
TextView tvModel,tvOwner;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ivMake=itemView.findViewById(R.id.ivMake);
tvModel=itemView.findViewById(R.id.tvModel);
tvOwner=itemView.findViewById(R.id.tvOwner);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
activity.OnItemClicked(cars.indexOf(view.getTag()));
}
});
}
}
@NonNull
@Override
public CarAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
{
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CarAdapter.ViewHolder viewHolder, int i)
{
viewHolder.itemView.setTag(cars.get(i));
viewHolder.tvOwner.setText(cars.get(i).getOwnerName());
viewHolder.tvModel.setText(cars.get(i).getModel());
if(cars.get(i).getMake().equals("Volkswagen"))
{
viewHolder.ivMake.setImageResource(R.drawable.volkswagen);
}
else if(cars.get(i).getMake().equals("Nissan"))
{
viewHolder.ivMake.setImageResource(R.drawable.nissan);
}
else if(cars.get(i).getMake().equals("Mercedes"))
{
viewHolder.ivMake.setImageResource(R.drawable.b);
}
}
@Override
public int getItemCount() {
return cars.size();
}
}
package com.example.car;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ListFragment extends Fragment {
RecyclerView recyclerView;
RecyclerView.Adapter myAdapter;
RecyclerView.LayoutManager layoutManager;
View view;
public ListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_list, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerView=view.findViewById(R.id.list);
recyclerView.setHasFixedSize(true);
layoutManager=new LinearLayoutManager(this.getActivity());
recyclerView.setLayoutManager(layoutManager);
myAdapter = new CarAdapter(this.getContext(),ApplicationClass.cars);
recyclerView.setAdapter(myAdapter);
}
}
所以我做了一个非常简单的基本活动,其中有4个片段和一个Recycler视图,我得到了一个nullPointerException。我真的不知道为什么我会得到这个。任何帮助都将不胜感激!
资源链接:https://www.udemy.com/course/learn-android-application-development-y/learn/lecture/7811022#overview您的tvTel未初始化。您没有在onCrate()Main活动中进行以下操作:
tvTel = findViewById(R.id.tvTel);
您必须了解什么是NullPointerException才能解决此问题。请阅读: