在Android Studio中无法解析某些符号

3
我一直遇到一个错误,就是我刚创建的项目中这个类(DataProvider)似乎无法接受 .add 或者 .put 方法。但是我的 MainActivity 类可以很好地接受它们。我已经执行了“无效缓存和重启”操作。有人能解释一下为什么会出现这种情况以及我该如何解决吗?
DataProvider:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class DataProvider {
public static HashMap<String, List<String>> getInfo()

HashMap<String, List<String>> MoviesDetails = new HashMap<String, List<String>>();

List<String> Action_Movies = new ArrayList<String>();
 //'.add'  would be an error in red.  Cannot resolve symbol 'add'. 
Action_Movies.add("");
List<String> Romantic_Movies = new ArrayList<String>();

Romantic_Movies.add("");
List<String> Horror_Movies = new ArrayList<String>();
Horror_Movies.add("");
List<String> Comedy_Movies = new ArrayList<String>();
Comedy_Movies.add("");

}

MainActivity:

import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class MainActivity extends Activity {
HashMap<String, List<String>> Movies_categories;
List<String> Movies_list;
ExpandableListView Exp_list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    List<String> Test = new ArrayList<String>();
    Test.add("Test");



}

}


2
DataProvider类无法编译,因为getInfo()方法没有括号。修正此错误并尝试重新编译。 - Egor
1
顺便提一下:尽量遵循Java/Android的命名规范。变量/字段采用驼峰式命名法,并始终以小写字母开头(如romanticMovies)。 - Jan Groth
顺便提一下,通常不建议使用大写字母作为变量名的开头。考虑使用驼峰命名法。例如:List<String> actionMovies; - Joseph Webber
该死,Jan,你比我先完成了。 - Joseph Webber
3个回答

6
您在这行末尾缺少了一个分号:
public static HashMap<String, List<String>> getInfo()

让代码分析器疯狂的原因是未正确识别对象类型。只需加上分号即可。
此外,您可能需要删除行末的括号,因为它暗示它是一个方法。所以请像下面这样做:
public static HashMap<String, List<String>> getInfo;

或者这样:
public static HashMap<String, List<String>> getInfo(){
    //Some actual code here, which returns a HashMap
};

现在我看到你的整个类结构混乱了。请尝试以下代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class DataProvider {
public static HashMap<String, List<String>> getInfo;

    public DataProvider() { 

        HashMap<String, List<String>> MoviesDetails = new HashMap<String, List<String>>();

        List<String> Action_Movies = new ArrayList<String>();
        Action_Movies.add("");
        List<String> Romantic_Movies = new ArrayList<String>();

        Romantic_Movies.add("");
        List<String> Horror_Movies = new ArrayList<String>();
        Horror_Movies.add("");
        List<String> Comedy_Movies = new ArrayList<String>();
        Comedy_Movies.add("");

    }

}

是的,我尝试过了。但出现了错误。我收到了这个错误信息:“缺少方法体或声明为抽象”。而且它仍然没有解决问题。 - ACluelessProgramer
你也试过第二个和第三个例子了吗? - Kelevandos
是的,我都试过了。仍然出现关于“add”无法解析的相同错误。 - ACluelessProgramer
这里,我粘贴了可以编译的代码。问题在于你的大部分代码都不在方法内!在Java中,所有的功能代码都应该被封装在一个方法中。我把你提供的代码放到了DataProvider方法的构造函数中,但我不确定它应该做什么,所以你需要重新格式化它。 - Kelevandos
现在完美运作!谢谢! - ACluelessProgramer

2

另外一方面,考虑在构造函数之外创建变量,并在构造函数内部初始化它们。

public class DataProvider {
    public static HashMap<String, List<String>> getInfo;
    HashMap<String, List<String>> movieDetails;
    List<String> actionMovies;
    List<String> romanticMovies;
    List<String> horrorMovies;
    List<String> comedyMovies;

    public DataProvider() {
        movieDetails = new HashMap<String, List<String>>();
        actionMovies = new ArrayList<String>();
        actionMovies.add("");
        romanticMovies = new ArrayList<String>();
        romanticMovies.add("");
        horrorMovies = new ArrayList<String>();
        horrorMovies.add("");
        comedyMovies = new ArrayList<String>();
        comedyMovies.add("");
    }
}

不太相关于主题,但是很好的观点。您有我的赞成先生 :-) - Kelevandos
好的,我会记住的。看起来比我编写的要好。很棒的贡献。 - ACluelessProgramer

0

这些代码行可能已经添加到类中,但在构造函数或方法之外。请确保指令在方法内部


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