how to fix java.lang.AbstractMethodError: abstract method not implemented

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

I have this activity and i got the crash saied java.lang.AbstractMethodError: abstract method not implemented how can i solve it? it is like i make the activity impelements of something not implemented but i don't know how to fix it! i faced this problem for many times and i don't know how to solve it!!

public class SelectEndPoint extends AppCompatActivity implements  OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener { private GoogleMap mMap; private GoogleApiClient mGoogleApiClient; private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; private static String TAG = "MAP LOCATION"; Context mContext; TextView mLocationMarkerText; private LatLng mCenterLatLong;   /**  * Receiver registered with this activity to get the response from FetchAddressIntentService.  */ private AddressResultReceiver mResultReceiver; /**  * The formatted location address.  */ protected String mAddressOutput; protected String mAreaOutput; protected String mCityOutput; protected String mStateOutput; EditText mLocationAddress; TextView mLocationText; private static final int REQUEST_CODE_AUTOCOMPLETE = 1; Toolbar mToolbar;   @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.select_end_point);     mContext = this;     // Obtain the SupportMapFragment and get notified when the map is ready to be used.     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()             .findFragmentById(R.id.map);      mLocationMarkerText = (TextView) findViewById(R.id.locationMarkertext);      mToolbar = (Toolbar) findViewById(R.id.toolbar);     setSupportActionBar(mToolbar);     getSupportActionBar().setDisplayShowHomeEnabled(true);      getSupportActionBar().setTitle(getResources().getString(R.string.app_name));          mapFragment.getMapAsync(this);     mResultReceiver = new AddressResultReceiver(new Handler());      if (checkPlayServices()) {         // If this check succeeds, proceed with normal processing.         // Otherwise, prompt user to get valid Play Services APK.         if (!AppUtils.isLocationEnabled(mContext)) {             // notify user             AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);             dialog.setMessage("Location not enabled!");             dialog.setPositiveButton("Open location settings", new DialogInterface.OnClickListener() {                 @Override                 public void onClick(DialogInterface paramDialogInterface, int paramInt) {                     Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);                     startActivity(myIntent);                 }             });             dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {                  @Override                 public void onClick(DialogInterface paramDialogInterface, int paramInt) {                     // TODO Auto-generated method stub                  }             });             dialog.show();         }         buildGoogleApiClient();     } else {         Toast.makeText(mContext, "Location not supported in this device", Toast.LENGTH_SHORT).show();     }  }   /**  * Manipulates the map once available.  * This callback is triggered when the map is ready to be used.  * This is where we can add markers or lines, add listeners or move the camera. In this case,  * we just add a marker near Sydney, Australia.  * If Google Play services is not installed on the device, the user will be prompted to install  * it inside the SupportMapFragment. This method will only be triggered once the user has  * installed Google Play services and returned to the app.  */ @Override public void onMapReady(GoogleMap googleMap) {     Log.d(TAG, "OnMapReady");     mMap = googleMap;      mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {         @Override         public void onCameraChange(CameraPosition cameraPosition) {             Log.d("Camera postion change" + "", cameraPosition + "");             mCenterLatLong = cameraPosition.target;               mMap.clear();              try {                  Location mLocation = new Location("");                 mLocation.setLatitude(mCenterLatLong.latitude);                 mLocation.setLongitude(mCenterLatLong.longitude);                  startIntentService(mLocation);                 mLocationMarkerText.setText("Lat : " + mCenterLatLong.latitude + "," + "Long : " + mCenterLatLong.longitude);              } catch (Exception e) {                 e.printStackTrace();             }         }     });     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {         // TODO: Consider calling         //    ActivityCompat#requestPermissions         // here to request the missing permissions, and then overriding         //   public void onRequestPermissionsResult(int requestCode, String[] permissions,         //                                          int[] grantResults)         // to handle the case where the user grants the permission. See the documentation         // for ActivityCompat#requestPermissions for more details.         return;     }    //mMap.setMyLocationEnabled(true);   //        mMap.getUiSettings().setMyLocationButtonEnabled(true);   //  //        // Add a marker in Sydney and move the camera   //        LatLng sydney = new LatLng(-34, 151);  //        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); //        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); }  @Override public void onConnected(Bundle bundle) {     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {         // TODO: Consider calling         //    ActivityCompat#requestPermissions         // here to request the missing permissions, and then overriding         //   public void onRequestPermissionsResult(int requestCode, String[] permissions,         //                                          int[] grantResults)         // to handle the case where the user grants the permission. See the documentation         // for ActivityCompat#requestPermissions for more details.         return;     }     Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(             mGoogleApiClient);     if (mLastLocation != null) {         changeMap(mLastLocation);         Log.d(TAG, "ON connected");      } else         try {             LocationServices.FusedLocationApi.removeLocationUpdates(                     mGoogleApiClient, this);          } catch (Exception e) {             e.printStackTrace();         }     try {         LocationRequest mLocationRequest = new LocationRequest();         mLocationRequest.setInterval(10000);         mLocationRequest.setFastestInterval(5000);         mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);         LocationServices.FusedLocationApi.requestLocationUpdates(                 mGoogleApiClient, mLocationRequest, this);      } catch (Exception e) {         e.printStackTrace();     }  }  @Override public void onConnectionSuspended(int i) {     Log.i(TAG, "Connection suspended");     mGoogleApiClient.connect(); }  @Override public void onLocationChanged(Location location) {     try {         if (location != null)             changeMap(location);         LocationServices.FusedLocationApi.removeLocationUpdates(                 mGoogleApiClient, this);      } catch (Exception e) {         e.printStackTrace();     } }  @Override public void onConnectionFailed(ConnectionResult connectionResult) {  }   protected synchronized void buildGoogleApiClient() {     mGoogleApiClient = new GoogleApiClient.Builder(this)             .addConnectionCallbacks(this)             .addOnConnectionFailedListener(this)             .addApi(LocationServices.API)             .build(); }  @Override protected void onStart() {     super.onStart();     try {         mGoogleApiClient.connect();      } catch (Exception e) {         e.printStackTrace();     } }  @Override protected void onStop() {     super.onStop();     try {      } catch (RuntimeException e) {         e.printStackTrace();     }     if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {         mGoogleApiClient.disconnect();     } }  private boolean checkPlayServices() {     int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);     if (resultCode != ConnectionResult.SUCCESS) {         if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {             GooglePlayServicesUtil.getErrorDialog(resultCode, this,                     PLAY_SERVICES_RESOLUTION_REQUEST).show();         } else {             //finish();         }         return false;     }     return true; }  private void  changeMap(Location location) {      Log.d(TAG, "Reaching map" + mMap);       if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {         // TODO: Consider calling         //    ActivityCompat#requestPermissions         // here to request the missing permissions, and then overriding         //   public void onRequestPermissionsResult(int requestCode, String[] permissions,         //                                          int[] grantResults)         // to handle the case where the user grants the permission. See the documentation         // for ActivityCompat#requestPermissions for more details.         return;     }      // check if map is created successfully or not     if (mMap != null) {         mMap.getUiSettings().setZoomControlsEnabled(false);         LatLng latLong;           latLong = new LatLng(location.getLatitude(), location.getLongitude());          CameraPosition cameraPosition = new CameraPosition.Builder()                 .target(latLong).zoom(19f).tilt(70).build();          mMap.setMyLocationEnabled(true);         mMap.getUiSettings().setMyLocationButtonEnabled(true);         mMap.animateCamera(CameraUpdateFactory                 .newCameraPosition(cameraPosition));          mLocationMarkerText.setText("Lat : " + location.getLatitude() + "," + "Long : " + location.getLongitude());         startIntentService(location);       } else {         Toast.makeText(getApplicationContext(),                 "Sorry! unable to create maps", Toast.LENGTH_SHORT)                 .show();     }  }   /**  * Receiver for data sent from FetchAddressIntentService.  */ class AddressResultReceiver extends ResultReceiver {     public AddressResultReceiver(Handler handler) {         super(handler);     }      /**      * Receives data sent from FetchAddressIntentService and updates the UI in MainActivity.      */     @Override     protected void onReceiveResult(int resultCode, Bundle resultData) {          // Display the address string or an error message sent from the intent service.         mAddressOutput = resultData.getString(AppUtils.LocationConstants.RESULT_DATA_KEY);          mAreaOutput = resultData.getString(AppUtils.LocationConstants.LOCATION_DATA_AREA);          mCityOutput = resultData.getString(AppUtils.LocationConstants.LOCATION_DATA_CITY);         mStateOutput = resultData.getString(AppUtils.LocationConstants.LOCATION_DATA_STREET);          displayAddressOutput();          // Show a toast message if an address was found.         if (resultCode == AppUtils.LocationConstants.SUCCESS_RESULT) {             //  showToast(getString(R.string.address_found));           }       }  }  /**  * Updates the address in the UI.  */ protected void displayAddressOutput() {     //  mLocationAddressTextView.setText(mAddressOutput);     try {         if (mAreaOutput != null)             // mLocationText.setText(mAreaOutput+ "");              mLocationAddress.setText(mAddressOutput);         //mLocationText.setText(mAreaOutput);     } catch (Exception e) {         e.printStackTrace();     } }  /**  * Creates an intent, adds location data to it as an extra, and starts the intent service for  * fetching an address.  */ protected void startIntentService(Location mLocation) {     // Create an intent for passing to the intent service responsible for fetching the address.     Intent intent = new Intent(this, FetchAddressIntentService.class);      // Pass the result receiver as an extra to the service.     intent.putExtra(AppUtils.LocationConstants.RECEIVER, mResultReceiver);      // Pass the location data as an extra to the service.     intent.putExtra(AppUtils.LocationConstants.LOCATION_DATA_EXTRA, mLocation);      // Start the service. If the service isn't already running, it is instantiated and started     // (creating a process for it if needed); if it is running then it remains running. The     // service kills itself automatically once all intents are processed.     startService(intent); }         /* private void openAutocompleteActivity() {     try {         // The autocomplete activity requires Google Play Services to be available. The intent         // builder checks this and throws an exception if it is not the case.         Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)                 .build(this);         startActivityForResult(intent, REQUEST_CODE_AUTOCOMPLETE);     } catch (GooglePlayServicesRepairableException e) {         // Indicates that Google Play Services is either not installed or not up to date. Prompt         // the user to correct the issue.         GoogleApiAvailability.getInstance().getErrorDialog(this, e.getConnectionStatusCode(),                 0 /* requestCode *//*).show();     } catch (GooglePlayServicesNotAvailableException e) {         // Indicates that Google Play Services is not available and the problem is not easily         // resolvable.    /*     String message = "Google Play Services is not available: " +                 GoogleApiAvailability.getInstance().getErrorString(e.errorCode);          Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();     } }  */      /**     * Called after the autocomplete activity has finished to return its   result.  */ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);      // Check that the result was from the autocomplete widget.     if (requestCode == REQUEST_CODE_AUTOCOMPLETE) {         if (resultCode == RESULT_OK) {    }}} 

