【发布时间】:2018-07-20 16:34:21
【问题描述】:
我有一个简单的聊天应用程序,我想让 ChatActivity 在背板上运行,并在从数据库中检索数据时收到通知。但我不明白后台是如何运作的。
在最后的 CustomAdapter adapter=new CustomAdapter(this,mesajList,firebaseUser);..... 部分中,接收到消息并显示在屏幕上。我希望它在后台工作
public class SohbetActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private static String PREFS = "PREFS";
private static int SPLASH_TIME_OUT = 400;
TextView tvBaslik;
EditText et_mesaj;
FloatingActionButton buttonGonder;
ListView lv_chatyap;
FirebaseDatabase database;
FloatingActionButton imageButton;
private AdView mAdView2;
DatabaseReference dbRef;
FirebaseStorage firebaseStorage;
StorageReference storageReference;
public static final int RC_SELECT_IMAGE=1;
final FirebaseUser firebaseUser= FirebaseAuth.getInstance().getCurrentUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sohbet);
tvBaslik= (TextView) findViewById(R.id.textViewBaslik);
et_mesaj= (EditText) findViewById(R.id.editTextMesaj);
buttonGonder= (FloatingActionButton) findViewById(R.id.buttonMesajGonder);
lv_chatyap= (ListView) findViewById(R.id.listViewChatYap);
lv_chatyap.setDivider(null);
lv_chatyap.setDivider(null);
et_mesaj.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().trim().length()>0){
buttonGonder.setEnabled(true);}
else{
buttonGonder.setEnabled(false);}
}
@Override
public void afterTextChanged(Editable s) {}
});
String oda= getIntent().getStringExtra("odaKey");
tvBaslik.setText(oda);
final ArrayList<Mesaj> mesajList=new ArrayList<Mesaj>();
database=FirebaseDatabase.getInstance();
dbRef=database.getReference("chats/"+oda);
firebaseStorage=FirebaseStorage.getInstance();
storageReference=firebaseStorage.getReference("chatImages/"+oda);
buttonGonder.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(View v) {
String gonderen=firebaseUser.getEmail();
String mesaj=et_mesaj.getText().toString();
String zaman = new SimpleDateFormat("dd/MM HH:mm").format(Calendar.getInstance().getTime());
dbRef.push().setValue(new Mesaj(gonderen,mesaj,zaman,null));
et_mesaj.setText("");
}
});
final CustomAdapter adapter=new CustomAdapter(this,mesajList,firebaseUser);
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mesajList.clear();
for(DataSnapshot ds:dataSnapshot.getChildren()){
mesajList.add(ds.getValue(Mesaj.class));
}
lv_chatyap.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
`
【问题讨论】:
-
你需要实现一个后台服务来监听变化。查看“广播”。
-
我添加了背板似乎在设备上工作,但是当它在背板中时我无法获取数据。我想创建一个在背板上运行的消息服务。我创建了一个后端服务作为一个简单的守护进程,当我进入这个类时,我将 toast 发送到屏幕
标签: android service background background-service