1

学校の宿題をしていて、助けが必要です。

Android私はこれらの座標をSDカードのtxtファイルに保存しています.この方法で保存されています

x.xxxxxxxx|x.xxxxxxxxxy
x.xxxxxxxx|x.xxxxxxxxxx

等々。私がやっていることは listview.onclicklistener(){ を使用しようとしているので、ファイルをタップすると、これが読み取られ、データとともにインテントがマップに送信されます。私が望むのは、同じファイルから経度[]と緯度[]などの2つの異なる配列に保存して、マーカーを作成するためのパラメーターとして使用するmap.classに送信することです。分割する方法は知っていますが、それらを個々の配列に格納する方法がわかりません。

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            File logFile = new File(Environment.getExternalStorageDirectory().toString(), "GPSLogger/testfile.txt");
            InputStream instream = null;
            try {
                instream = new FileInputStream(logFile);
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
            String line = null;
            String[] Location = null;
            int i = 0;
            String[] Longitude = null;
            String[] Latitude = null;

            try {
                while((line = reader.readLine()) != null){
                    Log.v("result" ,result);
                    result += line + "|";

                    Location = result.split("\\|");
                    for (String s : Location) {
                        Log.v("asd",s);
                        i++;
                        if(i%2==0){
                            String[] Longitude = Location[0];

                        }
                        else{
                            String Latitude = Location[0];
                        }
                    }

これは私が試みていることですが、かなりの数のエラーが発生しています。助けてください、事前に感謝します!

4

2 に答える 2

1

問題は、配列を供給する前に配列 (特に緯度と経度) をインスタンス化する必要があることですが、インスタンス化する前に配列のサイズを知っておく必要があります。そして、このサイズは、行を読み終えて初めてわかります...

それはジレンマです。

幸いなことに、それを行う方法は複数あります。

たとえば、試したことを実行できます: (大きな) 文字列のすべての行を埋めてから、配列を埋めます。

 BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
        String line = null;
        String[] location = null;
        String longitude = null;
        String latitude = null;
        StringBuffer buffer = new StringBuffer();


        while((line = reader.readLine()) != null) {
                Log.v("result" ,result);
                buffer.append(line).append("|");
            }
        location = buffer.toString().split("\\|");
        // Compute the size of the list
                    // There's an odd number of elements because of the
                    // last trailing '|'
        int size = (location.length - 1) / 2;
        longitude = new String[size];
        latitude = new String[size];
        for (int i=0; i<size;i++) {
            longitude[i]=location[i*2];
            latitude[i]=location[i*2+1];
            }

のような「動的な」サイズのオブジェクトを使用することもできますArrayList<String>。これは、長さが事前にわからない場合に値の配列を格納するために使用できます...

于 2013-01-22T15:12:02.303 に答える
1

ファイルが問題で言及したように見える場合は、これを試してください:

String longtitudeLine = reader.readLine();
String latitudeLine = reader.readLine();
String[] longtitudeCoordinates = longtitudeLine != null ? longtitudeLine.split("\\|") : null; //Array will be null if line is empty
String[] latitudeCoordinates = latitudeLine != null ? latitudeLine.split("\\|") : null; // Array will be null if line is empty

注: これは、最初の 2 行が座標であることが確実な場合に機能します。

于 2013-01-22T15:01:46.503 に答える