わかりましたので、Google サービス (位置情報サービス) を使用してユーザーの現在地を見つけるアプリを作成しています。メインのアクティビティから次のアクティビティに移るときにエラーが発生しますが、その理由がよくわかりません。少し前に動作していましたが、何かを変更したため (覚えていません)、動作しなくなりました。基本的に、メイン画面のスタート ボタンをクリックすると、プログラムがシャットダウンします。開始ボタンによって開始されるアクティビティは、ユーザーの現在位置を取得し、次にユーザーの現在位置と 5 つの設定位置との間の距離を見つけることになっています。次に、これらの距離を処理しました。
これが私のlogCatです:(本当に申し訳ありませんが、参加したばかりで写真を追加できません)
E/MoreInfoHPW_ViewGroup(20140): 親ビューは TextView ではありません E/MoreInfoHPW_ViewGroup(20140): 親ビューは TextView ではありません E/AndroidRuntime(20140): 致命的な例外: メイン E/AndroidRuntime(20140): プロセス: com.emma. unsaltedsights、PID: 20140 E/AndroidRuntime(20140): java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.emma.unsaltedsights/com.emma.unsaltedsights.PickLocation}: java.lang.NullPointerException
E/AndroidRuntime(20140): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282) で
E/AndroidRuntime(20140): android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
E/AndroidRuntime(20140):at android.app.ActivityThread.access$800(ActivityThread.java:157) E/AndroidRuntime(20140):at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
E/AndroidRuntime(20140):at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime(20140):at android.os.Looper.loop(Looper.java:157) E/AndroidRuntime(20140) : android.app.ActivityThread.main(ActivityThread.java:5293) で E/AndroidRuntime(20140): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で E/AndroidRuntime(20140): java.lang.reflect で.Method.invoke(Method.java:515) E/AndroidRuntime(20140): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1259) で
E/AndroidRuntime(20140): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) E/AndroidRuntime(20140): dalvik.system.NativeStart.main(ネイティブ メソッド) E/AndroidRuntime(20140) ): 原因: java.lang.NullPointerException E/AndroidRuntime(20140): com.emma.unsaltedsights.PickLocation.findingDistance(PickLocation.java:921) で
E/AndroidRuntime(20140): com.emma.unsaltedsights.PickLocation.onCreate(PickLocation.java:59) E/AndroidRuntime(20140): android.app.Activity.performCreate(Activity.java:5389) E/AndroidRuntime( 20140): android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) で
E/AndroidRuntime(20140): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246) で
E/AndroidRuntime(20140): ... 11 続き
これが私のMainActivityクラスです(開始画面):
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void launchApp(View view){
Intent intent = new Intent(this, PickLocation.class);
startActivity(intent);
)
}
これが私の PickLocation クラス (娘のアクティビティ) です。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isGooglePlay()){
setContentView(R.layout.pick_location);
setUp();
findingDistance();
setButtonsText(distances);
}
}
private void setUp(){
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
provider = lm.getBestProvider(new Criteria(), true);
if(provider == null ){
onProviderDisabled(provider);
}
//get current location
currentloc = lm.getLastKnownLocation(provider);
if(currentloc != null){
onLocationChanged(currentloc);
}
}
public void findingDistance(){
Location jis = createLocation("flp",-6.284172,106.789093); //double
Location lippo = createLocation("flp",-6.260516,106.811823);
Location senayan = createLocation("flp",-6.227877,106.797661);
Location gandaria = createLocation("flp",-6.245164, 106.782597);
Location ranch = createLocation("flp",-6.255405,106.811500);
disJ = currentloc.distanceTo(jis); //float
disL = currentloc.distanceTo(lippo);
disS = currentloc.distanceTo(senayan);
disG = currentloc.distanceTo(gandaria);
disR = currentloc.distanceTo(ranch);
intdisJ = (int) disJ;
intdisL = (int) disL;
intdisS = (int) disS;
intdisG = (int) disG;
intdisR = (int) disR;
distances = new Integer[5];
distances[0] = intdisJ;
distances[1] = intdisL;
distances[2] = intdisS;
distances[3] = intdisG;
distances[4] = intdisR;
}
private boolean isGooglePlay() { // Services Connected
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(status == ConnectionResult.SUCCESS){
return(true);
}else{
((Dialog) GooglePlayServicesUtil.getErrorDialog(status, this, 10)).show();
}
return(false);
}
@Override
public void onLocationChanged(Location location) {//I think this is the error source
currentloc = location;
}
私はAndroidの完全な初心者です。これは実際には私の最初のアプリなので、回答を徹底的にしてください.