查找程序错误
下面这个程序是实现一个activity调用另一个activity,程序编译无错,运行时报错:The application ex12(process ex12)
has stop unexpectedly.Please try again
我后来把wipe user data选中,或者关了eclipse重开,依然是报这个错,其它程序是好的,所以也不是配置问题,帮忙找找错误吧,另外我想问下,这个android的错误提示怎么这么模糊,就一个stop unexpectedly,没有具体的错误提示吗?还是我没找到?
程序如下:
- Java code
ex12.javapackage com.misoo.ex12;import android.app.Activity;import android.content.Intent;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;public class ex12 extends Activity { private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private LinearLayout layout; private LinearLayout.LayoutParams para; static final int RG_REQUEST = 0; private int mColor = Color.YELLOW; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); para = new LinearLayout.LayoutParams(230, 140); DrawView dv = new DrawView(this); layout.addView(dv, para); Button btn = new Button(this); btn.setText("Change Color"); btn.setOnClickListener(listener); para = new LinearLayout.LayoutParams(WC, WC); layout.addView(btn, para); setContentView(layout); } public int getColor() { return mColor; } private OnClickListener listener = new OnClickListener() { public void onClick(View v) { Intent in = new Intent(ex12.this, rgActivity.class); startActivityForResult(in,RG_REQUEST); } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RG_REQUEST) { if (resultCode == RESULT_CANCELED) setTitle("Canceled..."); else if(resultCode == RESULT_OK) { String data_str = (String)data.getCharSequenceExtra("DataKey"); setTitle(data_str); if(data_str.contains("Y")) mColor = Color.YELLOW; else mColor = Color.BLUE; } } }}DrawView.javapackage com.misoo.ex12;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;public class DrawView extends View { private Paint pa; private Context ctx; public DrawView(Context context) { super(context); ctx = context; pa = new Paint(); } @Override protected void onDraw(Canvas canvas) { ex12 obj = (ex12)ctx; pa.setColor(obj.getColor()); canvas.drawRect(10, 10, 100, 100, pa); pa.setColor(Color.GREEN); pa.setStrokeWidth(4); pa.setStrokeCap(Paint.Cap.ROUND); canvas.drawLine(10, 55, 100, 55, pa); canvas.drawLine(55, 10, 55, 100, pa); pa.setColor(Color.RED); canvas.drawRect(50, 50, 60, 60, pa); } }rgActivity.javapackage com.misoo.ex12;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;public class rgActivity extends Activity implements OnCheckedChangeListener{ private final int WC = RadioGroup.LayoutParams.WRAP_CONTENT; private RadioGroup rg_layout; RadioGroup.LayoutParams params; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); rg_layout = new RadioGroup(this); params = new RadioGroup.LayoutParams(WC, WC); rg_layout.setOrientation(RadioGroup.VERTICAL); rg_layout.setLayoutParams(params); rg_layout.setOnCheckedChangeListener(this); RadioButton button1 = new RadioButton(this); button1.setText("Yellow"); button1.setId(1001); params = new RadioGroup.LayoutParams(WC, WC); rg_layout.addView(button1,params); RadioButton button2 = new RadioButton(this); button2.setText("Blue"); button2.setId(1002); params = new RadioGroup.LayoutParams(WC, WC); rg_layout.addView(button2,params); setContentView(rg_layout); } public void onCheckedChanged(RadioGroup arg0, int arg1) { String cc; if(arg0.getCheckedRadioButtonId() == 1001) cc = "Y"; else cc = "B"; Bundle bundle = new Bundle(); bundle.putString("DataKey", cc); Intent mIntent = new Intent(); mIntent.putExtras(bundle); setResult(RESULT_OK, mIntent); finish(); }}
[解决办法]
10-21 02:44:48.426: INFO/ActivityManager(568): Starting activity: Intent { comp={com.droiddraw/com.droiddraw.rgActivity} }
10-21 02:44:48.455: DEBUG/AndroidRuntime(728): Shutting down VM
10-21 02:44:48.481: WARN/dalvikvm(728): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
10-21 02:44:48.481: ERROR/AndroidRuntime(728): Uncaught handler: thread main exiting due to uncaught exception
10-21 02:44:48.597: ERROR/AndroidRuntime(728): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.droiddraw/com.droiddraw.rgActivity}; have you declared this activity in your AndroidManifest.xml?
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1480)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1454)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.app.Activity.startActivityForResult(Activity.java:2656)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.droiddraw.droiddrawTest$1.onClick(droiddrawTest.java:118)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.View.performClick(View.java:2179)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.View.onTouchEvent(View.java:3828)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.widget.TextView.onTouchEvent(TextView.java:6291)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.View.dispatchTouchEvent(View.java:3368)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.app.Activity.dispatchTouchEvent(Activity.java:1993)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.view.ViewRoot.handleMessage(ViewRoot.java:1525)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.os.Handler.dispatchMessage(Handler.java:99)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.os.Looper.loop(Looper.java:123)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at android.app.ActivityThread.main(ActivityThread.java:3948)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at java.lang.reflect.Method.invokeNative(Native Method)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at java.lang.reflect.Method.invoke(Method.java:521)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
10-21 02:44:48.597: ERROR/AndroidRuntime(728): at dalvik.system.NativeStart.main(Native Method)
程序本身没有问题,你忘了在Androidmanifest.xml里面注册你的Activity了
在Androidmanifest.xml的<application>下面加上这个就好
<activity android:name="rgActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.SAMPLE_CODE"/>
</intent-filter>
</activity>
每个activity都必须在Androidmanifest里面注册
[解决办法]
10-21 02:44:48.597: ERROR/AndroidRuntime(728): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.droiddraw/com.droiddraw.rgActivity}; have you declared this activity in your AndroidManifest.xml?
在AndroidManifest.xml注册Activity就可以了。
<activity android:name=".rgActivity" //得加上"."
android:label="@string/app_name">
</activity>