【问题标题】:Android get resource / Buffer reader problemsAndroid 获取资源/缓冲区读取器问题
【发布时间】:2012-04-18 19:46:07
【问题描述】:

我的代码似乎可以运行,但它没有显示结果文本视图上的任何结果我猜测是因为我设置代码的方式。代码在下面有人请帮助我。谢谢

     public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main3);

                Button button = (Button) findViewById(R.id.but);

                input = (EditText) findViewById(R.id.editTextj);


                display = (TextView) findViewById(R.id.textView8);


                button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CCActivity3 fs = new CCActivity3();
                        fs.fileReader();

                    }// button
                });// button end
            }

            public void fileReader() {

                try {
                InputStream is=this.getResources().openRawResource(R.raw.file);

                BufferedReader bc = new BufferedReader(new InputStreamReader(is));

                    String cLine;
                    String inputText = "";

                    List<String> test2 = new ArrayList<String>();   

                    // read file line by line



                    while ((cLine = bc.readLine()) != null) {


                         inputText = inputText + cLine + "\n";

                    }



                    s = input.getText().toString();

                    test = CCActivity3.getPermutation(s);//Permutation method
                          test2.retainAll(test);//intersection
                    String fg = "";

                    for (String s2 : test2) {
                        fg += s2 + "\n";
                    }


                    display.setText(fg);




                     bc.close();

                } catch (Exception e) {// catch any errors if necessary

                    display.setText(e.getMessage());
                }




        }

如果您检查资源行,我很确定我没有正确理解代码的格式,我相信它们只是分散了。提示 res/raw 路径上的 file.txt 有超过 100,000 个字符串/单词,这可能是原因。再次感谢

【问题讨论】:

  • 您在“inputText”中有存储输入流行,之后您没有使用它,即您使用“s”来获取字符串以显示不是“inputstream”
  • 对不起,我没有为 S 放置声明的变量。它实际上是一个全局声明的数组列表,输入与来自编辑文本的用户输入的输入文本无关。

标签: java android resources inputstream bufferedreader


【解决方案1】:

关于您的代码:

            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CCActivity3 fs = new CCActivity3();
                    fs.fileReader();

                }// button
            });// button end

CCActivity3 是从 Activity 派生的吗? 如果是这样,那么您不应该以这种方式构建它。 你不能实例化你自己的 Activity 类。只有 Android 框架可以做到这一点。
这里似乎发生的是,在 fileReader() 内部,您正在调用其上下文尚未由 onCreate() 正确初始化的 Activity 的 getResources()。

无论如何,您可以做的一件事是直接调用 fileReader() 方法而不实例化 CCActivity3,如下所示:

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            fileReader();
        }// button
    });// button end

【讨论】:

  • 天啊,非常感谢,它现在可以工作了。我只有一个问题。我正在从 file.txt 中读取超过 100,000 个单词。如果应用程序没有响应,速度会非常慢。你认为我应该编写一个代码来将它与字母而不是单词进行比较,这样它可以更快更高效。你怎么看。
  • 100,000 字不应该有那么大的性能问题。我注意到的一件事是您正在使用 String 对象将两个字符串连接在一起。以这种方式使用 String 对象意味着 VM 将为每个单词创建一个 String 对象实例!您可能想尝试改用 StringBuilder。确保在循环外仅实例化一个 StringBuilder 对象......如果这能提高您的性能,请告诉我们。 developer.android.com/reference/java/lang/StringBuilder.html
【解决方案2】:

test = CCActivity3.getPermutation(s);//置换方法 test2.retainAll(test);//交集

上面的代码能得到正确的回报吗?

【讨论】:

  • 嗯,我不这么认为。但是我得到了上面那个人的更正。感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2016-07-06
相关资源
最近更新 更多