2

我有一个发布功能,可以在数据库中插入有关流程的信息并将电子邮件发送给一个收件人。

$app->post('/sendemail', function ($request, $response) {
    //Save info process
    $message =  saveDataBaseInfo();

    if ($message == "OK") {         

        // Send email
        $res = sendEmail("Some text", "<p>Some text</p>", "Some subject", "email@email.com");

        if ($res == "Fail") {
            return $res;
        }
    }     
});

public function sendEmail($body, $bodyHtml, $subject, $emailTo) {

    $mail = new PHPMailer;

    $mail->SingleTo = true;
    $mail->isSMTP();
    $mail->Host = 'myHost';
    $mail->SMTPAuth = true;
    $mail->Username = 'theuser';
    $mail->Password = '******';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;  
    $mail->setFrom("emailfrom@emailfrom.com", "", false);
    $mail->addAddress($emailTo);
    $mail->isHTML(true);

    $mail->Subject = $subject;
    $mail->Body = $bodyHtml;
    $mail->AltBody = $body;
    $send = $mail->send();

    if (!$send) {
        return "Success"
    } else {
        return "Fail";
    }
}

我在我的 Android 应用程序上调用这个函数,如下面的代码

// Click event function
private void sendEmailClick() { 

    HashMap<String, String> parms = new HashMap<>();
    // parms like emailTo for example

    TaskServerAsync taskServerAsync = new TaskServerAsync(this, parms);
    taskServerAsync.execute(R.string.urlSendEmail);
}

public class TaskServerAsync extends AsyncTask<Integer, String, JSONObject> implements Response.ErrorListener {   
    private Map<String, String> parm;
    private Context context;

    public TaskServerAsync(Context context ,Map<String, String> parms) {
        this.parm = parm;
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        //Show progressBar
        progressBar.show();
    }

    @Override
    protected JSONObject doInBackground(Integer... values) {
        RequestFuture<JSONObject> future = RequestFuture.newFuture();

        // Class send request server with volley
        ServerConn.send(context, values[0], parms, future, this);

        JSONObject json = null;
        try {
            // Get future response
            json = future.get(10, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }

        return json;

    }

    @Override
    protected void onProgressUpdate(String... values) {

    }

    @Override
    protected void onPostExecute(JSONObject response) {        
        dismissProgressBar();
    }

    @Override
    public void onErrorResponse(VolleyError error) {
        // Show error server and dismiss ProgressBar
        dismissProgressBar();
    }

    private void dismissProgressBar() {
        if (progressBar != null)
            progressBar.dismiss();
    }
}

但是 post 函数触发了两次。怎么了?需要我在 apache 上配置一些东西吗?有人可以帮助我吗?

4

1 回答 1

0

如前所述问题在于 Android 应用程序发送了两次调用 API。

于 2016-11-13T10:06:50.623 回答