the error is :

java.lang.AbstractMethodError: abstract method not implemented                                                                  at com.google.android.gms.common.api.Api$zza.zza(Unknown Source)                                                                  at com.google.android.gms.common.api.GoogleApiClient$Builder.zza(Unknown Source)                                                                  at com.google.android.gms.common.api.GoogleApiClient$Builder.zzarg(Unknown Source)                                                                  at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source)                                                                  at com.wneet.white.services.SelectEndPoint.buildGoogleApiClient(SelectEndPoint.java:252)                                                                  at com.wneet.white.services.SelectEndPoint.onCreate(SelectEndPoint.java:118)                                                                  at android.app.Activity.performCreate(Activity.java:5581)                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2483)                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2578)                                                                  at android.app.ActivityThread.access$900(ActivityThread.java:170)                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)                                                                  at android.os.Looper.loop(Looper.java:146)                                                                  at android.app.ActivityThread.main(ActivityThread.java:5727)                                                                  at java.lang.reflect.Method.invokeNative(Native Method)                                                                  at java.lang.reflect.Method.invoke(Method.java:515)                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)                                                                  at dalvik.system.NativeStart.main(Native Method) 

回答1:

I had a similar problem too. In my case I had to change the following:

  • compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
  • compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
  • compile 'com.google.code.gson:gson:2.6.1'
  • compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
  • compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'

