ListView在Android 7

时间:2017-07-11 02:50:13

标签: android listview android-camera

我有一个非常奇怪的问题,我试图解决它很多天。 我的列表视图应显示正确的登录凭据到应用程序后的数据。 我的列表视图代码在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();
    }

1 个答案:

答案 0 :(得分:0)

您的doit_function是异步任务,因此在获取数据之前可能会执行populateUserList()。另一种方法是在onResponse()上设置适配器或进行广播以告知您已完成获取数据。