2012-05-29 36 views
4

從android市場我收到以下崩潰報告。我在測試我的應用程序時沒有找到。崩潰發生在PasswordActivity類中。我正在發送堆棧跟蹤和代碼。任何人都可以告訴我發生撞車事件的原因以及爲何發生這種情況IncompatibleClassChangeError:接口未實現

堆棧跟蹤

java.lang.IncompatibleClassChangeError: interface not implemented 
at in.plackal.lovecyclesfree.PasswordActivity.onCreate(PasswordActivity.java) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4627) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
at dalvik.system.NativeStart.main(Native Method) 

我的代碼

public class PasswordActivity extends Activity implements Utilities 
{ 
//Private Variables 
private EditText m_passwrdEditText; 

private TextView m_passwrdErrorText; 

private Resources m_res; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    //Setup the activity 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 


    if(dm.widthPixels == 320 && dm.heightPixels == 480) 
    { 
     setContentView(R.layout.password_activity_hvga); 
    } 
    else 
    { 
     setContentView(R.layout.password_activity); 
    } 

    GoogleAnalyticsTracker tracker = GoogleAnalyticsTracker.getInstance();; 
    tracker.startNewSession("UA-xxxxxxx-1", this); 
    tracker.trackPageView("Password"); 
    tracker.dispatch(); 

    m_res = getResources(); 

    final Typeface face = Typeface.createFromAsset(getAssets(), "fonts/Cicle Semi.otf");  

    m_passwrdErrorText = (TextView) findViewById(R.id.txt_error_message); 
    m_passwrdErrorText.setTypeface(face); 

    m_passwrdEditText = (EditText) findViewById(R.id.txt_edit_passwrd); 
    m_passwrdEditText.setOnClickListener(new OnClickListener() 
    {   
     @Override 
     public void onClick(View v) 
     { 
      m_passwrdEditText.setHint(""); 
      m_passwrdEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
      m_passwrdEditText.setTypeface(face); 
     } 
    }); 

    m_passwrdEditText.setTypeface(face); 

    m_passwrdEditText.setOnKeyListener(new OnKeyListener() 
    { 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     {   
      if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) 
      {        
       String strPassEntered = m_passwrdEditText.getText().toString(); 
       String strPassSaved = CycleManager.getSingletonObject().getPassWord(); 
       m_passwrdEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
       if (strPassSaved.equals(strPassEntered) || strPassEntered.equals(DEFAULT_PASSWORD)) 
       { 
        Intent intent = new Intent(PasswordActivity.this, ActivityManager.class); 
        startActivity(intent); 
        PasswordActivity.this.finish(); 
       } 
       else 
       { 
        m_passwrdErrorText.setText(m_res.getString(R.string.passwrd_error_text)); 
        m_passwrdEditText.setFocusable(true);           
       } 
      } 

      else if(keyCode == KeyEvent.KEYCODE_DEL) 
      { 
       m_passwrdEditText.setHint(m_res.getString(R.string.passwrd_hint_text)); 
       m_passwrdErrorText.setText(""); 
      } 

      m_passwrdEditText.setTypeface(face); 
      return false; 
     } 
    }); 
} 
} 
+0

@AndroidCoder ..任何解決方案?請分享.. –

回答

0

調查你的界面,實用程序

public class PasswordActivity extends Activity implements Utilities 

做什麼樣的功能,你需要實現使用此interfa CE?

Eclipse中往往有這些問題

+0

在我的界面中沒有聲明要實現的函數。我的實用程序接口只包含最終變量..所以我需要這個最終變量,我實現了這個接口 – AndroidDev

+0

如果你刪除接口會發生什麼? –

+0

如果我刪除接口,那麼我如何使用在我的實用程序界面中聲明的變量...更多的崩潰是在Android市場中發現的..在測試我沒有顯示任何崩潰...一個更多的崩潰我有發現即java.lang.NullPointerException 在android.widget.TextView.onTouchEvent它是因爲使用setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)becoz它發生在一些設備只 – AndroidDev

