我有一个非常奇怪的问题,我试图解决它很多天。
我的列表视图应显示正确的登录凭据到应用程序后的数据。
我的列表视图代码在7以下的android版本中正常工作,但在android版本7列表视图中没有显示任何数据。
奇怪的是,如果我在登录页面之后调用cameraIntent
(下面的代码中的函数)然后关闭相机,那么列表视图会显示所有数据。
我已经尝试了很多其他的东西,但唯一的结论是数据只有在我调用cameraIntent
一次后才出现。
private void cameraIntent()
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CAMERA);
}
我在java代码中使用了两个函数
Doit_function
从url中提取数据(服务器上的php脚本从数据库中提取数据)并解析json(php脚本返回的数据)。
void doit_function()
{
request1 = new StringRequest(Request.Method.POST, URL1, new Response.Listener<String>() {
@Override
public void onResponse(String response1) {
StringBuilder ob = new StringBuilder();
parse_the_json(response1);
Toast.makeText(getApplicationContext(), Integer.toString(arr_list.size()), Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VOLLEY", error.getMessage());
Toast.makeText(getApplicationContext(), "YESssd on second", Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("employee_id", username);
return hashMap;
}
};
requestQueue1.add(request1);
}
其他功能是populateUsersList()
。此函数用于填充列表
并在doit_function
之后调用。
填充用户列表还包含对camera_intent
的调用。
如果我删除cameraIntent
代码在7以下的Android版本中正常工作。
我已经放了TimeUnit.MILLISECONDS.sleep(700)
因为我认为从数据库服务器加载数据需要一些时间,如果我删除它(TimeUnit.MILLISECONDS.sleep(700)
)行代码在任何Android版本中都不起作用。
private void populateUsersList() {
// Construct the data source
CustomUsersAdapter1 adapter = new CustomUsersAdapter1(this, arr_list);
//ArrayList<Entry> arrayOfUsers = Entry.getUsers();
// Create the adapter to convert the array to views
// Attach the adapter to a ListView
try {
TimeUnit.MILLISECONDS.sleep(700);
cameraIntent();
} catch (InterruptedException e) {
e.printStackTrace();
}
//Toast.makeText(getApplicationContext(),Integer.toString(arr_list.size()),Toast.LENGTH_SHORT).show();
listView.setAdapter(adapter);
//listView.setOnItemClickListener(this);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(Front_activity.this, Card.class);
Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);
Log.e("YESSSS",Integer.toString(position));
Entrynew temp = new Entrynew();
temp=arr_list.get(position);
//Toast.makeText(getApplicationContext(),temp.employee_id,Toast.LENGTH_SHORT).show();
i.putExtra("employee_id",temp.employee_id);
i.putExtra("username",username);
i.putExtra("url","https://tonichi-tws.com/Business_Card/php/entry.php");
startActivity(i);
}
});
adapter.notifyDataSetChanged();
}
答案 0 :(得分:0)
您的doit_function
是异步任务,因此在获取数据之前可能会执行populateUserList()
。另一种方法是在onResponse()
上设置适配器或进行广播以告知您已完成获取数据。