如果有条件不在Android中的onPostExecute中或之后工作

时间:2016-04-20 16:59:41

标签: java android android-asynctask conditional

有人能告诉我我的代码搞砸了吗?

我已经尝试了许多可能的解决方案来实现这一点(包括.toString()。trim();在onPostExecute内部。

我正在使用HttpURLConnection通过PHP脚本从我的服务器获取响应。我的PHP脚本是"经过测试",我的Android代码正常工作,直到我尝试将onPostExecute方法的响应/结果字符串值转换为IF或Switch-Case或Log等条件。 / p>

结果在Toast中可以正常工作,但在Log.e或条件中不会。

asyncTask在我的MainActivity中,但在onCreate方法之下/之外。

这是对AsyncTask的调用:

new myAsyncTask().execute();

这是onPostExecute在MainActivity中调用的:

// this method should receive the result from onPostExecute.

       private void asyncTaskFinished(String output) {

    Toast resultToast = Toast.makeText(getApplicationContext(), output + " at asyncTaskFinished", Toast.LENGTH_LONG);
    resultToast.setGravity(Gravity.CENTER, 0, 0);
    resultToast.show();

    if(output.equals("EMPTY")) {
    Log.e("asd", output); // this should prove that the conditional worked.
    finish();  // this is also here to prove that the conditional worked.
    }
       }

这是AsyncTask的开头:

private class myAsyncTask extends AsyncTask<String, Integer, String>{

@Override
protected String doInBackground(String... params) {

这些是doInBackground方法的一部分:

String response = stringBuilder.toString();

//          Close response stream:

            responseStream.close();


        result = response.toString().trim();

return result;

这是onPostExecute方法的开始:

    protected void onPostExecute(String result){

    MainActivity.this.asyncTaskFinished(result);  // this is what I am using to get the result into the MainActivity.

我不相信我忽视了任何事情。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会考虑我打开,关闭的这个问题,除非有人想要提供更多信息。

感谢@rmlan提醒我在我以前的一个Log.e列表中看到的东西,因为它让我心旷神怡。现在我觉得这样一个Newb。

@rmlan如果我被允许,我会提高你的回复。

“EMPTY”,以及我收到的任何其他结果都在其前面附加了“?”/问号。据我所知,它并非来自PHP方面,因为我在将它发送到android之前修剪了回声输出,所以它让我相信它与返回的Unicode编码有关。

经过一些更多的研究后,我假设问号是所谓的字节顺序标记(BOM)。

虽然问号会显示在Log.e输出中,但它不会显示在toast中,也不会显示我制作的包含editText字段的临时AlertDialog。

所有这一切的奇怪之处在于我的条件代码工作正常,然后突然它拒绝工作,这导致我在Log.e输出中找到问号。

我的问题的解决方案是改变这个:

if(output.equals("EMPTY")) {

Log.e("asd", output); // this should prove that the conditional worked.

finish();  // this is also here to prove that the conditional worked.
}

到此:

if(output.contains("EMPTY")) {

Log.e("asd", output); // this should prove that the conditional worked.

finish();  // this is also here to prove that the conditional worked.
}

我不想使用'包含',但在找到问号的来源之前,我必须忍受它。

如果有人知道问号的来源,请加入。

我希望所有这些都有助于其他人。