2013-08-30 85 views
0

我正在制作一款Android游戏,并且我在做一家商店。我到了全局变量部分,似乎没有任何工作。我的问题是,当我到第二级时,应用程序说它已停止工作并进入菜单。我是编程的小白菜,所以也许我没有做正确的事情,但我需要帮助。这里是我的,所有的店铺整数将是代码:Android全局不能正常工作

Android清单的
public class Globals extends Application{ 

private int player_health=10; 

    public int getData(){ 
    return this.player_health; 
    } 

    public void setData(int d){ 
    this.player_health=d; 
    } 

} 

部分:

<application 
    android:name=".Globals" 
    android:allowBackup="false" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.hunter.pixeldeath.MainActivity" 
     android:label="@string/title_activity_menu" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.Menu" 
     android:label="@string/title_activity_menu" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.WorldSelect" 
     android:label="@string/title_activity_world_select" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.LevelSelect" 
     android:label="@string/title_activity_level_select" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.Store" 
     android:label="@string/title_activity_store" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.LevelTwo" 
     android:label="@string/title_activity_level_two" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.CharacterSelect" 
     android:label="@string/title_activity_character_select" > 
    </activity> 
    <activity 
     android:name="com.hunter.pixeldeath.Integers" 
     android:label="@string/title_activity_integers" > 
    </activity> 
</application> 

并且我用引起该问题(我认为)的代码:

Globals g = (Globals)getApplication(); 
int player_health=g.getData(); 

atk.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if (enemy_health > 0){ 
       enemy_health = enemy_health - player_damage; 
       enmh.setText("Enemy Health:" + enemy_health); 

       player_health = player_health = enemy_damage; 
       plrh.setText("Player Health " + player_health); 


       } else { 

      } 
     } 
    }); 

的logcat:

08-29 23:59:19.071: E/AndroidRuntime(1525): FATAL EXCEPTION: main 
08-29 23:59:19.071: E/AndroidRuntime(1525): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hunter.pixeldeath/com.hunter.pixeldeath.LevelTwo}: java.lang.NullPointerException 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.os.Looper.loop(Looper.java:137) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at java.lang.reflect.Method.invoke(Method.java:525) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at dalvik.system.NativeStart.main(Native Method) 
08-29 23:59:19.071: E/AndroidRuntime(1525): Caused by: java.lang.NullPointerException 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at com.hunter.pixeldeath.LevelTwo.<init>(LevelTwo.java:21) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at java.lang.Class.newInstanceImpl(Native Method) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at java.lang.Class.newInstance(Class.java:1130) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128) 
08-29 23:59:19.071: E/AndroidRuntime(1525):  ... 11 more 
+0

什么原因导致“该应用程序表示它已停止工作”?,您可以发布LogCat吗? – Sieryuu

+1

你应该发布完整的LevelTwo类,并指出我们是什么代码在这行:)的第21行。 – hieuxit

+1

这是正确的。看看“at com.hunter.pixeldeath.LevelTwo。(LevelTwo.java:21)” – whogiawho

回答

-1

使全局变量player_health成为一个静态变量。这是你的代码变得

public class Globals extends Application{ 
    private static int player_health; 

    public static int getData(){ 
    return this.player_health; 
    } 

    public static void setData(int d){ 
    this.player_health=d; 
    } 

    public static Globals getInstance() { 
     return singleton; 
    } 

    @Override 
    public void onCreate() 
    { 
    super.onCreate(); 
    player_health=10; 
    } 
} 

现在访问您的变量使用Globals.getInstance().getData();

0

您已经在第21行中得到了一个LevelTwo.java NullPointerException,该LevelTwo实例被创建时发生这种情况。看看这一行,找出哪个变量可能是null或使用调试器。

从堆栈跟踪这几行告诉你:

08-29 23:59:19.071: E/AndroidRuntime(1525): Caused by: java.lang.NullPointerException 
08-29 23:59:19.071: E/AndroidRuntime(1525):  at com.hunter.pixeldeath.LevelTwo.<init>(LevelTwo.java:21) 

编辑(后从OP一些更多的信息):

在第二行(这是在类的构造函数)出现错误:

Globals g = (Globals)getApplication(); 
int player_health=g.getData(); 

只有一种可能性,在这里得到了NPE,即gnull。并且gnull,因为执行构造函数时应用程序尚未设置。该代码应该移动到该活动的onCreate()方法。

+0

21行是我尝试获取整数 – CodingN00B

+0

好的,很好。但是你没有发布'LevelTwo'代码。 – Henry

+0

我切断全局变量g =(GLoabals ...和int line_health = g.getData从第21行开始 – CodingN00B