2016-12-07 438 views
2

我有這樣的活動,我得到Saied如何java.lang.AbstractMethodError崩潰:沒有實現抽象方法我怎樣才能解決呢? 很喜歡我做的東西沒有落實活動impelements但我不知道如何解決它! 我面對這個問題很多次,我不知道如何解決它!如何解決java.lang.AbstractMethodError:抽象方法沒有實現

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) { 
    }}} 

的錯誤是:

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

你能後的錯誤吧。 –

+0

AbstractMethodError引發哪種方法訪問?你可以檢查日誌 – Vinodh

+0

你正在使用接口,所以你必須impliment接口抽象方法 –

回答

0

做一個乾淨的項目定了類似的問題對我來說;它也可能適用於你。下面是錯誤有:

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) 
0

我也有類似的問題太多。在我來說,我不得不改變如下:

  • 編譯 'com.squareup.retrofit2:改造:2.0.0-β3'
  • 編譯「com.squareup.retrofit2:變流器GSON:2.0.0 -beta3'
  • 編譯 'com.google.code.gson:GSON:2.6.1'
  • 編譯 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
  • 編譯「com.squareup。 okhttp3:日誌記錄攔截:3.3.1'

於:

  • 編譯 'com.squareup.retrofit2:改造:2.1.0'
  • 編譯 'com.squareup.retrofit2:變流器GSON:2.1.0'
  • 編譯「com.google。 code.gson:GSON:2.6.1'
  • 編譯 'com.squareup.okhttp3:okhttp:3.3.1'
  • 編譯 'com.squareup.okhttp3:測井攔截:3.3.1'

它幫助我避免錯誤。