0

的quickfix一定是某種安裝故障的,重新安裝可能會幫助,但沒有辦法,你可以告訴用戶,我害怕。

1

我看到了2個關於Play商店的報告,IncompatibleClassChangeError: interface not implementedService類的例外,日誌消息中包含onStartCommand(Unknown Source)。我使用Eclipse來構建發佈的應用程序。

幸運的是,我的室友的電話遇到了同樣的異常。通過閱讀以下鏈接:What causes java.lang.IncompatibleClassChangeError?,我固定它的方式(至少在我室友的手機上)是通過將android-support-v4.jar添加到項目的「libs」文件夾並添加到構建路徑。然後在「訂單和導出」下的項目「Java構建路徑」部分,導出新添加的jar文件,並刪除用於導出「Android專用庫」的選擇。

0

的方法是很長,堆棧跟蹤不具有行號(你刪除它?)

其中一個方法的調用onCreate是通過未上實現的接口設備您收到錯誤報告。這聽起來很奇怪。

問題是,當你編譯代碼時,它使用了另一個版本(可能更新),該版本有一個實現接口的類。然而,implements子句卻是在您的目標版本(您編譯的版本)和運行設備的版本之間添加的(舊版本)。該設備上的.class文件沒有該接口的implements,但您的代碼正試圖調用它。這裏有一個例子:

// data is declared as T, and the class is generic with <T extends Closeable> 
// ParcelFileDescriptor implements Closeable, but only above 4.1.1_r1 
data.close(); 
this  // 3 7:aload_0   
.data // 4 8:getfield  #18 <Field Closeable data> 
.close() // 5 11:invokeinterface #19 <Method void Closeable.close()> 
// so if you compiled the above on 4.4 and use it on 3.0 it should throw the same error 
// when the data variable contains a ParcelFileDescriptor instance 

您可以嘗試消除可能的線路:

忽略內部類,因爲堆棧將是不一致的,而忽略了構造和基本操作:

super.onCreate(savedInstanceState); 
this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
getWindowManager().getDefaultDisplay().getMetrics(dm); 
setContentView(R.layout.password_activity_hvga); 
setContentView(R.layout.password_activity); 

GoogleAnalyticsTracker tracker = GoogleAnalyticsTracker.getInstance();; 
tracker.startNewSession("UA-xxxxxxx-1", this); 
tracker.trackPageView("Password"); 
tracker.dispatch(); 

m_res = getResources(); 

final Typeface face = Typeface.createFromAsset(getAssets(), "fonts/Cicle Semi.otf");  

m_passwrdErrorText = (TextView) findViewById(R.id.txt_error_message); 
m_passwrdErrorText.setTypeface(face); 
m_passwrdEditText = (EditText) findViewById(R.id.txt_edit_passwrd); 
m_passwrdEditText.setOnClickListener(...); 
m_passwrdEditText.setTypeface(face); 
m_passwrdEditText.setOnKeyListener(...); 

從剩餘的您可以消除this調用和鍵入(TextView/EditText非接口)調用,這會導致:

getWindowManager().getDefaultDisplay().getMetrics(dm); 

GoogleAnalyticsTracker tracker = GoogleAnalyticsTracker.getInstance();; 
tracker.startNewSession("UA-xxxxxxx-1", this); 
tracker.trackPageView("Password"); 
tracker.dispatch(); 

final Typeface face = Typeface.createFromAsset(getAssets(), "fonts/Cicle Semi.otf");  

也可能是淘汰者之一爲好。最好的方法是在具有與報告設備相同版本的仿真器或實際設備上進行重現,並查看哪一行,但如果這不可行,則可以嘗試反編譯.class文件並在此方法中查找invokeinterface指令,將把它縮小得非常好。

0

在我的情況是:

class MyThread<T extends Closeable> extends Thread { 
} 
用作 MyThread<DatagramSocket>

:前19 在Android API水平DatagramSocket不是CloseableRead more.