0

问题是我希望我从网页调用grabURL中读取的文本绝对等于我String loremonPostExecute.

但安卓说:“不,它没有!”

为什么我认为 Android 在平等方面不正确?

1)堆栈跟踪截图:

堆栈跟踪

2) 截图:

不等于

3)您可以String lorem = "Lorem ipsum dolor sit amet";在我的课堂上找到向下,并查看我正在阅读的网页的源代码:

源代码

我的课程的源代码:

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        grabURL("http://www.cyberweb.pp.ua/x/o.html");

    }

    public void grabURL(String url) {
        new GrabURL().execute(url);
    }

    private class GrabURL extends AsyncTask<String, Void, Void> {
        private final HttpClient Client = new DefaultHttpClient();
        private String Content;
        private String Error = null;

        protected Void doInBackground(String... urls) {
            try {

                HttpGet httpget = new HttpGet(urls[0]);
                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                Content = Client.execute(httpget, responseHandler);

            } catch (ClientProtocolException e) {
                Error = e.getMessage();
                cancel(true);
            } catch (IOException e) {
                Error = e.getMessage();
                cancel(true);
            }

            return null;
        }

        protected void onPostExecute(Void unused) {

            String lorem = "Lorem ipsum dolor sit amet";

            if (Error != null) {
                Toast.makeText(MainActivity.this, Error, Toast.LENGTH_LONG)
                        .show();
            } else {

                TextView xyu = (TextView) findViewById(R.id.xyu);
                TextView xyu1 = (TextView) findViewById(R.id.xyu1);
                TextView xyu2 = (TextView) findViewById(R.id.xyu2);

                xyu.setText(Content);
                xyu1.setText(lorem);

                Log.v("lorem", lorem);
                Log.v("Content", Content);

                String eq = null;


                if (Content.length() != lorem.length()) {
                       Log.v("length?", "Different length");
                    }


                if (Content.trim().equalsIgnoreCase(lorem.trim())) {

                    xyu2.setText("EQUAL");
                    eq = "EQUAL";
                    Log.v("equal?", eq);
                }

                else {

                    xyu2.setText("NOT EQUAL");
                    eq = "NOT EQUAL";
                    Log.v("equal?", eq);
                }

            }
        }

    }
}

这个问题快把我逼疯了。

Сan有人猜会发生什么?先感谢您!

最后的堆栈跟踪:

在此处输入图像描述

该问题是由网页编码引起的。将编码更改为 时,相等是正确的 UTF-8

4

3 回答 3

3

您不能使用==Java 中的比较字符串。使用equals().

这里的答案非常详细地描述了原因如何比较 Java 中的字符串?

于 2013-01-06T22:32:06.750 回答
3

也尝试比较长度:

final int cl = Content.length();
final int ll = lorem.length();
if (cl != ll) {
   Log.v("TAG", "Different length (Content=" + cl + ", lorem=" + ll + ")");
}
于 2013-01-06T22:44:17.133 回答
2

不要==用于字符串比较。

相反.equals(),它实际上会检查每个字符串的内容并返回正确的结果。

if (Content.equals(lorem)) {
    //etc...

编辑:如果你仍然没有得到平等,你可以试试这个:

if (Content.trim().equalsIgnoreCase(lorem.trim())) {
        //etc...

这会修剪所有空白执行检查,而不考虑大小写。检查两个字符串是您最多可以做的。

于 2013-01-06T22:31:52.370 回答