0

わかりましたので、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の完全な初心者です。これは実際には私の最初のアプリなので、回答を徹底的にしてください.

4

1 に答える 1

0

私は同じ問題を抱えていて、それを修正することができました。

google-play-services_lib フォルダーをインポートした後、私は動作し始めました。ビデオ担当者は、10 分前後でそれをインポートする方法を示しています: https://www.youtube.com/watch?v=awX5T-EwLPc

于 2014-04-09T22:57:32.093 に答える