我刚刚在Android中编码,我今天遇到了一个问题。几个小时前我能够运行它,但突然间它刚刚开始给我一个NoClassDefFound错误。请帮我找出它为什么突然开始给我错误。
logcat的:
11-16 22:44:34.546: E/AndroidRuntime(31850): FATAL EXCEPTION: main
11-16 22:44:34.546: E/AndroidRuntime(31850): Process: com.Blocks.blocks, PID: 31850
11-16 22:44:34.546: E/AndroidRuntime(31850): java.lang.NoClassDefFoundError: com.Blocks.blocks.Play
11-16 22:44:34.546: E/AndroidRuntime(31850): at com.Blocks.blocks.MainActivity$1.onClick(MainActivity.java:35)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.view.View.performClick(View.java:4445)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.view.View$PerformClick.run(View.java:18446)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.os.Handler.handleCallback(Handler.java:733)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.os.Handler.dispatchMessage(Handler.java:95)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.os.Looper.loop(Looper.java:136)
11-16 22:44:34.546: E/AndroidRuntime(31850): at android.app.ActivityThread.main(ActivityThread.java:5146)
11-16 22:44:34.546: E/AndroidRuntime(31850): at java.lang.reflect.Method.invokeNative(Native Method)
11-16 22:44:34.546: E/AndroidRuntime(31850): at java.lang.reflect.Method.invoke(Method.java:515)
11-16 22:44:34.546: E/AndroidRuntime(31850): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
11-16 22:44:34.546: E/AndroidRuntime(31850): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
11-16 22:44:34.546: E/AndroidRuntime(31850): at dalvik.system.NativeStart.main(Native Method)
这是我的MainActivity.java(包括所有导入)
public class MainActivity extends Activity {
Button play,Exits,AboutMe;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdView adView = (AdView) this.findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).addTestDevice("12A7F007F53439A00E30C06216544A0B").build();
adView.loadAd(adRequest);
play=(Button)findViewById(R.id.Play);
Exits=(Button)findViewById(R.id.Exit);
AboutMe=(Button)findViewById(R.id.AboutMe);
final Context context = this;
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intents=new Intent(context,Play.class);
startActivity(intents);
}
});
Exits.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
System.exit(0);
}
});
AboutMe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(context,AboutMe.class);
startActivity(i);
}
});
}
第35行是:
Intent intents=new Intent(MainActivity.this,Play.class);
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.Blocks.blocks"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="21"
/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat" >
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:screenOrientation="portrait"
android:name=".AboutMe"
android:label="@string/AboutT" >
</activity>
<activity
android:screenOrientation="landscape"
android:name=".Play"
android:theme="@android:style/Theme.NoTitleBar"
android:label="@string/Play" >
</activity>
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
</application>
</manifest>
答案 0 :(得分:1)
在尝试正常工作后清洁项目。
答案 1 :(得分:0)
您可以使用:
Intent i=new Intent(MainActivity.this,AboutMe.class);
代替
Intent i=new Intent(context,AboutMe.class);
答案 2 :(得分:0)
将其更改为:
Intent intents=new Intent(MainActivity.this, Play.class);
<强>更新强>
似乎因为您有2 Play
:一个是Button
的实例,一个是Activity
。将button
的实例更改为播放(小写 p),此代码应该有效。
答案 3 :(得分:0)
活动上下文仅在活动方法中可用,因此不在活动类中设置上下文,而是在onCreate
方法中将其设置为
context = this;
并在您的活动中声明Context context;
而不是final Context context = this;
即将代码重写为
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this; // add here
或更改
Intent intents=new Intent(context,Play.class);
到
Intent intents=new Intent(MainActivity.this,Play.class);
答案 4 :(得分:0)
Play
是上面代码中Button
类型的变量。您是否在Play.class中定义了一个名为Play
的活动?如果是这样,Play
变量就会干扰它。通常,Java编码样式表示类名以大写字母开头,变量名以小写字母开头。 Play.class
看起来像一个静态引用,但它实际上只是对Button
的常规引用。
我猜你提到引用不同的活动。如果您有Play.class
玩游戏Activity
,请将Play
重命名为play
(更改除问题行以外的所有参考文件)
答案 5 :(得分:0)
我有几次这个问题,可以通过清理项目轻松删除它,而不是重新安装它,如果你选择不编写getApplicationContext(),那么Blaze Tama所展示的写入意图更改活动是非常可取的方式。