0

私はフォルダからファイルを読み込んで、それから配列を生成し、その後、配列の緯度+経度点を地図上にプロットするAndroidアプリケーションを作っています。私は最初に、別のプログラムでvoidメソッドとして配列戻りメソッドを開発しました(正しく機能しました)。私が行った唯一の変更は、アンドロイドアプリで使用できるように、配列を返すようにしたことです。しかし、私はいつも強制閉鎖した。いくつかのデバッグの後、私のメソッドはいつもnullを返していることがわかりました(配列がnullの場合、 "FAIL!"という画面を表示し、アプリケーションは常に "FAIL!" 。配列常に返されるNull

ファイルが正しい場所にあることを確認しました。これは間違いありません。それでも、なぜプログラムがnullを返すのか不明です。ここに私のコードの一部です:

package net.learn2develop.GoogleMaps; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.List; 
import java.util.StringTokenizer; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.MapView.LayoutParams; 

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.LinearLayout; 


public class MapsActivity extends MapActivity 
{  
    MapView mapView; 
    MapController mc; 
    GeoPoint p; 
    GeoPoint p2; 
    GeoPoint p99; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Map code goes here..... 


    // Add points from ReadCsv.java 
    File fileToUse = new File("/Users/csrobot/Desktop/TrainingData/Training4.csv"); 
    String[][] bump = getArray(fileToUse); 
    if(bump == null){ 
     setContentView(R.layout.deleteme); 
    } 
//  for(int i = 0; i < bump.length; i++) { 
//   String coordinates99[] = {bump[i][0], bump[i][1]}; 
//   double lat99 = Double.parseDouble(coordinates99[0]); 
//   double lng99 = Double.parseDouble(coordinates99[1]); 
//   p99 = new GeoPoint(
//     (int) (lat99 * 1E6), 
//     (int) (lng99 * 1E6)); 
//   MapOverlay mapOverlay99 = new MapOverlay(); 
//   List<Overlay> listOfOverlays99 = mapView.getOverlays(); 
//   listOfOverlays99.add(mapOverlay99); 
//  } 

    mapView.invalidate(); 
} 

@Override 
protected boolean isRouteDisplayed() { 
    return false; 
} 

public String[][] getArray(File file) { 

    try { 
     int row = 0; 
     int col = 0; 
     String[][] numbers=new String[5258][16]; 

     BufferedReader bufRdr; 
     bufRdr = new BufferedReader(new FileReader(file)); 
     String line = null; 

     //read each line of text file 
     while((line = bufRdr.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer(line,","); 
      col=0; 

      while (st.hasMoreTokens()) { 
       //get next token and store it in the array 
       numbers[row][col] = st.nextToken(); 
       col++; 
      } 
      row++; 
     } 

     // ... Here is the code that will make the array 
        // ... 

     //close the file 
     bufRdr.close(); 

     return arrayOfBumps; 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch(Exception e) { 
       // System.out.println("The following error occurred "+e); 
    } 
    return null; 

} 

だから、私の活動がどのように見えるかです。

07-28 09:11:10.962: ERROR/AndroidRuntime(13014): FATAL EXCEPTION: main 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.learn2develop.GoogleMaps/net.learn2develop.GoogleMaps.MapsActivity}: java.lang.NullPointerException 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.os.Looper.loop(Looper.java:123) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at dalvik.system.NativeStart.main(Native Method) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014): Caused by: java.lang.NullPointerException 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at net.learn2develop.GoogleMaps.MapsActivity.onCreate(MapsActivity.java:89) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
07-28 09:11:10.962: ERROR/AndroidRuntime(13014):  ... 11 more 

をので、誰もがここで私を助けることができます:「もし(バンプ== null)の」文と、それがあった次の「for」ループアンコメントを追加する前に、私のlogcat?私は数日間これをしてきましたが、まだそれを理解することはできません。

答えて

2

File fileToUse = new File("/Users/csrobot/Desktop/TrainingData/Training4.csv");

これはNullPointerExceptionの源です。

ファイルのパスは、このフォームあなたはこのようにこれを行うカント/data/data/yourpackagename/somefolder/yourfile

でなければなりません。ファイルは、エミュレータ/電話機のデータストレージ内に保存する必要があります。 csvファイルをassets/raw resourceに移動してInputStreamReaderオブジェクトにロードして、実行する予定のとおりに、ファイルをエミュレータデータにプッシュする必要があります。 assetsフォルダーまたはres/rawフォルダーからファイルを開くいくつかの例を検索

+0

私の資産フォルダにcsvファイルを置く。私はすでに2つの例を探しましたが、 "Activity.getAssets()。open(...)"のようなことをする人がいます。私はここで少し混乱している。 – Mxyk