在 PhonecallReceiver 中更新 SQLite 时更新 recyclerview

问题描述

在我的项目中,我想在接到来电时实时更新我的​​ recyclerView 并更新我的 sqlite 数据库。我怎样才能做到这一点?

对于我的代码,我必须重新打开主要活动才能刷新 recyclerView。

如果您需要额外的代码,请询问

主要活动:

    public class MainActivity extends AppCompatActivity
        {
        
            private ArrayList<PhoneNumber> contacts;
            private RecyclerView recyclerView;
            private RecyclerViewAdapter rcAdapter;
            private DBHandler dbHandler;

            IntentFilter intentFilter;
            CallReceiver callReceiver;
        
            @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                dbHandler = new DBHandler(MainActivity.this);
                contacts = new ArrayList<>();
                intentFilter = new IntentFilter();
                callReceiver = new CallReceiver();
        
                
                contacts = dbHandler.getAllContacts();
        
                rcAdapter = new RecyclerViewAdapter(contacts,this);
        
                recyclerView = findViewById(R.id.my_recycler_view);
        
                linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this,RecyclerView.VERTICAL,false);
                recyclerView.setLayoutManager(linearlayoutmanager);
        
                recyclerView.setAdapter(rcAdapter);
        
        
        
                intentFilter.addAction("android.intent.action.PHONE_STATE");
                intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
                registerReceiver(callReceiver,intentFilter);
            }
        }

呼叫接收者:

public class CallReceiver extends PhonecallReceiver{


@Override
protected void onIncomingCallStarted(Context ctx,String number,Date start) {

    notifyAboutTheIncomingNumber(number,ctx);

}

@Override
protected void onOutgoingCallStarted(Context ctx,Date start) {
}

@Override
protected void onIncomingCallEnded(Context ctx,Date start,Date end) {
}

@Override
protected void onOutgoingCallEnded(Context ctx,Date end) {
}

@Override
protected void onMissedCall(Context ctx,Date missed) {
}


private void notifyAboutTheIncomingNumber(String number,Context context)
{
    new Thread(new Runnable()
    {
        @Override
        public void run() {

            Extractrating exrating = new ExtractExtractrating();
            Notification not = new Notification();
            DBHandler dbHandler = new DBHandler(context);

            String rating = exrating.getPhoneNumberrating(number);

            not.showNotification(number,rating,context);

            dbHandler.addPhoneNumber(number,rating);



        }
    }).start();
}


}

RecyclerViewAdapter:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

// variable for our array list and context
private ArrayList<PhoneNumber> courseModalArrayList;
private Context context;


// constructor
public RecyclerViewAdapter(ArrayList<PhoneNumber> courseModalArrayList,Context context)
{
    this.courseModalArrayList = courseModalArrayList;
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType)
{
    // on below line we are inflating our layout
    // file for our recycler view items.
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.phone_number_item,parent,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position)
{
    // on below line we are setting data
    // to our views of recycler view item.
    PhoneNumber model = courseModalArrayList.get(position);

    
    holder.phoneNumberTextView.setText(model.getPhoneNumber());
    holder.phoneratingTextView.setText(model.getrating());
}

@Override
public int getItemCount()
{
    // returning the size of our array list
    return courseModalArrayList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder
{

    // creating variables for our text views.
    private TextView phoneNumberTextView,phoneratingTextView;

    public ViewHolder(@NonNull View itemView)
    {
        super(itemView);
        // initializing our text views
        // Todo: 3/17/2021 rename
        phoneNumberTextView= itemView.findViewById(R.id.idPhoneNumber);
        phoneratingTextView= itemView.findViewById(R.id.idrating);
    }
}
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)