2017-03-14 7 views
0

私はGoogle APIからGPS位置情報を取得するLocationActivityを持っています。私はMainActivityでこのデータを使用する必要があります。私はこれを達成するためにstartActivityForResultを使用していますが、私のLocationActivityは実行されず、データにアクセスしようとするとアプリケーションがクラッシュします。ここでstartActivityForResultは第2アクティビティを開始していません

は、IS MainActivity.javaからいくつかの関連するスニペットです:

@Override 
public void onConnected(Bundle bundle) { 
    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this); 


    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 
    if (mLastLocation != null) { 
     latitude = String.valueOf(mLastLocation.getLatitude()); 
    } 

    Intent returnIntent = new Intent(); 
    returnIntent.putExtra("latitude",latitude); 
    setResult(LocationActivity.RESULT_OK, returnIntent); 
    finish(); 
} 

そして、私のAndroidのマニフェスト:

public void onUpdateClick(View v) { //button click handler which starts the process 

    Intent i = new Intent(MainActivity.this, LocationActivity.class); 
    startActivityForResult(i, GPS_DATA_REQUEST); 

    byte[] data = latitude.getBytes(); //app crashes here because latitude is null 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == GPS_DATA_REQUEST) { 
     if(resultCode == Activity.RESULT_OK){ 
      latitude=data.getStringExtra("latitude"); 
     } 
    } 
} 

そしてここでは、LocationActivity.javaから関連スニペットです

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/label_broadcast"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".LocationActivity"> 
    </activity> 
</application> 

私は多くのスレッドとAndroidアクティビティ/インテントドキュメントを参照しましたが、これを解決できませんでした。どんな助力/提案も感謝します。私は関連情報のみを提供しようとしました。ありがとう!あなたが活動の時

byte[] data = latitude.getBytes(); 

を使用カント

+0

logcat – sasikumar

+1

を投稿すると、 'startActivityForResult'の直後に結果を得ることはできません。結果は 'onActivityResult'で受信されます。 Androidの基本 – SMR

+0

@SMR say 'startActivityForResult'の直後に結果を得ることはできません。あなたは 'onActivityResult'であなたの緯度を受け取る必要があります。他のコードは' onActivityResult'メソッドで行います。もう一度緯度を受け取ったら、もう一度緯度を求めてください。 – Shailesh

答えて

0

は緯度がこれであなたのコードを更新

nullになり始めます。

public void onUpdateClick(View v) { //button click handler which starts the process 

    Intent i = new Intent(MainActivity.this, LocationActivity.class); 
    startActivityForResult(i, GPS_DATA_REQUEST); 


} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == GPS_DATA_REQUEST) { 
     if(resultCode == Activity.RESULT_OK){ 
      latitude=data.getStringExtra("latitude"); 
byte[] data = latitude.getBytes(); 
     } 
    } 
} 
+0

私のアプリはonActivityResultを決して入力しません。誰もが与えてくれたすべての提案を試してみましたが、まだ同じ結果が得られています。 – jimmysarge9

0

あなたが第二の活動を終えるように見えるロケーションサービスに接続されると、それはそれはあなたの第二の活動を殺して、もう一度最初の活動を再開します..よさそうではありません。ここで、あなたはあなたが

Intent returnIntent = new Intent(LocationActivity.this,MainActivity.class); 
returnIntent.putExtra("latitude",latitude); 
setResult(LocationActivity.RESULT_OK, returnIntent); 
0

にロジックを変更する必要があります。

実際には が必要です。setResult(GPS_DATA_REQUEST、returnIntent);

+0

ありがとう、私の問題は解決しませんでした。 – jimmysarge9

0

問題はライン setResult(LocationActivity.RESULT_OK、returnIntent)にLocationActivityクラスであるLocationActivity.javaを変更しようとすることができLocationActivity

+0

ありがとうございますが、これはうまくいきませんでした。 – jimmysarge9

0

これを試すことができます。私はあなたが解決策を得ることを願っています。 MainActivity.java

public void onUpdateClick(View v) { //button click handler which starts the process 

    Intent i = new Intent(MainActivity.this, LocationActivity.class); 
    startActivityForResult(i, GPS_DATA_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == GPS_DATA_REQUEST) { 
     if(resultCode == Activity.RESULT_OK){ 
      latitude=data.getStringExtra("latitude"); 

      if(latitude != null) 
       byte[] data = latitude.getBytes(); 
      else 
       //do request again for latitude. 
     } 
    } 
} 

はあなたがLocationActivity.java

Intent returnIntent = new Intent(LocationActivity.this, MainActivity.class); 
returnIntent.putExtra("latitude",latitude); 
setResult(RESULT_OK, returnIntent); 
+0

ありがとうございます。私のアプリはonActivityResultに決して入らない。これはなぜでしょうか? – jimmysarge9

+0

私の更新された答えを確認してください。私は 'finish() 'メソッドを削除しました。私は上記のコードはfor.Soあなたのプロセスの実際の流れを教えてください働いているので、あなたが何か間違っていると思う。 – Shailesh

0

に結果を設定しONSTARTにonConnectedからLocationActivityにコードを移動する必要があります。 startActivityForResultは、onStartライフサイクルメソッドを呼び出します。

関連する問題