to:

  • compile 'com.squareup.retrofit2:retrofit:2.1.0'
  • compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  • compile 'com.google.code.gson:gson:2.6.1'
  • compile 'com.squareup.okhttp3:okhttp:3.3.1'
  • compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'

it helped me to avoid the error.



回答2:

Doing a clean of the project fixed a similar problem for me; it might work for you, too. Here is the error that I had:

FATAL EXCEPTION: IntentService[SyncService]                   Process: ie.eureka.moveitmobileandroid, PID: 22234                   java.lang.AbstractMethodError: abstract method "java.util.List .manager.interfaces.WalkAroundCheckAnswers_YesNoManagerInterface.getListOfWalkAroundCheckAnswers_YesNoFromAttempt(ie.eureka.moveitmobileandroid.data.dao.WalkAroundCheckAttempt)"                       at ie.eureka.moveitmobileandroid.services.networksync.SyncWalkAroundCheckAttempts.syncWithDatabase(SyncWalkAroundCheckAttempts.java:94)                       at ie.eureka.moveitmobileandroid.services.networksync.SyncWalkAroundCheckAttempts.sync(SyncWalkAroundCheckAttempts.java:57)                       at ie.eureka.moveitmobileandroid.services.SyncService.onHandleIntent(SyncService.java:32)                       at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)                       at android.os.Handler.dispatchMessage(Handler.java:102)                       at android.os.Looper.loop(Looper.java:148)                       at android.os.HandlerThread.run(HandlerThread.java:61) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!