找不到类符号 - Android Studio

3
我刚开始跟随这个教程构建一个安卓应用。一切都很顺利,直到最后一步我们创建了一个Intent对象来启动NoteSelect活动,尽管该类在同一个文件夹中。以下是错误信息 -
Information:Gradle tasks [:app:assembleDebug]
F:\Path\Memos\app\src\main\java\com\example\memos\memos\MainActivity.java
Error:(99, 57) error: cannot find symbol class NoteSelect
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Information:BUILD FAILED in 19s
Information:2 errors
Information:0 warnings
Information:See complete output in console

这里是层次结构 -

enter image description here

MainActivity.java(onOptionsItemSelected())

package com.example.memos.memos;

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        Intent myIntent = new Intent(MainActivity.this, NoteSelect.class);
        if (id == R.id.action_settings) {
            startActivity(myIntent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

NoteSelect.java(没有提及琐碎的导入)

import com.example.memos.memos.R;

public class NoteSelect extends AppCompatActivity {

    private List <NotesBuilder> notesList = new ArrayList<>();
    private NotesAdapter nAdapter;
    private RecyclerView notesRecycler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note_select);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        notesRecycler = findViewById(R.id.notes);

        nAdapter = new NotesAdapter(notesList);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        notesRecycler.setLayoutManager(mLayoutManager);
        notesRecycler.setItemAnimator(new DefaultItemAnimator());
        notesRecycler.setAdapter(nAdapter);

        prepareNotes();

    }

    private void prepareNotes() {
        File directory;
        directory = getFilesDir();
        File[] files = directory.listFiles();
        String theFile;
        for (int f = 1; f <= files.length; f++) {
            theFile = "Note" + f + ".txt";
            NotesBuilder note = new NotesBuilder(theFile, Open(theFile));
            notesList.add(note);
        }

    }

    public String Open(String fileName) {
        String content = "";
        try {
            InputStream in = openFileInput(fileName);
            if ( in != null) {
                InputStreamReader tmp = new InputStreamReader( in );
                BufferedReader reader = new BufferedReader(tmp);
                String str;
                StringBuilder buf = new StringBuilder();
                while ((str = reader.readLine()) != null) {
                    buf.append(str + "\n");
                } in .close();

                content = buf.toString();
            }
        } catch (java.io.FileNotFoundException e) {} catch (Throwable t) {
            Toast.makeText(this, "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
        }

        return content;
    }
}

问题似乎出现在AndroidManifest.xmlcontent_note_select.xmlactivity_note_select.xml文件中。

enter image description here

到目前为止,我已经尝试将NoteSelect.java包含在与解决NoteSelect类未找到问题的MainActivity.java相同的包中,但进一步导致NoteSelect.java中的NoteBuilderNoteAdapter类未找到的问题。此外,由于原始教程中没有提到这样的方法,我也不喜欢这种方法。
有任何想法我出了什么问题吗?

你在NoteSelect中缺少了一个package行...你是怎么创建这个类的?是通过文件 > 新建... > 活动(Activity)吗? - OneCricketeer
是的,那就是我创建NoteSelect活动的方式。你所说的package行是指package com.example.memos.memos吗?如果是的话,我确实尝试过,但这导致了另一个问题。我在问题底部已经提到了那个问题。 - Saharsh
如所回答,那是正确的。是的,在Java文件中定义一个包是必需的...这个问题不是特定于Android的。 - OneCricketeer
1个回答

1
到目前为止,我已经尝试将NoteSelect.java包含在与MainActivity.java相同的包中,这解决了NoteSelect类未找到的问题,但进一步导致NoteBuilder和NoteAdapter类未找到。

好的,那是正确的,但您还需要将其他类移动而不是留在src/main/java文件夹中。

Java无法解析“上面”当前包中的类。

尝试使用此布局

com.example.memos/
    MainActivity.java
    notes/
        NoteSelectionActivity.java   <--- It's an activity, so rename your class to this
        NotesAdapter.java
        Note.java  <---- A POJO class. // There's no reason to name it "Builder" when it isn't using a "Builder Pattern"

然后在MainActivity中。
package com.example.memos;

import com.example.memos.notes.NoteSelectionActivity;

在NoteSelectionActivity中。
package com.example.memos.notes;

// No imports needed for classes in the same package

1
太好了!只需将NoteSelect类在其他类和清单中重命名,并加上所需的包语句,就可以很好地解决问题。 - Saharsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接