I am 15 and a starter in Android Studio, my app works fine but crashes every time i click the call button
This is my xml
<LinearLayout
android:layout_weight="8"
android:layout_width="match_parent"
android:padding="10dp"
android:background="@drawable/recyclerview_bg"
android:layout_height="0dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/contactsRecycleView"
android:layout_width="match_parent"
android:layout_marginStart="3dp"
android:layout_marginTop="3dp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
tHIS IS MY MAIN.JAVA, I CANT REALLY MAKE IT IVE BEEN DOING THIS FOR A WEEK
private List<Contact> contacts;
private RecyclerView recyclerView;
private ContactAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hotlines);
init();
setData();
}
public void setData() {
contacts.add(new Contact("PNP", "092770",R.drawable.ic_baseline_account_circle_24));
contacts.add(new Contact("Rescue Team ", "091567",R.drawable.ic_baseline_account_circle_24));
contacts.add(new Contact("HAT", "097709",R.drawable.ic_baseline_account_circle_24));
adapter.notifyDataSetChanged();
}
private void init() {
contacts= new ArrayList<>();
recyclerView=findViewById(R.id.contactsRecycleView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter=new ContactAdapter(contacts);
recyclerView.setAdapter(adapter);
}
}
this is my Recycler Adapter. I want to pass a data on my dialer cause i cant seem to do an ACTION_CALL, I came up with using an interface method but lost throughout the tutorial. so I just stick with passing the data on the dialer. I've researched but I cant really get it. I added THE call button on holder. Can someone explain it to me clearly. Ill really appreciate it.
private List<Contact> contacts;
Context context;
public ContactAdapter(List<Contact> contacts) {
this.contacts = contacts;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.model_contact_design, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Contact contact = contacts.get(position);
holder.nameTv.setText(contact.getName());
holder.photoIv.setImageResource(contact.getPhoto());
holder.phoneNo.setText(contact.getPhoneNo());
holder.callIv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String phoneNo = contact.getPhoneNo();
String call = "tel:" + phoneNo.trim();
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(call));
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return contacts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView photoIv;
ImageButton callIv;
private TextView nameTv,phoneNo;
Context context;
public ViewHolder(@NonNull View itemView) {
super(itemView);
photoIv=itemView.findViewById(R.id.photoIV);
callIv=itemView.findViewById(R.id.callIV);
nameTv=itemView.findViewById(R.id.nameTV);
phoneNo=itemView.findViewById(R.id.phoneNo);
}
}
}
tHIS IS MY LOGCATT:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference
at com.example.last.ContactAdapter$1.onClick(ContactAdapter.java:55)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)