Running first application on Android Emulator
I am trying to run my first hello world application on the 2.3.1 emulator but I get the following error message: "The application Hello World (process com.helloworld) has stopped unexpectedly. Please try again.
What could be the reason this is happening?
Here is the source code:
package com.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class HelloWorldActivity extends Activity implements View.OnClickListener {
Button button;
int touchCount;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
button = new Button(this); //create the Button
button.setText( "Touch me" ); //set its initial text
button.setOnClickListener(this);
setContentView(button);
}
public void onClick(View v) {
touchCount++; //Increase the touchCount
button.setText("Touched me " + touchCount + "time(s)");
}
}
Stack Trace:
05-10 17:32:18.749: ERROR/AndroidRuntime(511): FATAL EXCEPTION: main
05-10 17:32:18.749: ERROR/AndroidRuntime(511): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.helloworld/com.helloworld.HelloWorld.activity}: java.lang.ClassNotFoundException: com.helloworld.HelloWorld.activit开发者_Python百科y in loader dalvik.system.PathClassLoader[/data/app/com.helloworld-1.apk]
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.os.Handler.dispatchMessage(Handler.java:99)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.os.Looper.loop(Looper.java:123)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread.main(ActivityThread.java:3647)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at java.lang.reflect.Method.invokeNative(Native Method)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at java.lang.reflect.Method.invoke(Method.java:507)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at dalvik.system.NativeStart.main(Native Method)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): Caused by: java.lang.ClassNotFoundException: com.helloworld.HelloWorld.activity in loader dalvik.system.PathClassLoader[/data/app/com.helloworld-1.apk]
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
05-10 17:32:18.749: ERROR/AndroidRuntime(511): ... 11 more
http://pastebin.com/7R9pF34w
As noted in the comment above, the problem was this line in the manifest:
<activity android:name=".HelloWorld.activity"
android:label="@string/app_name">
The android:name
attribute tells the VM what class to look for when launching the activity, but your class was created as public class HelloWorldActivity
in your .java file. Thus, when the VM tried to instantiate a HelloWorld.activity
object, it was unable to do so, and crashed with a ClassNotFoundException
. The solution is to change the above to read:
<activity android:name=".HelloWorldActivity"
android:label="@string/app_name">
...so that it matches your class definition, therefore allowing the VM to find it. Further, the reason this caused a crash immediately at start up is because the first activity entry is considered the "start up" activity.
You can find additional documentation pertaining to the manifest file here.
actually scratch my last comment. you don't use a button as the layout to setContentView on. create a layout, put the button on the layout, do the sentContentView(R.layout.your_layout); then find the button (or add it to the layout)
try following the tutorial for hello world: http://developer.android.com/resources/tutorials/hello-world.html
精彩评论