2

Android 애플리케이션은 시작시 계속 충돌합니다. 그래도 모든 것이 나에게 잘 보입니다.Android 앱이 시작시 충돌을 계속합니다.

스택 추적 :

01-24 21:23:41.417: I/Process(767): Sending signal. PID: 767 SIG: 9 
01-24 21:41:36.316: W/Trace(890): Unexpected value from nativeGetEnabledTags: 0 
01-24 21:41:36.485: W/Trace(890): Unexpected value from nativeGetEnabledTags: 0 
01-24 21:41:36.515: W/Trace(890): Unexpected value from nativeGetEnabledTags: 0 
01-24 21:41:36.515: D/dalvikvm(890): newInstance failed: p0 i0 [0 a1 
01-24 21:41:36.515: D/AndroidRuntime(890): Shutting down VM 
01-24 21:41:36.515: W/dalvikvm(890): threadid=1: thread exiting with uncaught  exception (group=0x40a70930) 
01-24 21:41:36.635: E/AndroidRuntime(890): FATAL EXCEPTION: main 
01-24 21:41:36.635: E/AndroidRuntime(890): java.lang.RuntimeException: Unable to  instantiate activity ComponentInfo{com.example.bmisummative/com.example.bmisummative.MainActivity}:  java.lang.InstantiationException: can't instantiate class  com.example.bmisummative.MainActivity 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.os.Looper.loop(Looper.java:137) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread.main(ActivityThread.java:5039) 
01-24 21:41:36.635: E/AndroidRuntime(890): at java.lang.reflect.Method.invokeNative(Native Method) 
01-24 21:41:36.635: E/AndroidRuntime(890): at java.lang.reflect.Method.invoke(Method.java:511) 
01-24 21:41:36.635: E/AndroidRuntime(890): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-24 21:41:36.635: E/AndroidRuntime(890): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-24 21:41:36.635: E/AndroidRuntime(890): at dalvik.system.NativeStart.main(Native Method) 
01-24 21:41:36.635: E/AndroidRuntime(890): Caused by: java.lang.InstantiationException: can't instantiate class com.example.bmisummative.MainActivity 
01-24 21:41:36.635: E/AndroidRuntime(890): at java.lang.Class.newInstanceImpl(Native Method) 
01-24 21:41:36.635: E/AndroidRuntime(890): at java.lang.Class.newInstance(Class.java:1319) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
01-24 21:41:36.635: E/AndroidRuntime(890): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
01-24 21:41:36.635: E/AndroidRuntime(890): ... 11 more 
01-24 21:46:36.745: I/Process(890): Sending signal. PID: 890 SIG: 9 

MainActivity 클래스 :

package com.example.bmisummative; 

import android.app.Activity; 
import android.content.DialogInterface; 
import android.view.View.OnClickListener; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public abstract class MainActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
Button btn,btn1,btn2; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn = (Button) findViewById(R.id.buttonBMI); 
    btn.setOnClickListener(this); 
    btn1 = (Button) findViewById(R.id.buttonGain); 
    btn1.setOnClickListener(this); 
    btn2 = (Button) findViewById(R.id.buttonLoss); 
    btn2.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.buttonBMI) { 
    startActivity(new Intent(this, MainActivity.class)); 
    } 
    if (v.getId() == R.id.buttonGain) { 
    startActivity(new Intent(this, weightgain.class)); 
    } 
    if (v.getId() == R.id.buttonLoss) { 
     startActivity(new Intent(this, weightgain.class)); 
     } 

} 

} 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    tools:context=".StartingPoint" 
    android:background="@drawable/grunge"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Main Menu" 
     android:textSize="45dp" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:textColor="#FFFFFF" 
     android:id="@+id/tvDisplay"/> 

    <Button 
     android:id="@+id/buttonBMI" 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="BMI Calculator" 
     android:textSize="20dp" /> 

    <Button 
     android:id="@+id/buttonLoss" 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Weight Loss Workouts" 
     android:textSize="20dp" /> 

    <Button 
     android:id="@+id/buttonGain" 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Muscle Gain Workouts" 
     android:textSize="20dp" /> 

</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.bmisummative" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.bmisummative.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:name="com.example.bmiworking.calculator" 
      android:label="@string/app_name" > 
      </activity> 

      <activity 
      android:name="com.example.bmiworking.weightgain" 
      android:label="@string/app_name" > 
      </activity> 
      <activity 
      android:name="com.example.bmiworking.weightloss" 
      android:label="@string/app_name" > 
      </activity> 
      </application> 
</manifest> 

답변

3

매니페스트에서 활동을 선언 할 때 당신이 android:name=".MainActivity"을 얻고 할 수 있도록, 활동 이름 앞에 패키지를 제거하려고 당신의 다른 활동들과 동일합니다.

제 첫 번째 대답이 잘못되었습니다. 앱이 충돌하는 이유는 기본 활동을 추상 삭제라고 선언하고 앱을 실행해야하기 때문입니다.

+0

여전히 충돌합니다. – suggamuggafugga

+1

완전 확인입니다. 활동은 추상적입니다. –

+0

@ErikNedwidek 게시하기 직전에 편집 됨) – jcw

1

귀하의 활동이 추상적이어서는 안됩니다.

public static final String TAG = "NameMeSomethingUnique"; 

는 일반적으로 이름의 문자열 값을 변경 :

또한 나는이 태그를 정의 내 활동 수업에서 적어도

try { 
    /// Do some work 
} catch (Throwable t) { 
    Log.e(TAG, t.getMessage(), t); 
} 

에 기능을 포장에 익숙해한다 활동.

편집

보다는이 전체 클래스는 다시 게재합니다. try/catch 클래스의 onCreate를 수정하고 TAG 상수를 클래스 멤버로 추가하는 것입니다. 같은 방식으로 try/catch 블록을 다른 메소드에 추가 할 수 있습니다.

public class MainActivity extends Activity implements OnClickListener { // REMOVED abstract keyword - EJN 
/** Called when the activity is first created. */ 
Button btn,btn1,btn2; 
private static final String TAG = "MainActivity"; // Used to make logging easier - EJN 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    try { // Wrapped to trap any possible exceptions so we don't just crash - EJN 
     setContentView(R.layout.activity_main); 
     btn = (Button) findViewById(R.id.buttonBMI); 
     btn.setOnClickListener(this); 
     btn1 = (Button) findViewById(R.id.buttonGain); 
     btn1.setOnClickListener(this); 
     btn2 = (Button) findViewById(R.id.buttonLoss); 
     btn2.setOnClickListener(this); 
    } catch (Throwable t) { 
     Log.e(TAG, t.getMessage(), t); 
    } 
} 
+0

내 도움이 될만한 답변을 참조하십시오 예를 들어 그것을 얻지 못하는 예를 들어 내 코드로 다시 작성할 수 있습니다. – suggamuggafugga