【问题标题】:I am trying to set a Global Variable Class, but it is crashing. Anything I am missing?我正在尝试设置一个全局变量类,但它正在崩溃。我有什么遗漏吗?
【发布时间】:2016-12-13 13:34:10
【问题描述】:

错误日志:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sellingbcom.myapplicationa/com.example.sellingbcom.myapplicationa.DisplayActivity}:

java.lang.ClassCastException: android.app.Application 不能被强制转换 到 com.example. sellbcom.myapplicationa.GlobalActivity 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 在 android.app.ActivityThread.access$700(ActivityThread.java:143) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137)

                                                                                                at android.app.ActivityThread.main(ActivityThread.java:4950)
                                                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                                at java.lang.reflect.Method.invoke(Method.java:511)
                                                                                                at

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 在 dalvik.system.NativeStart.main(Native Method)

                                                                                             Caused by: java.lang.ClassCastException: android.app.Application

不能转换为 com.example.salesbcom.myapplicationa.GlobalActivity 在 com.example. sellbcom.myapplicationa.DisplayActivity.onCreate(DisplayActivity.java:17) 在 android.app.Activity.performCreate(Activity.java:5177) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 

                                                                                              at android.app.ActivityThread.access$700(ActivityThread.java:143) 
                                                                                                at

android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4950) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511)

我正在尝试设置一个全局变量类,但它崩溃了。我需要知道我错过了什么?

/* 全局类

 public  class  GlobalActivity extends AppCompatActivity {

private int albumId;

    public int getAlbumId() {
        return albumId;
    }

    public void setAlbumId(int albumId) {
        this.albumId = albumId;
    }

  }

/* 清单

   <activity android:name=".DisplayActivity"></activity> 
<activity  android:name=".GlobalActivity"></activity>

/* 活动主界面

public class MainActivity extends AppCompatActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int x=10;
    final GlobalActivity globalAlbum = (GlobalActivity) getApplicationContext();
    globalAlbum.setAlbumId(x);
 }

 public void dispAct(View view) {
    Intent i = new Intent(this, DisplayActivity.class);
    startActivity(i);

 }
}

/* 显示活动

public class DisplayActivity extends AppCompatActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display);

    final GlobalActivity globalAlbum = (GlobalActivity) getApplicationContext();
    int x = globalAlbum.getAlbumId();

    TextView songLyric = (TextView) findViewById(R.id.disp);
    songLyric.setText(x);
 }
}

/* 活动 XML

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.sellingbcom.myapplicationa.MainActivity">



        <Button
            android:id="@+id/tgl_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:focusable="false"
            android:clickable="false"
            android:onClick="dispAct"
            android:text="PICK"

            />
    </LinearLayout>

/* 显示 XML

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/disp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </LinearLayout>

【问题讨论】:

  • 也可以发布错误日志。

标签: java android


【解决方案1】:

我就是这样用的

  1. 将变量声明为公共静态变量
  2. 使用类名在任何地方调用它

例如

public class Main12 extends AppCompatActivity {

public static int age;
}

调用它

Main12.age = 4;

你甚至可以在同一个应用程序的其他活动中调用它

【讨论】:

  • 无法正常工作。这是 Main12 MainActivity Java 文件吗?它不工作。
  • 知道了...所以就这么简单。无论如何,谢谢。
【解决方案2】:

您可以扩展基类 android.app.Application 并添加成员变量,例如

public class MyApplication extends Application {

private String someVariable;

public String getSomeVariable() {
    return someVariable;
}

public void setSomeVariable(String someVariable) {
    this.someVariable = someVariable;
}

现在在清单中执行此操作 必须声明实现 android.app.Application 的类(将 android:name=".MyApplication" 属性添加到现有的应用程序标签) 如下所示

<application  android:name=".MyApplication" android:icon="@drawable/icon"  android:label="@string/app_name">

然后在您的活动中,您可以获取并设置如下所述

((MyApplication) this.getApplication()).setSomeVariable("foo");
String s = ((MyApplication) this.getApplication()).getSomeVariable();

【讨论】:

  • 太长了。它在顶部。
【解决方案3】:

行:

final GlobalActivity globalAlbum = (GlobalActivity) getApplicationContext();

是错误的,主要是因为您不能将应用程序上下文转换为特定的activity 类。如果你真的想要一个全局类,你必须在使用它之前确保它的一个实例存在。

其中一个选项是创建一个带有静态字段的普通 Java 类。这些将在应用程序初始化后立即可用,但您必须注意不要保存任何可能包含 context 变量的内容,因为这将要求内存泄漏。

第二种方法是使用application 类。 @hatib 在我输入这个时已经发布了它:D。我以后会说同样的话。

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多