0
私はalarmmanager
を使用していますが、コードは見栄えが良く、エラーは発生しませんが、レイアウトが正しく更新されません。私はアラームマネージャーとのすべての組み合わせを試しましたが、私のリストは自動的に更新されませんでした。ここでRecyleviewは自動的にアダプタやレイアウトを更新しません
は私のメインです:
public class MainActivity extends AppCompatActivity implements UpdateResultReceiver.Receiver {
private static final String TAG = "MainActivity";
Data mData;
RecyclerView recyclerView;
NotificationManager manager;
static int x = 0;
RecyclerAdapter adapter;
private boolean isInited = false;
ArrayList<String> liste;
ArrayList<String> liste2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
init();
}
private void fillLists() {
new AsyncCaller().execute();
}
private void init() {
fillLists();
scheduleUpdater();
}
private class AsyncCaller extends AsyncTask<Void, Void, Data> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Data doInBackground(Void... params) {
try {
mData = new Data();
} catch (Exception e) {
Log.e(TAG, "doInBackground: ", e);
}
return mData;
}
@Override
protected void onPostExecute(Data data) {
super.onPostExecute(data);
if (mData == null) {
Toast.makeText(MainActivity.this, "Hata oluştu", Toast.LENGTH_SHORT).show();
return;
}
liste = data.getList();
liste2 = data.getList2();
int s = data.ListSize();
if (!isInited && liste != null && liste.size() > 0) {
adapter = new RecyclerAdapter(liste, liste2, MainActivity.this);
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
isInited = true;
}
if (isInited) {
adapter.notifyDataSetChanged();
int a = adapter.getItemCount();
if (a != x) {
generateNotification(MainActivity.this, "Listede Degisim Var");
}
x = a;
}
}
}
private void generateNotification(Context context, String message) {
int notificationId = 001;
Intent viewIntent = new Intent(context, MainActivity.class);
PendingIntent viewPendingIntent = PendingIntent.getActivity(context, 0, viewIntent, 0);
NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.dikat).setContentTitle("Bildirim").setContentText(message)
.setContentIntent(viewPendingIntent).setAutoCancel(true)
.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(notificationId, notificationBuilder.build());
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
fillLists();
}
public void scheduleUpdater() {
try {
if (!isAlarmUp(this)) {
UpdateResultReceiver mReceiver = new UpdateResultReceiver(new Handler());
mReceiver.setReceiver(this);
/* Setting the alarm here */
Intent alarmIntent = new Intent(this, PatientListUpdaterReceiver.class);
alarmIntent.putExtra("receiver", mReceiver);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System
.currentTimeMillis(), 10000, pendingIntent);
}
} catch (Exception e) {
Log.e("asdads", "schedule: " + e.getMessage(), e);
}
}
public void cancelUpdater(Context context) {
try {
if (isAlarmUp(context)) {
Intent intent = new Intent(context, PatientListUpdaterReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
} catch (Exception e) {
Log.e("asdasd", "cancel: " + e.getMessage(), e);
}
}
private boolean isAlarmUp(Context context) {
return (PendingIntent
.getBroadcast(context, 0, new Intent(context, PatientListUpdaterReceiver.class), PendingIntent.FLAG_NO_CREATE) != null);
}
}
は、ここに私のアダプタです:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
int sayi=0;
ArrayList<String> liste ,liste2;
static ArrayList<String> liste3 = new ArrayList<>() ;
Context context;
LayoutInflater inflater;
public RecyclerAdapter(ArrayList<String> liste, ArrayList<String> liste2, Context context) {
this.context=context;
this.liste=liste;
this.liste2=liste2;
inflater=LayoutInflater.from(context);
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v=inflater.inflate(R.layout.item_list, parent, false);
RecyclerViewHolder viewHolder=new RecyclerViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
liste3.add("a");
sayi = 0;
for (int j = 0; j < liste3.size(); j++) {
if (liste3.get(j).equals(liste.get(position))) {
sayi++;
}
if (sayi == 0) {
holder.imageView.setTag(holder);
} else {
holder.imageView.setImageResource(R.drawable.ic_checkin);
}
holder.tv1.setText(liste.get(position));
holder.tv2.setText(liste2.get(position));
holder.imageView.setOnClickListener(clickListener);
}
}
View.OnClickListener clickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
RecyclerViewHolder vholder = (RecyclerViewHolder) v.getTag();
int position = vholder.getPosition();
//Toast.makeText(context,"This is position "+position,Toast.LENGTH_LONG).show();
vholder.imageView.setImageResource(R.drawable.ic_checkin);
liste3.add(liste.get(position));
}
};
@Override
public int getItemCount() {
return liste.size();
}
}
ここでは、データ部分があります:
public class Data {
String ip, db, un, passwords;
Connection connect;
PreparedStatement stmt;
ResultSet rs;
ArrayList<String> data = new ArrayList<>();
ArrayList<String> data2 = new ArrayList<>();
public Data(){
ip = "X.X.X.X";
un = "sa";
passwords = "1";
db = "ANKET";
connect = CONN(un, passwords, db, ip);
String query = "SELECT Hasta_dosyano,Notlar FROM Hasta";
try {
stmt = connect.prepareStatement(query);
rs = stmt.executeQuery();
while (rs.next()) {
String id = rs.getString("Hasta_dosyano");
String id2 = rs.getString("Hasta_dosyano");
String full = id + " " + id2;
String time = rs.getString("Notlar");
data.add(full);
data2.add(time);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public ArrayList<String> getList() {
return data;
}
public ArrayList<String> getList2() {
return data2;
}
public int ListSize() {
return data.size();
}
@SuppressLint("NewApi")
private Connection CONN(String _user, String _pass, String _DB,
String _server) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
Connection conn = null;
String ConnURL = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
ConnURL = "jdbc:jtds:sqlserver://" + _server + ";"
+ "databaseName=" + _DB + ";user=" + _user + ";password="
+ _pass + ";";
conn = DriverManager.getConnection(ConnURL);
} catch (SQLException se) {
Log.e("ERRO", se.getMessage());
} catch (ClassNotFoundException e) {
Log.e("ERRO", e.getMessage());
} catch (Exception e) {
Log.e("ERRO", e.getMessage());
}
return conn;
}
}
解決しますか? –