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