gpt4 book ai didi

android - 内容适配器和异步回调

转载 作者:行者123 更新时间:2023-11-29 21:47:40 25 4
gpt4 key购买 nike

我正在使用第三方云服务 (Kinvey) 为我的应用获取数据。所有服务的 Kinvey 方法都包装在异步类中。我目前在下面收到错误日志,我明白我为什么会收到它。我只是不知道如何解决这个问题。

错误:

03-12 13:41:03.449: E/AndroidRuntime(18375): FATAL EXCEPTION: main

03-12 13:41:03.449: E/AndroidRuntime(18375): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2130968661, class android.widget.ListView) with Adapter(class com.example.chartviewer.LazyAdapter)]


这是我在异步方法中删除内容后通知我的适配器的代码段:

mKinveyClient.appData("artistdata", ArtistData.class).delete(artistID, new KinveyDeleteCallback() {

@Override
public void onSuccess(KinveyDeleteResponse result) {

Log.e("DELEET", "Data Deleted sucessfully");
Toast.makeText(getBaseContext(),
"Artist Deleted", Toast.LENGTH_SHORT).show();

//refreshes list
adapter.notifyDataSetChanged();

//displays dialog box if no artists left
displayNoArtist();

}
@Override
public void onFailure(Throwable error) {
Log.e("DELETE", "AppData.delete Failure", error);
}
});


更新适配器:

mKinveyClient.appData("artistdata", ArtistData.class).get(myQuery, new 
KinveyListCallback<ArtistData>() {
@Override
public void onSuccess(ArtistData[] result) {

Log.e("FETCHING", "Data fetched sucessfully");
for (ArtistData data : result) {


String name= data.getArtistname();
String imageurl = data.getArtisturl();

String id = data.getArtistid();

artistIds.add(id);

HashMap<String, String> hashMap = new HashMap<String, String>();

hashMap.put(TAG_NAME, name);
hashMap.put(TAG_IMAGEURL, imageurl);

addMyArtists(hashMap);


}

displayData();

}

@Override
public void onFailure(Throwable error) {

Log.e("FETCHING", "AppData.get by Query Failure", error);

}
});


适配器创建者代码:

      list = (ListView)findViewById(R.id.artistlist);
adapter = new LazyAdapter(MyArtistsActivity.this,"artists", artistItemList);
list.setAdapter(adapter);
registerForContextMenu(list);

最佳答案

免责声明:我是 Kinvey 工程团队的成员。

问题是您在从 Kinvey 后端删除之前从 artistItemList 中删除,然后在回调之前不调用 adapter.notifyDatasetChanged。这会导致您在等待后端 Kinvey 删除调用的回调时注意到基础数据集发生更改的延迟。您需要将这两个调用组合在一起,并通过以下两种方式之一进行:

  1. 将传递给 delete 方法的 artistID 设为最终值,并在 onSuccess 中从 artistItemList 中删除该项目,然后再调用 adapter.notifyDatasetChanged。
  2. 在从 artistItemList 中删除项目后立即调用 kinveyClient.appData().delete() 方法之前调用 adapter.notifyDatasetChanged。如果在 Kinvey 后端删除失败,此选项可能会导致问题。

关于android - 内容适配器和异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com