2014-01-24 62 views
0

建立一個應用程序,將推動通知enabled.when我運行它在真正的設備應用程序崩潰開始讓我給你看我的代碼。 MainActivity.javaGCM在Android設備和應用程序崩潰

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.content.SharedPreferences; 
import static com.my.app.CommonUtilities.SENDER_ID; 
import android.util.Log; 
import android.widget.TextView; 
import com.google.android.gcm.GCMRegistrar; 
import com.my.app.R; 
    public class MainActivity extends Activity { 
     private String TAG = "** pushAndroidActivity **"; 
     private TextView mDisplay; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
    checkNotNull(SENDER_ID, "SENDER_ID"); 
    GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 
    setContentView(R.layout.activity_main); 
    mDisplay = (TextView) findViewById(R.id.display); 
    final String regId = GCMRegistrar.getRegistrationId(this); 
    Log.i(TAG, "registration id ===== "+regId); 
    if (regId.equals("")) { 
    GCMRegistrar.register(this, SENDER_ID); 
    } else { 
    Log.v(TAG, "Already registered"); 
    } 
    mDisplay.setText("ffffff"+regId); 
    } 

和外面的onCreate我有

private void checkNotNull(Object reference, String name) { 
     if (reference == null) { 
     throw new NullPointerException(
     getString(R.string.error_config, name)); 
     } 
     } 

     @Override 
     protected void onPause() { 
     super.onPause(); 
     GCMRegistrar.unregister(this); 
     } 

但是當我編譯和設備的應用程序運行它甚至加載MainActivity讓我在這裏發表的logcat前突然死機。

FATAL EXCEPTION: main 
java.lang.NoClassDefFoundError: com.google.android.gcm.GCMRegistrar 
com.my.app.MainActivity.onCreate(MainActivity.java:28) 
android.app.Activity.performCreate(Activity.java:5008) 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
android.app.ActivityThread.access$600(ActivityThread.java:130) 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
android.os.Handler.dispatchMessage(Handler.java:99) 
android.os.Looper.loop(Looper.java:137) 
android.app.ActivityThread.main(ActivityThread.java:4745) 
java.lang.reflect.Method.invokeNative(Native Method) 
java.lang.reflect.Method.invoke(Method.java:511) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
dalvik.system.NativeStart.main(Native Method) 

和我的Manifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.my.app.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
<receiver android:name=".MyC2dmReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.my.app" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="com.my.app" /> 
      </intent-filter> 
     </receiver> 
+0

你在使用庫項目嗎?如果是,那麼一定要確保它用綠色標記表示。如果您使用的是jar文件,那麼它必須位於** libs **文件夾中。最後,一切都很完美,然後清理你的項目並重建它。 – Piyush

+0

看看這裏http://stackoverflow.com/questions/11273938/gcm-java-lang-noclassdeffounderror-com-google-android-gcm-gcmregistrar –

+0

檢查:[this](http://stackoverflow.com/questions/11273938/gcm-java-lang-noclassdeffounderror-com-google-android-gcm-gcmregistrar),[this](http://stackoverflow.com/questions/12734303/gcm-java-lang-noclassdeffounderror-com-google- android-gcm-gcmregistrar),[this](http://stackoverflow.com/questions/16824143/java-lang-noclassdeffounderror-com-google-android-gcm-gcmregistrar)和[this](http:// stackoverflow。 COM /問題/ 15055351 /獲取-的NoClassDefFoundError與 - 谷歌雲的消息-GCM-ON-NEXUS-4)。 –

回答

1
+0

yess我的GCM.jar不在庫中,但我如何做到這一點?我試圖複製,但不能好心地告訴我,我怎麼能把它放到我的libs文件夾中? – user2966615

+0

將其複製並粘貼到Eclipse本身中! –

+0

哦,對不起。我做到了,但仍然崩潰。 – user2966615

0

從logcat的輸出,即Android的couldn」找不到GCMRegistrar類,這是無論是在很明顯庫項目或GCM.jar中。在Android項目中,您需要將jar文件放入libs文件夾中,然後它們將自動包含到您的類路徑中。如果您正在使用GCM.jar庫,則需要將其複製到libs文件夾下。如果libs文件夾不存在,您可以通過右鍵點擊項目來創建它。

+0

我將gcm.jar複製到了我的libs文件夾中,並且還添加了它來構建路徑,但仍然是應用程序崩潰 – user2966615

+0

請查看Manifest文件,並讓我知道我是否缺少某些東西。謝謝 – user2966615

+0

[This](http://developer.android.com/google/gcm/client.html)文件詳細解釋了一切。它還包含[this](https://code.google.com/p/gcm/source/browse/#git%2Fgcm-client)客戶端示例。您可以通過查看示例來檢查您的清單和其他部分。 – Alpay