2017-03-14 87 views
0

我有一个LocationActivity可以从Google API获取GPS位置。我需要在我的MainActivity中使用这些数据。我正在使用startActivityForResult来完成此操作,但是当我尝试访问数据时,我的LocationActivity从不执行,并且我的应用程序崩溃。startActivityForResult没有开始第二个活动

这里是从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); 

    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

@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清单:

<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活动/意图文档,但一直未能解决这个问题。任何帮助/建议,将不胜感激。我曾尝试仅提供相关信息。谢谢!

+0

发布你的logcat – sasikumar

+1

你不能期望在'startActivityForResult'之后立即得到结果。结果将在'onActivityResult'中被接收。 Android基础知识 – SMR

+0

@SMR说你不能在'startActivityForResult'之后立即得到结果。你需要在'onActivityResult'中获得你的纬度,所以当你接收到纬度时,'onActivityResult'方法中的其他代码会再次请求纬度。 – Shailesh

回答

0

你不能使用

byte[] data = latitude.getBytes(); 

在活动时间开始纬度将是无效

更新与此代码。

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

我的app永远不会进入onActivityResult。我已经尝试了所有人提出的建议,并且仍然得到相同的结果。 – jimmysarge9

0

它不是看起来很不错。一旦它被连接到定位服务,它看起来像你完成第二个活动。然后它会杀了你的第二个活动,并再次重新开始你的第一个活动。在这里,你需要改变逻辑LocationActivity

0

你可以试着改变LocationActivity.java

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

谢谢你的回应,但这并没有解决我的问题。 – jimmysarge9

0

问题是LocationActivity类上线 的setResult(LocationActivity.RESULT_OK,returnIntent);

其实你需要 setResult(GPS_DATA_REQUEST,returnIntent);

+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()'方法。我认为你做错了什么,因为上面的代码是有效的。所以请告诉我你的过程的实际流程。 – Shailesh

0

移动代码LocationActivity从onConnected到在onStart。 startActivityForResult调用onStart生命周期方法。

相关问题