IllegalStateException:无法使用Android执行活动的方法
当我按下按钮(名为“当前位置”)时,它应该在文本视图(名为“tvAddress”)上显示当前地址,同时应该在地图上放置一个标记。但它并没有像我预期的那样工作。它给了我错误。错误如下 错误为:IllegalStateException:无法使用Android执行活动的方法,android,Android,当我按下按钮(名为“当前位置”)时,它应该在文本视图(名为“tvAddress”)上显示当前地址,同时应该在地图上放置一个标记。但它并没有像我预期的那样工作。它给了我错误。错误如下 错误为: 02-05 23:37:22.429: E/AndroidRuntime(20293): FATAL EXCEPTION: main 02-05 23:37:22.429: E/AndroidRuntime(20293): java.lang.IllegalStateException: Could not
02-05 23:37:22.429: E/AndroidRuntime(20293): FATAL EXCEPTION: main
02-05 23:37:22.429: E/AndroidRuntime(20293): java.lang.IllegalStateException: Could not execute method of the activity
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.view.View$1.onClick(View.java:3680)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.view.View.performClick(View.java:4191)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.view.View$PerformClick.run(View.java:17229)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.os.Handler.handleCallback(Handler.java:615)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.os.Looper.loop(Looper.java:137)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.app.ActivityThread.main(ActivityThread.java:4960)
02-05 23:37:22.429: E/AndroidRuntime(20293): at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293): at java.lang.reflect.Method.invoke(Method.java:511)
02-05 23:37:22.429: E/AndroidRuntime(20293): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-05 23:37:22.429: E/AndroidRuntime(20293): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-05 23:37:22.429: E/AndroidRuntime(20293): at dalvik.system.NativeStart.main(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293): Caused by: java.lang.reflect.InvocationTargetException
02-05 23:37:22.429: E/AndroidRuntime(20293): at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293): at java.lang.reflect.Method.invoke(Method.java:511)
02-05 23:37:22.429: E/AndroidRuntime(20293): at android.view.View$1.onClick(View.java:3675)
02-05 23:37:22.429: E/AndroidRuntime(20293): ... 11 more
02-05 23:37:22.429: E/AndroidRuntime(20293): Caused by: java.lang.NullPointerException
02-05 23:37:22.429: E/AndroidRuntime(20293): at com.mamun.tasktest.MapActivity.marker(MapActivity.java:129)
02-05 23:37:22.429: E/AndroidRuntime(20293): ... 14 more
MapActivity.java
package com.mamun.tasktest;
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapActivity extends Activity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {
private LocationManager manager;
private TextView tvAddress;
private Button btncurrent;
private LocationClient locationClient;
private GoogleMap googleMap;
private MapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
manager = (LocationManager) getSystemService(LOCATION_SERVICE);
tvAddress = (TextView) findViewById(R.id.tvaddress);
btncurrent= (Button)findViewById(R.id.btncurrent);
super.onCreate(savedInstanceState);
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
setContentView(R.layout.map);
}
else if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("GPS is currently disabled");
builder.setMessage("Please enable GPS to use this application.\nWould you like to enable GPS?");
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(i);
setContentView(R.layout.map);
mapFragment = (MapFragment) getFragmentManager().findFragmentById(
R.id.maps);
googleMap = mapFragment.getMap();
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.create().show();
}
locationClient = new LocationClient(this, this, this);
}
public void marker(View v)
{
// add marker
Location currentLocation = locationClient.getLastLocation();
double lat = currentLocation.getLatitude();
double lng = currentLocation.getLongitude();
MarkerOptions options = new MarkerOptions()
.position(new LatLng(lat, lng))
.title("I am here")
.snippet("This is my current location")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
if (googleMap != null) {
googleMap.addMarker(options);
} else {
Toast.makeText(getApplicationContext(), "Map is null",
Toast.LENGTH_LONG).show();
}
Geocoder geocoder = new Geocoder(this);
try {
ArrayList<Address> addresses = (ArrayList<Address>) geocoder
.getFromLocation(currentLocation.getLatitude(),
currentLocation.getLongitude(), 5);
Address addr = addresses.get(0);
tvAddress.setText(addr.getAddressLine(0) + "-"
+ addr.getAdminArea() + "-" + addr.getCountryName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
locationClient.connect();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
locationClient.disconnect();
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
@Override
public void onConnectionFailed(ConnectionResult result) {
// TODO Auto-generated method stub
}
@Override
public void onConnected(Bundle connectionHint) {
}
@Override
public void onDisconnected() {
// TODO Auto-generated method stub
}
}
package com.mamun.tasktest;
导入java.io.IOException;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.location.Address;
导入android.location.Geocoder;
导入android.location.location;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.provider.Settings;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.GooglePlayServicesClient;
导入com.google.android.gms.location.LocationClient;
导入com.google.android.gms.location.LocationListener;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.MapFragment;
导入com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
导入com.google.android.gms.maps.model.BitmapDescriptorFactory;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.Marker;
导入com.google.android.gms.maps.model.MarkerOptions;
公共类MapActivity扩展了活动实现
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,LocationListener{
私人场所经理;
私有文本视图地址;
专用按钮BTN电流;
私人场所客户场所客户;
私人谷歌地图谷歌地图;
私有MapFragment-MapFragment;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
manager=(位置管理器)getSystemService(位置服务);
tvAddress=(TextView)findViewById(R.id.tvAddress);
btncurrent=(按钮)findViewById(R.id.btncurrent);
super.onCreate(savedInstanceState);
if(manager.isProviderEnabled(LocationManager.GPS\U提供程序)){
setContentView(R.layout.map);
}
如果(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER))已启用,则为else{
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setTitle(“GPS当前已禁用”);
setMessage(“请启用GPS以使用此应用程序。\n是否启用GPS?”);
builder.setPositiveButton(“是”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
意向i=新意向(
设置。操作(位置(源设置);
星触觉(i);
setContentView(R.layout.map);
mapFragment=(mapFragment)getFragmentManager().findFragmentById(
R.id.maps);
googleMap=mapFragment.getMap();
}
});
builder.setNegativeButton(“否”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
完成();
}
});
builder.create().show();
}
locationClient=新locationClient(这个,这个,这个);
}
公共空白标记(视图v)
{
//添加标记
Location currentLocation=locationClient.getLastLocation();
双纬度=currentLocation.getLatitude();
double lng=currentLocation.getLongitude();
MarkerOptions选项=新的MarkerOptions()
.位置(新LatLng(lat,lng))
.title(“我在这里”)
.snippet(“这是我的当前位置”)
.图标(位图描述符工厂)
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
if(谷歌地图!=null){
googleMap.addMarker(选项);
}否则{
Toast.makeText(getApplicationContext(),“映射为空”,
Toast.LENGTH_LONG).show();
}
Geocoder Geocoder=新的Geocoder(本);
试一试{
ArrayList地址=(ArrayList)地理编码器
.getFromLocation(currentLocation.getLatitude(),
currentLocation.getLongitude(),5);
地址addr=addresses.get(0);
tvAddress.setText(地址getAddressLine(0)+“-”
+addr.getAdminArea()+“-”+addr.getCountryName());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
@凌驾
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
locationClient.connect();
}
@凌驾
受保护的void onPause(){
//TODO自动生成的方法存根
super.onPause();
locationClient.disconnect();
}
@凌驾
已更改位置上的公共无效(位置){
//TODO自动生成的方法存根
}
@凌驾
连接失败的公共void(连接结果){
//TODO自动生成的方法存根
}
@凌驾
未连接的公共无效(捆绑连接提示){
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/etSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Search your location" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/tvaddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btncurrent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="marker"
android:text="Current Location"
android:layout_marginLeft="98dp" />
<Button
android:id="@+id/btnsave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/map_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/maps"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
</FrameLayout>
</LinearLayout>