1

いくつかの値をテキストファイルに保存していますが、各行は次のようになっています。Cellid:-----、LAC:------、Lat:------、Long:----- ----私がやりたいのは、電話が現在動作しているセリッドをテキストファイルのセリッドと比較し、一致した場合はグーグルマップにマーカーを印刷することです。私の質問は、テキストファイルを読みながらどのようにナビゲートするかです。ファイルは電話のSDカードに保存されます。

4

2 に答える 2

0

これを試して

まず、これらをパブリックエリアに追加します

public static final String Key_Cellid = "Cellid";
public static final String Key_LAC = "LAC";
public static final String Key_Lat = "Lat";
public static final String Key_Long = "Long";
ArrayList<HashMap<String,String>> values = new ArrayList<HashMap<String, String>>();

次に、このメソッドを追加して、各アイテムの名前と値を分離します。

public void stringExtracter(String st){

 String mainStr = st;

    int items = 4; // Numbers of items in each line

    HashMap<String,String> hash = new HashMap<String, String>();

    for(int i=0; i<items; i++){
        String num="";
        int sep = mainStr.indexOf(":");
        String fst = mainStr.substring(0, sep);
        mainStr = mainStr.replaceFirst(fst+":", "");
        if(i<items - 1){
            sep = mainStr.indexOf(",");
            num = mainStr.substring(0, sep);
            mainStr = mainStr.replaceFirst(num+",", "");
        }
        else{
            num = mainStr;
            //mainStr = mainStr.replaceFirst(num+",", "");
        }

        hash.put(fst, num);
    }
     values.add(hash);
}

次に、コードを編集します。

   //Find the directory for the SD Card using the API
//*Don't* hardcode "/sdcard"
File sdcard = Environment.getExternalStorageDirectory();

//Get the text file
File file = new File(sdcard,"file.txt");

//Read text from file

try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;

    while ((line = br.readLine()) != null) {

       stringExtracter(line);
    }

   //here you can get only numbers from text and convert it to integer then compare it
}
catch (IOException e) {
    //You'll need to add proper error handling here
}

values次のような配列リストからデータを取得できることを知ってください。

for(int i=0;i<values.size();i++){
        HashMap<String,String> hash = values.get(i);
        System.out.println(hash.get(Key_Cellid));
        System.out.println(hash.get(Key_LAC));
        System.out.println(hash.get(Key_Lat));
        System.out.println(hash.get(Key_Long));
        System.out.println("--------------");
    }

重要な注意点:

テキストファイルの各行にスペースがないと仮定しました

Cellid:123、LAC:456、Lat:223、Long:213

整数または倍精度浮動小数点数、またはマップで使用したい数値に変換する必要があるため、数値を文字列として格納しました。

これがお役に立てば幸いです。

于 2013-03-09T00:23:47.580 に答える
0
    public static final String Key_Cellid = "Cellid";
    public static final String Key_LAC = "LAC";
    public static final String Key_Lat = "Lat";
    public static final String Key_Long = "Long";
    ArrayList<HashMap<String,String>> values = new ArrayList<HashMap<String, String>>();
    int cellidtt,lact;
    double latt,longt;

    public void stringExtracter(String st){

         String mainStr = st;

            int items = 4; // Numbers of items in each line

            HashMap<String,String> hash = new HashMap<String, String>();

            for(int i=0; i<items; i++){
                String num="";
                int sep = mainStr.indexOf(":");
                String fst = mainStr.substring(0, sep);
                mainStr = mainStr.replaceFirst(fst+":", "");
                if(i<items - 1){
                    sep = mainStr.indexOf(",");
                    num = mainStr.substring(0, sep);
                }
                else{
                    num = mainStr;
                    mainStr = mainStr.replaceFirst(num+",", "");
                }

                hash.put(fst, num);
            }
             values.add(hash);
        }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        GoogleMap gmap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapg)).getMap();



        // Show the Up button in the action bar.
       // getActionBar().setDisplayHomeAsUpEnabled(true);
        GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

        gmap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        gmap.setMyLocationEnabled(true);

      File sdcard = Environment.getExternalStorageDirectory();
//Get the text file
      File file = new File(sdcard,"cellidt.txt");

      try {
          BufferedReader br = new BufferedReader(new FileReader(file));
          String line;

          while ((line = br.readLine()) != null) {
             Log.d("line=",line); // print the text file in the LogCat to ensure that the program is reading the file proper.
             stringExtracter(line);
          }

         //here you can get only numbers from text and convert it to integer then compare it
          for(int i=0;i<values.size();i++){

              HashMap<String,String> hash = values.get(i);
              cellidtt = Integer.parseInt(hash.get(Key_Cellid));
              Log.d("cellidtt=",hash.get(Key_Cellid));
              lact = Integer.parseInt(hash.get(Key_LAC));
              Log.d("lact=",hash.get(Key_LAC));
              latt = Double.parseDouble(hash.get(Key_Lat));
              Log.d("latt=",hash.get(Key_Lat));
              longt = Double.parseDouble(hash.get(Key_Long));
              Log.d("longt=",hash.get(Key_Long));

              gmap.addMarker(new MarkerOptions()
                    .position(new LatLng(latt,longt))
                    .title(cellidtt+","+lact));

          }
      br.close();
      }
      catch (IOException e) {

      }

    }
于 2013-03-10T17:49:04.320 に答える