2017-02-04 2 views
1

ジオコーダ逆ジオコーダを作成しています。
座標は、逆ジオコーディングでさらに使用するテキストビューで生成されます。
問題は、変数にtextviewの内容を保存しようとすると、アプリケーションが突然動作しなくなることです。
LATITUDE = Double.parseDouble(t.getText().toString());
LATITUDEは、変数であり、tは、座標が生成されるtextViewです。
textViewのdouble値を変数に保存する

さらにdoubleの値をtextViewから変数に保存して、さらに使用できるようにする方法はありますか。
そうでない場合は、この問題を解決できる可能性があります。あなたは次の行でのTextViewに協調の新しい追加されている

public class MainActivity extends Activity { 

private Button b; 
public TextView t; 
public TextView u; 
public TextView add; 
private LocationManager locationManager; 
private LocationListener listener; 
public Button b2; 
private EditText e; 
double LATITUDE; 
double LONGITUDE; 





@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    t = (TextView) findViewById(R.id.textView); 
    u = (TextView) findViewById(R.id.textView3); 
    add = (TextView) findViewById(R.id.textView4); 
    b = (Button) findViewById(R.id.button); 
    b2 = (Button) findViewById(R.id.button2); 
    e = (EditText) findViewById(R.id.editText); 




    b2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String number = e.getText().toString(); 
      String loc = t.getText().toString(); 
      String loc1 = u.getText().toString(); 
      String loc2 = add.getText().toString(); 
      Intent sendIntent = new Intent(Intent.ACTION_VIEW); 

      sendIntent.setData(Uri.parse("sms:"+number)); 
      sendIntent.putExtra("sms_body",loc+loc1+loc2); 



      try { 
       startActivity(sendIntent); 
       finish(); 
       Log.i("Finished sending SMS...", ""); 
      } 
      catch (android.content.ActivityNotFoundException ex) { 
       Toast.makeText(MainActivity.this, 
         "SMS failed, please try again later.", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 


    listener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      t.append("\n " + location.getLatitude()); 
      u.append("\n " + location.getLongitude()); 
     } 

     @Override 
     public void onStatusChanged(String s, int i, Bundle bundle) { 

     } 

     @Override 
     public void onProviderEnabled(String s) { 

     } 

     @Override 
     public void onProviderDisabled(String s) { 

      Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(i); 
     } 
    }; 

    configure_button(); 
} 



@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode){ 
     case 10: 
      configure_button(); 
      break; 
     default: 
      break; 
    } 
} 

void configure_button(){ 
    // first check for permissions 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET} 
        ,10); 
     } 
     return; 
    } 
    // this code won't execute IF permissions are not allowed, because in the line above there is return statement. 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //noinspection MissingPermission 
      locationManager.requestLocationUpdates("gps",15000,0, listener); 
     } 
    }); 
} 

public void phone(View view) { 
    Intent i = new Intent(this,Main2Activity.class); 
    startActivity(i); 

} 

    public void address(View view) { 

     LATITUDE = Double.parseDouble(t.getText().toString()); 
     LONGITUDE = Double.parseDouble(u.getText().toString()); 
     Geocoder geocoder = new Geocoder(this, Locale.ENGLISH); 
     String result; 
     try { 

      List<Address> addressList = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); 
      if (addressList != null && addressList.size() > 0) { 
       Address address = addressList.get(0); 
       StringBuilder sb = new StringBuilder(); 

       for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { 
        sb.append(address.getAddressLine(i)); 
       } 
       sb.append("\n" + address.getLocality()); 
       sb.append("\n" + address.getPostalCode()); 
       sb.append("\n" + address.getCountryName()); 
       result = sb.toString(); 
       add.append(result); 
      } 
     } 
     catch (IOException e) { 
     } 
    } 
} 

答えて

1

:事前に

感謝:)

は、ここに私のJavaコードです。 t.append( "\ n" + location.getLatitude())

ここでtextViewを読むと、すべての値が\ nで区切られます。最初に分割して、文字列の配列を取得してください。次に、すべての文字列を2倍に変換するループを実行します。ここで

あなたは、文字列に

String string = "004-034556"; 
String[] parts = string.split("-"); 
String part1 = parts[0]; // 004 
String part2 = parts[1]; // 034556 
+0

このケースは、使用されます。 TextViewの中に、私は完全にあなたが私はすでに書かれていることを実現するために私を導いpart.Which文字列に強調されるまで忘れてしまった: – Shourya

+0

ねえThanksss.Iは本当に愚かなmistake.Iは、テキスト「緯度」を書いたit.Iを作ってしまいましたテキストビューの何か.... Thankss – Shourya

+0

あなたが答えを見つけたら、それを正解とマークすることを忘れないでください。 – Bashima

0

を分割することができる方法の一例であるなぜのTextViewに追加時にクラスレベルの文字列配列に入れてはいけません。だから、きれいで安全なコード。スプリット中にヌルポインタの危険性はありません。私のアプリでも、私は逆ジオコーダクラスを実装し、ボタンをクリックすると、アプリがシャットダウンしたTextViewの中に存在する任意の値なしに起因するcoordinates.Butの多数の値に閉じていた場合

+0

応答ありがとう:) – Shourya

関連する問題