这里我试图使用Parse.com获取存储在后端服务器上的所有文件的名称当我通过指定调试点进行调试时,数据显示在我的应用程序中。但是当我尝试正常运行时,数据不会显示在应用程序中。我使用RecyclerView来显示数据(文件名)。下面是获取文件名的代码。
public List<FileModel> getAllFiles() {
final List<FileModel> fileModelData = new ArrayList<>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Documents");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
String onlyFileName;
String newFileName;
for (int i = 0; i < objects.size(); i++) {
ParseFile file = (ParseFile) objects.get(i).get("DocumentFile");
Log.e("Object " + i, "" + file.getName() + "\n");
onlyFileName = file.getName();
Toast.makeText(context, "File " + i + " " + onlyFileName.substring(onlyFileName.lastIndexOf('-') + 1), Toast.LENGTH_SHORT).show();
Log.e("Only File Name", onlyFileName.substring(onlyFileName.lastIndexOf('-') + 1));
newFileName = onlyFileName.substring(onlyFileName.lastIndexOf('-') + 1);
//onlyFileName = onlyFileName.substring(onlyFileName.lastIndexOf('-')+1);
fileModelData.add(new FileModel(newFileName));
Log.e("fileModelData ", "" + fileModelData.size());
}
}
});
/* Log.e("fileModelData " , ""+fileModelData.size());*/
return fileModelData;
}
这是RecyclerView的代码。
GetFiles getFiles = new GetFiles(SearchFilesActivity.this);
List<FileModel> data = getFiles.getAllFiles();
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.VERTICAL,false));
adapter = new FileNameAdapter(this,data);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
我不知道我遗失了什么。请帮我。我们得到的数据是通过使用在后台处理的ParseQuery类的done()方法完成的。
答案 0 :(得分:0)
由于findInBackground()是异步调用,因此getAllFiles()方法可能在完成回调之前返回。这就是列表中未填充数据的原因。 尝试使用find()方法或通过设置回调通知适配器(使用接口更新适配器)。