아래 소스에서
float[] elevation_result; 대신에
float[] elevation_result = new float[] { 2, 1, 3, 1, 3}; 를 넣으면 정상적으로 작동합니다...
/mnt/sdcard안의 파일을 읽어서 elevation_result[i] = (float)(vari.elevation); 로 저장하는 과정에서
문제가 발생한 것 같은데,, 잘 모르겠네여,, 조언부탁드립니다.
=========================소스는 다음과 같습니다=========================
package exam.militarymgrs;
import java.io.*;
import java.util.*;
import android.app.*;
import android.os.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
public class Draw_LOS extends Activity
{
Variables vari;
// public void mOnClick(View v){
java.util.List<String> data1 = new ArrayList<String>();
java.util.List<String> data2 = new ArrayList<String>();
java.util.List<String> data3 = new ArrayList<String>();
java.util.List<String> data4 = new ArrayList<String>();
java.util.List<String> data5 = new ArrayList<String>();
java.util.List<String> data6 = new ArrayList<String>();
java.util.List<String> data7 = new ArrayList<String>();
java.util.List<String> data8 = new ArrayList<String>();
String[] verlabels = new String[] { "Highst", "Mean", "Lowest" };
String[] horlabels = new String[] { "Left Site", "Right Site"};
float[] elevation_result;
//float[] elevation_result = new float[] { 2,1, 3, 1 , 3};
//public static boolean BAR = true;
///finding max&minimum latitude, longitude
int maxLatitude = Math.max((int) vari.final_x, (int)vari.init_x);
int minLatitude = Math.min((int) vari.final_x, (int)vari.init_x);
int maxLongitude = Math.max((int) vari.final_y, (int)vari.init_y);
int minLongitude = Math.min((int) vari.final_y, (int)vari.init_y);
///∞≈≤Ÿ∑Œ «fl≥◊ x, y∏¶
public int currentLatitude = minLatitude;
public int currentLongitude = minLongitude;
public int latitudeCalculation = maxLatitude - minLatitude + 1;
public int longitudeCalculation = maxLongitude - minLongitude + 1;
public double x, y;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.mapReading();
GraphView graphView = new GraphView(this, elevation_result, "Result",horlabels, verlabels, GraphView.LINE);
setContentView(graphView);
}
//////////////////////////MAP READING
public void mapReading(){
int i;
int ix = 0;
int iy = 0;
for(ix=0;ix<latitudeCalculation;ix++)
{
//System.out.println(currentLatitude);
//System.out.println(currentLongitude);
//System.out.println(latitudeCalculation);
//System.out.println(longitudeCalculation);
for(iy=0;iy<longitudeCalculation;iy++)
{
if (currentLatitude == 126 && currentLongitude == 36)
{
data1 = readFile("/mnt/sdcard/36x37x233x234.sdf");
//System.out.println("36x37x233x234.sdf");
currentLongitude++;
} else if (currentLatitude == 127 && currentLongitude == 36)
{
data2 = readFile("/mnt/sdcard/36x37x232x233.sdf");
//System.out.println("36x37x232x233.sdf");
currentLongitude++;
} else if (currentLatitude == 128 && currentLongitude == 36)
{
data3 = readFile("/mnt/sdcard/36x37x231x232.sdf");
//System.out.println("36x37x231x232.sdf");
currentLongitude++;
} else if (currentLatitude == 129 && currentLongitude == 36)
{
data4 = readFile("/mnt/sdcard/36x37x230x231.sdf");
//System.out.println("36x37x230x231.sdf");
currentLongitude++;
} else if (currentLatitude == 126 && currentLongitude == 37)
{
data5 = readFile("/mnt/sdcard/37x38x233x234.sdf");
//System.out.println("37x38x233x234.sdf");
currentLongitude++;
} else if (currentLatitude == 127 && currentLongitude == 37)
{
data6 = readFile("/mnt/sdcard/37x38x232x233.sdf");
//System.out.println("37x38x232x233.sdf");
currentLongitude++;
} else if (currentLatitude == 128 && currentLongitude == 37)
{
data7 = readFile("/mnt/sdcard/37x38x231x232.sdf");
//System.out.println("37x38x231x232.sdf");
currentLongitude++;
} else if (currentLatitude == 129 && currentLongitude == 37)
{
data8 = readFile("/mnt/sdcard/37x38x230x231.sdf");
//System.out.println("37x38x230x231.sdf");
currentLongitude++;
}
}
currentLatitude++;
}
int rr = (int) (vari.calculation_loop);
//System.out.println(vari.calculation_loop);
for(i=0;i<rr+1;i++)
{
if (vari.isXbases)
{
x = vari.init_x + ((double)i)/1200;
y = vari.init_y + vari.step*((double)i)/1200;
return_elevation(x, y);
elevation_result[i] = (float)(vari.elevation);
//g.drawLine(i, 100, i, 100+vari.elevation);// draw lines
//System.out.println(vari.elevation);
//System.out.println(x);
//System.out.println(y);
}
else
{
x = vari.init_x + Math.abs(1/vari.step*((double)i)/1200);
if(vari.final_y-vari.init_y < 0)
{
y = vari.init_y - ((double)i)/1200;
} else if(vari.final_y-vari.init_y >= 0)
{
y = vari.init_y + ((double)i)/1200;
}
return_elevation(x, y);
elevation_result[i] = (float)(vari.elevation);
//g.drawLine(i, 100, i, 100+vari.elevation);// draw lines
//System.out.println(vari.elevation);
//System.out.println(x);
//System.out.println(y);
}//end else
}//end FOR
}//public void mapReading
//////////////////////////////////////
public static ArrayList<String> readFile(String fileName) {
String line = "";
ArrayList<String> data = new ArrayList<String>();//consider using ArrayList<int>
try {
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);//Can also use a Scanner to read the file
while((line = br.readLine()) != null) {
data.add(line);
}
}
catch(FileNotFoundException fN) {
fN.printStackTrace();
}
catch(IOException e) {
System.out.println(e);
}
return data;
}
////////////////////////////////////////////
public void return_elevation(double Longitude, double Latitude)
{
//int elevation;
double newLongitude, newLatidude;
newLongitude = Longitude - (int)Longitude;
newLatidude = Latitude - (int)Latitude;
//System.out.println(newLongitude);
//System.out.println(Latitude);
int Ky = (int) (Math.round((1200*(newLatidude))))*1200; //æÍ¥¬ ≥—æÓ∞•∂ß 1200¥‹¿ß∑Œ ≥—æÓ∞°æfl«‘
int Kx = (int) Math.round(-1200*(newLongitude)-1);
//System.out.println(Ky+Kx);
if( ((int)Latitude) == 36 && ((int)Longitude) == 126)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data1.get(0));
} else
{
vari.elevation = Integer.parseInt(data1.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 36 && ((int)Longitude) == 127)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data2.get(0));
} else
{
vari.elevation = Integer.parseInt(data2.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 36 && ((int)Longitude) == 128)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data3.get(0));
} else
{
vari.elevation = Integer.parseInt(data3.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 36 && ((int)Longitude) == 129)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data4.get(0));
} else
{
vari.elevation = Integer.parseInt(data4.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 37 && ((int)Longitude) == 126)
{
if ((Ky+Kx) < 0){
vari.elevation = Integer.parseInt(data5.get(0));
} else
{
vari.elevation = Integer.parseInt(data5.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 37 && ((int)Longitude) == 127)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data6.get(0));
} else
{
vari.elevation = Integer.parseInt(data6.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 37 && ((int)Longitude) == 128)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data7.get(0));
} else
{
vari.elevation = Integer.parseInt(data7.get(Ky+Kx));
}
} else if ( ((int)Latitude) == 37 && ((int)Longitude) == 129)
{
if ((Ky+Kx) < 0)
{
vari.elevation = Integer.parseInt(data8.get(0));
} else
{
vari.elevation = Integer.parseInt(data8.get(Ky+Kx));
}
}
}
// }//public void mOnClick(View v)
}//don't touch




new GraphView(this, elevation_result... ); 이부분에서 elevation_result의 객체를 생성or할당하지도 않고 넘겨줘서 뭐 쓸만한 작업 할수 있을지 의문이군요.
elevation_result[i] = (float)(vari.elevation); 은 당연히 null 값에 접근하니 오류뜨는거고요.