最初,在设置自定义列表视图后,不再添加任何项目,即在列表视图中显示,尽管从FirebaseMessagingService添加了对象项目。 我已经声明了listView static,因此可以将Object添加到其他类或服务的列表中。 这是我的代码:
FirebaseMessagingService:
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
//Toast.makeText(getApplicationContext(), remoteMessage.getData().get("transaction"),Toast.LENGTH_SHORT).show();
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
Block b = gson.fromJson(remoteMessage.getData().get("transaction"), Block.class);
OpenChain.arrayList.add(b);
}
});
}
ListView活动代码:
public static ArrayList<Block> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_open_chain);
arrayList = new ArrayList<>();
getSupportActionBar().setTitle("Vote Ledger");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ListView listView = (ListView) findViewById(R.id.listView);
BlockchainAdap adap = new BlockchainAdap(this, arrayList);
listView.setAdapter(adap);
adap.notifyDataSetChanged();
}
**我以json格式从云端接收对象 **还能够从listview活动中添加对象,但不能从FirebaseMessagingSerivce
添加答案 0 :(得分:1)
我已经声明了listView static,因此可以将Object添加到 其他课程或服务的清单。
不是,一个很好的解决方案,你在这里泄漏 arrayList,因为当活动被破坏时它不会被垃圾收集。
更好的方法是在此方案中使用 LocalBroadCast 。
查看信息链接
https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
现在,你做错了什么。你正在修改arraylist,但你没有通知适配器。
试试这个..
ShowCal:
mes: 2
cols: 7
rows: 7
在FirebaseMessagingService
中private ArrayList<Block> arrayList = new ArrayList<>();
private BlockchainAdap adap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_open_chain);
getSupportActionBar().setTitle("Vote Ledger");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ListView listView = (ListView) findViewById(R.id.listView);
adap = new BlockchainAdap(this, arrayList);
listView.setAdapter(adap);
}
public static void updateList(Block b){
arrayList.add(b);
adap.swap(arrayList);
}
此外,在** BlockchainAdap **中公开一个方法以进行交换。
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
Gson gson = new Gson();
Block b = gson.fromJson(remoteMessage.getData().get("transaction"), Block.class);
OpenChain.updateList(b);
}
这会有效,但请使用