Android 创建类和传递内容

Android 创建类和传递内容,android,class,typeface,Android,Class,Typeface,我制作了一个所有字体都被更改的方法,但问题是我想使用这个方法一次,这样我就不必在每个脚本中复制和粘贴它 代码示例: public void changeFont(){ int[] id_et = {R.id.inputObjectName, R.id.inputObjectValue}; int[] id_tv = {R.id.headerUserInfo, R.id.headerUserPW, R.id.headerUserGW}; int[] id_btn = {R

我制作了一个所有字体都被更改的方法,但问题是我想使用这个方法一次,这样我就不必在每个脚本中复制和粘贴它

代码示例:

public void changeFont(){

    int[] id_et = {R.id.inputObjectName, R.id.inputObjectValue};
    int[] id_tv = {R.id.headerUserInfo, R.id.headerUserPW, R.id.headerUserGW};
    int[] id_btn = {R.id.privBtnIncome, R.id.privBtnExpense};

    Typeface font = Typeface.createFromAsset(getAssets(), "Sanford.TTF");

    for(int i = 0; i < id_et.length; i++){
        EditText textbox = (EditText) findViewById(id_et[i]);
        textbox.setTypeface(font);
    }

    for(int i = 0; i < id_tv.length; i++){
        TextView tv = (TextView) findViewById(id_tv[i]);
        tv.setTypeface(font);
    }

    for(int i = 0; i < id_btn.length; i++){
        Button btn = (Button) findViewById(id_btn[i]);
        btn.setTypeface(font);
    }

}
public void changeFont(){
int[]id_et={R.id.inputObjectName,R.id.inputObjectValue};
int[]id_tv={R.id.headerUserInfo,R.id.headerUserPW,R.id.headerUserGW};
int[]id_btn={R.id.privBtnIncome,R.id.privBtnExpense};
Typeface font=Typeface.createFromAsset(getAssets(),“Sanford.TTF”);
对于(int i=0;i
当我创建一个类并创建一个对象来使用构造函数获取数据时,程序崩溃了

这是该类的外观:

public class ChangeFont extends Activity{
    public ChangeFont(){

    int[] id_et = {R.id.inputObjectName, R.id.inputObjectValue};
    int[] id_tv = {R.id.headerUserInfo, R.id.headerUserPW, R.id.headerUserGW};
    int[] id_btn = {R.id.privBtnIncome, R.id.privBtnExpense};

    Typeface font = Typeface.createFromAsset(getAssets(), "Sanford.TTF");

    for(int i = 0; i < id_et.length; i++){
        EditText textbox = (EditText) findViewById(id_et[i]);
        textbox.setTypeface(font);
    }

    for(int i = 0; i < id_tv.length; i++){
        TextView tv = (TextView) findViewById(id_tv[i]);
        tv.setTypeface(font);
    }

    for(int i = 0; i < id_btn.length; i++){
        Button btn = (Button) findViewById(id_btn[i]);
        btn.setTypeface(font);
    }

    }

}
公共类ChangeFont扩展活动{
公共字体(){
int[]id_et={R.id.inputObjectName,R.id.inputObjectValue};
int[]id_tv={R.id.headerUserInfo,R.id.headerUserPW,R.id.headerUserGW};
int[]id_btn={R.id.privBtnIncome,R.id.privBtnExpense};
Typeface font=Typeface.createFromAsset(getAssets(),“Sanford.TTF”);
对于(int i=0;i
错误日志:

12-12 17:23:49.746: E/AndroidRuntime(6159): FATAL EXCEPTION: main
12-12 17:23:49.746: E/AndroidRuntime(6159): java.lang.RuntimeException: Unable to start activity ComponentInfo{united.aristal.freewallet/united.aristal.freewallet.PrivateWallet}: java.lang.NullPointerException
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread.access$600(ActivityThread.java:122)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.os.Looper.loop(Looper.java:137)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread.main(ActivityThread.java:4340)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at java.lang.reflect.Method.invokeNative(Native Method)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at java.lang.reflect.Method.invoke(Method.java:511)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at dalvik.system.NativeStart.main(Native Method)
12-12 17:23:49.746: E/AndroidRuntime(6159): Caused by: java.lang.NullPointerException
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.content.ContextWrapper.getAssets(ContextWrapper.java:75)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at united.aristal.freewallet.ChangeFont.<init>(ChangeFont.java:16)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at united.aristal.freewallet.PrivateWallet.onCreate(PrivateWallet.java:32)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.Activity.performCreate(Activity.java:4465)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-12 17:23:49.746: E/AndroidRuntime(6159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
12-12 17:23:49.746: E/AndroidRuntime(6159):     ... 11 more
12-12 17:23:49.746:E/AndroidRuntime(6159):致命异常:main
12-12 17:23:49.746:E/AndroidRuntime(6159):java.lang.RuntimeException:无法启动活动组件信息{united.aristal.freewallet/united.aristal.freewallet.PrivateWallet}:java.lang.NullPointerException
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.ActivityThread.access$600(ActivityThread.java:122)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.os.Handler.dispatchMessage(Handler.java:99)上
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.os.Looper.loop(Looper.java:137)
12-12 17:23:49.746:E/AndroidRuntime(6159):位于android.app.ActivityThread.main(ActivityThread.java:4340)
12-12 17:23:49.746:E/AndroidRuntime(6159):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-12 17:23:49.746:E/AndroidRuntime(6159):在java.lang.reflect.Method.invoke(Method.java:511)
12-12 17:23:49.746:E/AndroidRuntime(6159):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-12 17:23:49.746:E/AndroidRuntime(6159):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-12 17:23:49.746:E/AndroidRuntime(6159):在dalvik.system.NativeStart.main(本机方法)
12-12 17:23:49.746:E/AndroidRuntime(6159):由以下原因引起:java.lang.NullPointerException
12-12 17:23:49.746:E/AndroidRuntime(6159):位于android.content.ContextWrapper.getAssets(ContextWrapper.java:75)
12-12 17:23:49.746:E/AndroidRuntime(6159):在united.aristal.freewallet.ChangeFont.(ChangeFont.java:16)
12-12 17:23:49.746:E/AndroidRuntime(6159):在united.aristal.freewallet.PrivateWallet.onCreate(PrivateWallet.java:32)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.Activity.performCreate(Activity.java:4465)上
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-12 17:23:49.746:E/AndroidRuntime(6159):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
12-1217:23:49.746:E/AndroidRuntime(6159):。。。还有11个

有人能帮我吗?

getAssets
正在抛出
NullPointerException
,因为您创建了
ChangeFont
实例,而不是让Android来做。如果
ChangeFont
只是一个实用程序类,那么它不应该扩展
活动

相反,用实际活动的实例初始化它,并让它调用该活动的方法

public class ChangeFont {

    public ChangeFont(final Activity activity) {
        this.activity = activity;

        Typeface font = Typeface.createFromAsset(activity.getAssets(), "Sanford.TTF");
    }

}

在重载的onCreate()中,可以在super.onCreate()之后调用getAssets()。。。只有这样活动才能完全启动。。。将代码移动到onCreate(),您已经添加了logcat log。。。。这正是我写的东西。。。在构造函数()中,未完全创建上下文,您需要该上下文来获取资产…如何使用getAssets()方法?我已将所有内容粘贴到onCreate()。还在寻找例子…这取决于你的需要。。。如果你想构建一个扩展活动的基类,你应该将所有这些代码移动到onCreate(Bundle)或。。。保持原样,但您应该更改类的名称。。。使用此名称和类名,此函数不是普通函数,但它是构造函数。。。但您仍然应该记住,ChangeFont()应该在onCreate之后调用…“但是您应该使用这个名称和这个类名来更改类的名称…这个函数不是一个普通的函数,而是一个构造函数。”您能给我举个例子吗?我如何创建实际活动的实例?你能给我举个例子吗?这就是你的意思:cf=newchangefont(活动);正确,您的
PrivateWallet
活动将在其
onCreate
meth中调用它