在我的应用程序中,我无法重用我在arabicUtility类中声明的方法.我的意图是使用阿拉伯语类来安排阿拉伯语文本.因此,我想要的是将字符串传递给我在arabicutility类中声明的方法并进行转换.
我认为这基本上是我对OOP知识的一些问题.所以帮我纠正这个.
这是我添加到arabicutility类的方法
public voID addTranslate(int rID, TextVIEw txt1) { String textv = getResources().getString(rID); txt1.setText(arabicUtilitIEs.reshapeSentence(textv)); // Typeface typeFace=Typeface.createFromAsset(getAssets(),"Fonts/DroIDNaskhBold.ttf"); // txt1.setTypeface(typeFace); }
我不能将此方法声明为静态,因为getResources()是非静态的.我必须从Activity扩展,因为我使用了androID方法.原则上没有这样定义.
这就是我尝试在其他活动类中使用上述方法的方法.
arbic.addTranslate(R.string.butt18Title1, txt1);arbic.addTranslate(R.string.butt18desc1, txt2);
但是当我运行程序时,它会在我进行上述活动时崩溃.
这是日志猫
12-29 10:02:32.561: E/AndroIDRuntime(951): FATAL EXCEPTION: main12-29 10:02:32.561: E/AndroIDRuntime(951): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.xxx/com.xxxx.xxx.ShowMessageActivity}: java.lang.NullPointerException12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2059)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread.access0(ActivityThread.java:130)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.os.Handler.dispatchMessage(Handler.java:99)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.os.Looper.loop(Looper.java:137)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread.main(ActivityThread.java:4745)12-29 10:02:32.561: E/AndroIDRuntime(951): at java.lang.reflect.Method.invokeNative(Native Method)12-29 10:02:32.561: E/AndroIDRuntime(951): at java.lang.reflect.Method.invoke(Method.java:511)12-29 10:02:32.561: E/AndroIDRuntime(951): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)12-29 10:02:32.561: E/AndroIDRuntime(951): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)12-29 10:02:32.561: E/AndroIDRuntime(951): at dalvik.system.NativeStart.main(Native Method)12-29 10:02:32.561: E/AndroIDRuntime(951): Caused by: java.lang.NullPointerException12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.content.Contextwrapper.getResources(Contextwrapper.java:81)12-29 10:02:32.561: E/AndroIDRuntime(951): at com.xxxx.xxx.arabicUtilitIEs.addTranslate(arabicUtilitIEs.java:252)12-29 10:02:32.561: E/AndroIDRuntime(951): at com.xxxx.xxx.ShowMessageActivity.onCreate(ShowMessageActivity.java:184)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.Activity.performCreate(Activity.java:5008)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)12-29 10:02:32.561: E/AndroIDRuntime(951): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2023)12-29 10:02:32.561: E/AndroIDRuntime(951): ... 11 more
解决方法:
无需将addTranslate声明为静态来获取非Activity类中的Resources,您只需要通过使用非活动类构造函数传递当前活动上下文或者在方法中传递:
public voID addTranslate(int rID, TextVIEw txt1,Context context) { String textv = context.getResources().getString(rID); txt1.setText(arabicUtilitIEs.reshapeSentence(textv)); }
现在,您可以从Activity类调用addTranslate:
arbic.addTranslate(R.string.butt18Title1, txt1,Your_Current_Activity.this);arbic.addTranslate(R.string.butt18desc1, txt2,Your_Current_Activity.this);
总结 以上是内存溢出为你收集整理的java – 无法重用方法android OOP全部内容,希望文章能够帮你解决java – 无法重用方法android OOP所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)