2

我有一个应用程序,供护理人员使用他们的 Android 手机登录系统。他们扫描二维码或刷 NFC 标签以获取客户的信息、扫描时间和位置。后者信息构成交易。交易被放置在手机的数据库中,并通过 HTTP 提交给服务器。

一切正常,因为所有事务都放在数据库中并发布到 Web 服务,直到我必须同时进行两个事务。事务是通过调用 AsyncTask 进行的,因为它是网络调用,因此不会阻塞 UI 线程。两个事务都对 Web 服务进行,但并非所有数据都发送到 DB。我已经注释掉了一些代码并一次发布了一篇异步帖子,然后数据就可以正常发送了。

问题

当一个 AsyncTask 运行时,另一个启动。发生这种情况时,第一个 AsyncTask 无法正常工作。我发现以下线程存在类似问题,并且使用 SerialExecutor 似乎是答案。

串行执行器

https://stackoverflow.com/questions/6645203/android-asynctask-avoid-multiple-instances-running

谁能帮我在 SerialExecutor 中实现以下 2 个 AsyncTasks,我对 Android 还很陌生,我正在努力开始这一点。我希望 apd 执行并完成,然后 apd3 执行。全部以串行方式。

在此先感谢马特

    String temp_tagType = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_TYPE));
    String temp_tagCompId = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_COMPANY_ID));
   String temp_PersonId = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_PERSON_ID));
    String temp_tagName = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_NAME));
        String temp_tagId = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_TAG_ID));
        String temp_tagScanTime = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_TAG_SCAN_TIME));
    String temp_tagLatitude = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_TRANSACTIONS_LATITUDE));
    String temp_tagLongitude = cursor.getString(cursor
                                                .getColumnIndex(LoginValidate.C_TRANSACTIONS_LONGITUDE));
                                        if(temp_tagId == null){
                                            temp_tagId = "notag";
                                        }
                                        String manualM = "M";
                                         Log.e(TAG, " temp name and status = " + temp_tagName + " " + manualM);
                                    ////////insert the temp variables with the status set to M  
                                        ContentValues values = new ContentValues();
                                        values.putNull(LoginValidate.C_ID);
                                        values.put(LoginValidate.C_TYPE, temp_tagType);
                                        values.put(LoginValidate.C_COMPANY_ID, nfcscannerapplication.getCompId());
                                        values.put(LoginValidate.C_PERSON_ID, temp_PersonId);
                                        values.put(LoginValidate.C_NAME, temp_tagName);
                                        values.put(LoginValidate.C_TAG_ID, temp_tagId);
                                        values.put(LoginValidate.C_STATUS, manualM);
                                        values.put(LoginValidate.C_TAG_SCAN_TIME, manualLogoutTime);
                                        values.put(LoginValidate.C_TRANSACTIONS_LATITUDE, temp_tagLatitude);
                                        values.put(LoginValidate.C_TRANSACTIONS_LONGITUDE, temp_tagLongitude);

                                        DateTime now = new DateTime();
                                        DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd H:mm:ss.SSS");
                                        String formattedNowTime = df.print(now);
                                        Log.e(TAG, "formattedNowTime = " + formattedNowTime);
                                        DateTimeFormatter df2 = DateTimeFormat.forPattern("yyyy-MM-dd H:mm:ss.SSS");
                                        String manualTime = df2.print(timeSetOnSpinner);
                                            Log.e(TAG, "about to put " + temp_tagName + " into DB");
                                        nfcscannerapplication.loginValidate.insertIntoTransactions(values);

                                        String[] params = new String[]{nfcscannerapplication.getCompId(), temp_tagId, temp_PersonId, nfcscannerapplication.getCarerID(),
                                                manualTime, formattedNowTime, manualM, getDeviceName(), temp_tagLatitude, temp_tagLongitude}; 
                                        AsyncPostData apd = new AsyncPostData();
                                        apd.execute(params);

                                         ///////////////now carry on as usual with the last actual tag that has been scanned
                                        Log.e(TAG, "about to insert the current record after inserting the manual logout");

                                        if(tagId == null){
                                            tagId = _tagId;
                                        } 



                                        ContentValues values3 = new ContentValues();
                                        values3.putNull(LoginValidate.C_ID);
                                        values3.put(LoginValidate.C_TYPE, tagType);
                                        values3.put(LoginValidate.C_COMPANY_ID, nfcscannerapplication.getCompId());
                                        values3.put(LoginValidate.C_PERSON_ID, tagPerson);
                                        values3.put(LoginValidate.C_NAME, tagUserName);
                                        values3.put(LoginValidate.C_TAG_ID, tagId);
                                        values3.put(LoginValidate.C_STATUS, IN);
                                        values3.put(LoginValidate.C_TAG_SCAN_TIME, tagScanTime.getMillis());
                                        values3.put(LoginValidate.C_TRANSACTIONS_LATITUDE, tagLatitude);
                                        values3.put(LoginValidate.C_TRANSACTIONS_LONGITUDE, tagLongitude);
                                        // make the current transaction out
                                        DateTime now3 = new DateTime();
                                        DateTimeFormatter df3 = DateTimeFormat.forPattern("yyyy-MM-dd H:mm:ss.SSS");
                                        String formattedNowTime3 = df3.print(now3);
                                        Log.e(TAG, "formattedNowTime = " + formattedNowTime3);

                                        String formattedTagScanTime3 = df3.print(tagScanTime);
                                        Log.e(TAG, "about to put " + tagUserName + " into DB"); 
                                        nfcscannerapplication.loginValidate.insertIntoTransactions(values3);

                                        String[] params3 = new String[]{nfcscannerapplication.getCompId(),  tagId, tagPerson, nfcscannerapplication.getCarerID(),
                                                formattedTagScanTime3, formattedNowTime, IN, getDeviceName(), tagLatitude, tagLongitude}; 
                                        AsyncPostData apd3 = new AsyncPostData();
                                        apd3.execute(params3);

.

4

0 回答 0