我有一个Geoid值的文件,我正在尝试阅读它。我试过评论一些代码,然后测试并发现在readFile()方法中发生了NullPointerException,我不明白为什么。
Geoid.java:
import java.util.Scanner;
import java.io.*;
import android.app.Activity;
import android.content.Context;
public class Geoid extends Activity{
Scanner openGeoid;
String[] geoidStr = new String[1040000];
double[] geoid = new double[1040000];
double lat;
double longi;
int geoidIndex;
public void getLatLong(double latIn, double longIn){
lat = (-(Math.round(latIn * 4) / 4 + 90) + 180) * 4;
if(longIn >= 0){
longi = (Math.round(longIn * 4) / 4) * 4;
}
if(longIn < 0){
longi = (Math.round(longIn * 4) / 4 + 360) * 4;
}
}
public void openFile(){
try{
openGeoid = new Scanner(getResources().openRawResource(R.raw.geoid));
}catch(Exception e){
;
}
}
public double readFile(){
for(int c = 0;openGeoid.hasNext();c++){
geoidStr[c] = openGeoid.next();
geoid[c] = Double.parseDouble(geoidStr[c]);
}
geoidIndex = (int)Math.round(lat * 1441 + longi);
return geoid[geoidIndex];
}
public void closeFile(){
openGeoid.close();
}
}
MainActivity.java的getOffSet方法:
public double getOffSet(double lat, double longi){
Geoid geo = new Geoid();
geo.getLatLong(lat, longi);
geo.openFile();
double offset = geo.readFile();
geo.closeFile();
return offset;
}
答案 0 :(得分:2)
Geoid geo = new Geoid();
你永远不应该使用new
运算符来实例化Activity
,因为Activity
遵循自己的生命周期,并且Activity
&#39之后可以使用getResources ;调用onStart,如果您实际通过Activity
启动了Intent
,则会调用onStart。如果您只是为了getResources
而需要一个活动,请在方法的签名中添加一个额外的参数。一个Context
对象,例如
答案 1 :(得分:0)
openFile
方法似乎发生了异常,因此openGeoid
变量未实现。
在openFile
中,你不应该在没有做任何事情的情况下捕捉异常。