我需要将数据保存到MySQL数据库。问题是我每秒都有很多新数据需要过滤它,所以我只保存必要的数据。因此,当我获得新数据时,我创建了一个对象并调用方法processData。出于某种原因,这是行不通的。这是我的方法:
import java.util.Date;
import org.llrp.ltk.types.UnsignedShort;
import hr.fer.rfid.MySQLAccess;
public class Brain {
Data[] datas = new Data[]();
Data[] temps = new Data[]();
public void processValues(Data dat){
if(temps==null){
datas[0]=dat;
temps[0]=dat;
}
for (i=0;i<(temps.length+1);i++){
System.out.println("Process value: "+i);
if(i==(temps.length+1)){
temps[i]=dat;
datas[datas.length+1]=dat;
}
if(i<=temps.length) {
if(dat.epc==temps[i].epc)
if((dat.antenna!=temps[i].antenna)
||((dat.date.getTime()-temps[i].date.getTime()>=5000)
&&(dat.date.getTime()-temps[i].date.getTime()<=20000))) {
temps[i]=dat;
try {
dao.writeToDatabase(dat);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
我得到NullPointerException
答案 0 :(得分:2)
至少现在编译。请注意数据数组声明的更改。如果阵列不够动态,我建议改为使用List<Data>
。
import java.util.Date;
public class Brain {
private static final int DEFAULT_SIZE = 10;
Data[] datas = new Data[DEFAULT_SIZE];
Data[] temps = new Data[DEFAULT_SIZE];
Dao dao = new Dao();
public void processValues(Data dat){
if(temps==null){
datas[0]=dat;
temps[0]=dat;
}
for (int i=0;i<(temps.length+1);i++){
System.out.println("Process value: "+i);
if(i==(temps.length+1)){
temps[i]=dat;
datas[datas.length+1]=dat;
}
if(i<=temps.length) {
if(dat.epc==temps[i].epc)
if((dat.antenna!=temps[i].antenna)
||((dat.date.getTime()-temps[i].date.getTime()>=5000)
&&(dat.date.getTime()-temps[i].date.getTime()<=20000))) {
temps[i]=dat;
try {
dao.writeToDatabase(dat);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
class Data
{
public String epc;
public Date date;
public String antenna;
}
class Dao
{
public void writeToDatabase(Data data) {}
}
答案 1 :(得分:1)
您的代码中存在许多问题,因此这是第一个问题:
if(temps==null){
datas[0]=dat;
temps[0]=dat;
}
如果temps
为空,则保证NullPointerException。
您也没有检查dat
是否为空,您的代码也没有显示您已初始化dao
。
与NPE无关,但这是一个逻辑错误:
for (i=0;i<(temps.length+1);i++){
System.out.println("Process value: "+i);
if(i==(temps.length+1)) {
...
}
i
永远不会是temps.length + 1
,因为循环条件是i < temps.length + 1
。
这里还有其他问题,无法提及。我强烈建议您使用一些静态分析工具(例如Checkstyle或FindBugs)来帮助提高代码质量。这些都是很好的开源工具,可以在它们变成bug之前发现常见错误。我一直使用它们,它们极大地提高了我的编码标准。