0

可以请任何人帮助我解决以下问题:

以下方法从在线数据库中检索数据,我可以显示它,但问题是显示需要大约 1 分钟的时间,因为应用程序搜索数据库以显示数据库中的最新结果。任何人都可以帮我申请直接进入表格的最后一行吗?这样应用程序可以花费几秒钟来显示数据,并且还能够每 10 秒刷新一次。

这是方法:

private class GetAllProductsTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            myJavaClient = new Client.Builder(appKey, mastersecret,getApplicationContext()).build();
            myJavaClient.enableDebugLogging();
            myJavaClient.ping(new KinveyPingCallback() {

                @Override
                public void onSuccess(Boolean arg0) {
                    System.out.print("Success");
                }

                @Override
                public void onFailure(Throwable arg0) {
                    System.out.println("Failure");
                }
            });

            try {

                myJavaClient.user().loginBlocking(appKey, mastersecret).execute();
                System.out.println("Client login -> "+ myJavaClient.user().isUserLoggedIn());

            } catch (IOException e) {

                System.out.println("Couldn't login -> " + e);

                e.printStackTrace();
            }

            // Ignore for now

            myJavaClient.appData("tdSensorData", Sensor.class).get(new KinveyListCallback<Sensor>() {

                        @Override
                        public void onSuccess(Sensor[] result) {

                            Toast.makeText(MainActivity.this,"Get All Worked!\n Got: " + result.length,Toast.LENGTH_LONG).show();


                        for(Sensor eventID : result)
                        {   

                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                            String currentDateandTime = sdf.format(new Date());

                            String currentDate = currentDateandTime.substring(0,10);

                            String times = eventID.getDatetime();
                            String tim1 = times.substring(0,10);                

                            if (currentDate .compareTo(tim1)==0){

                            String sens1 = eventID.getSensorr1().toString();                
                            Senso1.setText(sens1);

                            String sens2 = eventID.getSensorr2().toString();
                            Senso2.setText(sens2);

                            String sens3 = eventID.getSensorr3().toString();
                            Senso3.setText(sens3);

                            String tmp = eventID.getTemp();
                            temper.setText(tmp+ " " + "°C");

                            String dat = eventID.getDatetime(); 
                            Device1.setText(dat);
                            }

                        }

                        }

                        @Override
                        public void onFailure(Throwable error) {
                            Toast.makeText(MainActivity.this,
                                    "Get All error: " + error.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }

                    });

            return null;

        }
    }

} 
4

2 回答 2

0

` Main_Table

Id(primary key)  Name       Age
1                Balvier    28
2                Kagis      23


User_Table_9920018278

Id(Primary key of Main_Table as Foreign Key)
1

User_Table_9768466084   

Id(Primary key of Main_Table as Foreign Key)    
1   
2   `

GCM 是更有效的方法,正如我所说,每当服务器可以使用新数据时,服务器会自动通知客户端。我告诉你有效获取数据的步骤:

  1. 从客户那里获取唯一 ID,例如他的电话号码,并创建一个表,即该唯一号码,以便每个用户都有单独的唯一表,该表只有一个包含
    a 的列。主数据表的主键作为外键
  2. 每当您向 main_table 插入新数据时,也可以通过将新创建的行的主键作为外键传递来在用户表中创建另一个条目。
  3. GCM 通知用户下载新创建的数据进行下载,或者如果数据小于 4kb,您可以使用 gcm 通知本身发送数据。无需执行步骤 2、4、5、6。
  4. 收到通知后,您只检查用户表,user_table 中是否有任何行。
  5. 如果是,则从 user_table 获取新插入的数据的外键,并根据从用户表中获取的主键作为外键从 Main_table 获取整个新插入的数据。
  6. 从 user_table 中删除您已经获取的行。
于 2015-04-09T16:18:34.937 回答
0

您可以再放置一个名为“获取的数据”的布尔列,而不是创建或更新的数据时间。当它第一次插入时,您可以将“获取的数据”值设置为 false,当它被客户端获取时,您可以将其更改为“true”,表示它已经获取。您可以在查询中根据此列值获取数据,例如“fetched data=false”。

您可以实施 GCM,只要服务器可以使用新数据,它就会自动将其发送到客户端。希望它会帮助你。

于 2015-04-08T09:17:58.430 回答