如何将SerialExecutor与AsyncTask一起使用(API< 11)

时间:2012-12-03 13:05:16

标签: android android-asynctask

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

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

问题

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

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);

0 个答案:

没有答案