[英]Using Singleton methods in activities (Android)
所以我一直在 Android Studio 中处理这个 android 项目,我让用户创建待办事项列表。 这是一个课堂作业,我必须与单身人士一起工作。 我已经阅读了很多关于它的信息和问题/答案,但这只会让我越来越困惑。
在我的MainActivity
我尝试调用ReadTitlesFromFile
方法,但出现错误:
此处不允许使用修饰符“public”
和
内部类不能有静态声明
即使代码与我在某处找到的示例完全相同。 有人可以帮我修复错误吗?
这是我的单身人士:
public class ToDoManagerSingleton {
private ArrayList<ToDoList> listTitles;
// One single instance for the entire app
private static ToDoManagerSingleton ourInstance = new ToDoManagerSingleton();
// Constructor
private ToDoManagerSingleton() {
// Empty ArrayList with in it the different lists
listTitles = new ArrayList<ToDoList>();
}
// Method to get the one single instance
public static ToDoManagerSingleton getInstance() {
return ourInstance;
}
// Getter and setter
public void setListTitles (ArrayList listTitlesArg){
listTitles = listTitlesArg;
}
public ArrayList getListTitles(){
return listTitles;
}
// Add new title to list
public void AddNewTitle(ToDoList title){
listTitles.add(title);
}
// Write list titles to a file
public void WriteListTitlesToFile (Context context){
PrintStream outstream = null;
try{
outstream = new PrintStream(context.openFileOutput("titlesfile.txt", Context.MODE_PRIVATE));
for (ToDoList listTitle : listTitles) {
outstream.println(listTitle);
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
// Read titlesfile.txt
public void ReadTitlesFromFile(Context context){
try {
FileInputStream inStream = context.openFileInput("titlesfile.txt");
InputStreamReader inReader = new InputStreamReader(inStream);
BufferedReader bufferedReader = new BufferedReader(inReader);
StringBuilder sBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null){
sBuilder.append(line).append("\n");
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}
// Read itemsfile.txt
public void ReadItemsFromFile(Context context){
try {
FileInputStream inStream = context.openFileInput("itemsfile.txt");
InputStreamReader inReader = new InputStreamReader(inStream);
BufferedReader bufferedReader = new BufferedReader(inReader);
StringBuilder sBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null){
sBuilder.append(line).append("\n");
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}
}
这是MainActivity
类:
public class MainActivity extends AppCompatActivity {
ListView showSavedFilesListview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize listview
showSavedFilesListview = (ListView) findViewById(R.id.ListView1);
// Read titles from titlesfile.txt
public class ReadTitles {
public static void main (Context context) {
ToDoManagerSingleton tmp = ToDoManagerSingleton.getInstance();
tmp.ReadTitlesFromFile(Context context);
}
}
}
如果这是一个愚蠢的问题,或者之前已经被问过,我很抱歉,但我是编程新手,所有的信息都让我感到困惑。
您已在方法中放置了一个类。 这就是为什么您会收到错误消息: "Modifier 'public' not allowed here"
无论如何,您不需要类ReadTitles
; 即使您确实使用了它,也要从main
方法中删除static
修饰符。
简单地说,而不是这样:
// Read titles from titlesfile.txt
public class ReadTitles {
public static void main (Context context) {
ToDoManagerSingleton tmp = ToDoManagerSingleton.getInstance();
tmp.ReadTitlesFromFile(Context context);
}
}
把这个:
// Read titles from titlesfile.txt
ToDoManagerSingleton tmp = ToDoManagerSingleton.getInstance();
tmp.ReadTitlesFromFile(this); // use the Activity context
如前所述,您试图在onCreate
方法中声明一个ReadTitles
类型的类。 你不可以做这个。
代替:
public class ReadTitles {
public static void main (Context context) {
ToDoManagerSingleton tmp = ToDoManagerSingleton.getInstance();
tmp.ReadTitlesFromFile(Context context);
}
}
您可以简单地在onCreate
调用您的 Singletons 实例。 但是,您需要先获取应用程序Context
然后才能调用ReadTitlesFromFile
方法。 目前,您正在尝试在将参数传递给ReadTitlesFromFile
时显式声明类型。 您不要这样做,因为它会导致编译器错误。 相反,使用getApplicationContext()
方法来获取Context
。 见下文:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize listview
showSavedFilesListview = (ListView) findViewById(R.id.ListView1);
// Read titles from titlesfile.txt
ToDoManagerSingleton tmp = ToDoManagerSingleton.getInstance();
Context context = getApplicationContext();
tmp.ReadTitlesFromFile(context);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.