Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android程序设计错误_Java_Android_Coding Style - Fatal编程技术网

Java Android程序设计错误

Java Android程序设计错误,java,android,coding-style,Java,Android,Coding Style,我目前正在为android开发一种数据库应用程序。但是,由于条目数量非常少,我觉得不需要使用Sqlite数据库。 现在,我在onCreate()方法中有了保存文件的“读取”。 但当我将手机从水平显示模式切换到垂直显示模式时,这也会加载新文件,虽然这不会对性能产生很大影响,因为我没有那么多条目,但仍然会困扰我,因为我希望以正确的方式进行操作 “正确”的方法是什么 private TableLayout tblLayout; private ArrayList<Entry> listO

我目前正在为android开发一种数据库应用程序。但是,由于条目数量非常少,我觉得不需要使用Sqlite数据库。 现在,我在
onCreate()
方法中有了保存文件的“读取”。 但当我将手机从水平显示模式切换到垂直显示模式时,这也会加载新文件,虽然这不会对性能产生很大影响,因为我没有那么多条目,但仍然会困扰我,因为我希望以正确的方式进行操作

“正确”的方法是什么

private TableLayout tblLayout;

private ArrayList<Entry> listOfEntries;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    tblLayout = new TableLayout(this);

    // this basically populates my ArrayList
    listOfEntries = readFromFile(saveFile);

    setContentView(tblLayout);
}
private TableLayout tblLayout;
私有ArrayList入口列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
tblLayout=新的表格布局(本);
//这基本上填充了我的ArrayList
listOfEntries=readFromFile(保存文件);
setContentView(tblLayout);
}

将以下内容添加到活动的清单节点:(您在AndroidManifest文件中声明了活动的位置):

当设备旋转时,它将阻止再次调用onCreate()。这样可以防止在方向改变时再次阅读

那么。在“活动”中,如果要进行任何特定的更改(应在更改方向时发生),请重写
onConfiguration Changed()
方法:

@Override
public void onConfigurationChanged(Configuration config) {
  super.onConfigurationChanged(config);
}
有许多线程可以建议您如何处理方向变化,如:

希望这有帮助

您可以从
应用程序
类使用
OnCreate()
来加载文件。此方法只执行一次

[代码示例]

MyApplication.java

package.com.example.sunday;
导入java.util.ArrayList;
导入android.app.Application;
公共类MyApplication扩展了应用程序{
公共阵列列表入口列表;
@凌驾
public void onCreate(){
super.onCreate();
readFromFile(savedFile);
}
//在此处某处定义readFromFile(文件f)
}
MainActivity.java

package.com.example.sunday;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.os.Bundle;
公共类MainActivity扩展了活动{
ArrayList入口列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApplication a=(MyApplication)getApplication();
条目列表=a.条目列表;
}
}
在AndroidManifest.xml中,您必须“注册”MyApplication类:

<application android:name=".MyApplication"
...
...

我认为最简单的解决方案是:

private TableLayout tblLayout;
private ArrayList<Entry> listOfEntries;
private boolean isFileLoaded = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    tblLayout = new TableLayout(this);

    if(!isFileLoaded){
        listOfEntries = readFromFile(saveFile);
        isFileLoaded = true;
    }

    setContentView(tblLayout);
}
private TableLayout tblLayout;
私有ArrayList入口列表;
私有布尔值isFileLoaded=false;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
tblLayout=新的表格布局(本);
如果(!isFileLoaded){
listOfEntries=readFromFile(保存文件);
isFileLoaded=true;
}
setContentView(tblLayout);
}

但我仍然会像中一样使用应用程序类,它让我有机会在不同的java文件中“隐藏”readFromFile方法,使我的Activity.java文件更干净

太棒了,谢谢你!但是,您提供的被覆盖的
onConfigurationChanged()
不起任何作用,因此可以忽略它。
package com.example.sunday;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    ArrayList<Entry> listOfEntries;

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

        MyApplication a = (MyApplication) getApplication();
        listOfEntries = a.listOfEntries;
    }
}
<application android:name=".MyApplication"
...
...
private TableLayout tblLayout;
private ArrayList<Entry> listOfEntries;
private boolean isFileLoaded = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    tblLayout = new TableLayout(this);

    if(!isFileLoaded){
        listOfEntries = readFromFile(saveFile);
        isFileLoaded = true;
    }

    setContentView(tblLayout);
}