- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用处理程序更改 Activity 的背景颜色,但收到错误消息“尝试调用虚拟方法”。
这是我的代码
public class MainActivity extends AppCompatActivity {
private EditText editTextUser, editTextPass;
private RelativeLayout relativeLayoutMain;
private Random random = new Random();
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
relativeLayoutMain = (RelativeLayout) findViewById(R.id.relativeLayoutMain);
Button btnSignIn = (Button) findViewById(R.id.buttonSignIn);
btnSignIn.setEnabled(false);
handler.postDelayed(runner, 2000);
Button buttonSignUp = (Button) findViewById(R.id.buttonSignUp);
buttonSignUp.setText("Not registered? CLICK HERE");
editTextUser = (EditText) findViewById(R.id.editTextUser);
editTextPass = (EditText) findViewById(R.id.editTextPassword);
if (editTextUser.getText().toString() != null && editTextPass.getText().toString() != null) {
btnSignIn.setEnabled(true);
}
}
android.content.res.Resources res = getResources();
int[] clrItems = res.getIntArray(R.array.color_background);
List<int[]> arrayOfColor = new ArrayList<int[]>();
public List<int[]> getArrayOfColor() {
arrayOfColor.add(clrItems);
return arrayOfColor;
}
Runnable runner = new Runnable() {
@Override
public void run() {
Log.e("run: ", "call");
Bitmap bitmap = Bitmap.createBitmap(612, 612, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
final int clr = 0xFF424242;
final Paint paint = new Paint();
final Rect destRect = new Rect((612-bitmap.getWidth())/2,
24,
(612)-(612-bitmap.getWidth())/2,
612-24);
final RectF rectF = new RectF(destRect);
final Rect srcRect = new Rect(0, 0, bitmap.getWidth(), 612);
final float roundPx = 612;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(clr);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, srcRect, destRect, paint);
GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[]{0xFF616261, 0xFF131313});
gd.setCornerRadius(0f);
relativeLayoutMain.setBackground(gd);
handler.postDelayed(runner, 4000);
}
};
public void login(View view) {
intent = new Intent(this, HomeActivity.class);
startActivity(intent);
}
public void register(View view) {
intent = new Intent(this, SignUpActivity.class);
startActivity(intent);
}
}
这是我的 logcat。
08-31 16:29:47.122 13152-13152/com.example.salimshivani.student E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.salimshivani.student, PID: 13152
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.salimshivani.student/com.example.salimshivani.student.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3132)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.content.ContextWrapper.getResources(ContextWrapper.java:92)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
at com.example.salimshivani.student.MainActivity.<init>(MainActivity.java:241)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1096)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3122)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
请帮助我不断移动 Activity 的背景颜色。
提前致谢
最佳答案
您调用方法 getResources()
作为类初始化的一部分(在任何方法之外,因此它将作为构造函数的一部分执行)
此时,Activity
实例还不存在,因此它可能不会调用需要实例存在的方法。
将导致Exception
的语句,因为它们利用了Activity
是一种Context
的事实:
android.content.res.Resources res = getResources();
int[] clrItems = res.getIntArray(R.array.color_background);
另一方面,以下语句不会引起问题,因为它只是普通的旧 Java:
List arrayOfColor = new ArrayList();
只需将“问题陈述”粘贴到一个方法中,例如onCreate()
// declare here
android.content.res.Resources res;
int[] clrItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialise here
res = getResources();
clrItems = res.getIntArray(R.array.color_background);
relativeLayoutMain = (RelativeLayout) findViewById(R.id.relativeLayoutMain);
Button btnSignIn = (Button) findViewById(R.id.buttonSignIn);
btnSignIn.setEnabled(false);
...
}
关于android - 尝试调用 Resources 中的虚拟方法 res = getResources();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39249907/
我正在寻找外行人对计算机硬件和组织的介绍。以下是我想讨论的一些主题。 Brief intro to electronics. Gates and state machines, intro to re
有没有人在 Visual Basic 2010 中看到过这个错误,如果有的话......关于如何解决它的任何想法? 错误是 module 'Resources' and module 'Resourc
这个问题在这里已经有了答案: Why ?attr/colorAccent dose not work below lollipop version? (2 个答案) 关闭 5 年前。 我收到以下错误
我正在尝试通过 ring 学习 clojure 网络开发和 compojure我有点不清楚 compojure.route/resources 和 ring.middleware.resource/w
是否必须放置内部 try-with-resources 或其中一个 try-with-resources 中的所有内容都会自动关闭? try (BasicDataSource ds = Bas
我有一本包含多个食谱的 Chef 食谱,用于安装服务。 Chef-client 的工作方式是每 15 分钟(或其他固定时间间隔)重新收敛一次。现在我的食谱的第一步是停止服务,所以服务将每 15 分钟停
我有资源组“MyResources”,其中包含 4 个资源: AppService - 我的服务器, AppServicePlan - MyServerWestEuFarm, ApplicationI
我有资源组“MyResources”,其中包含 4 个资源: AppService - 我的服务器, AppServicePlan - MyServerWestEuFarm, ApplicationI
我有一个返回 ResponseEntity 的休息终点. 需要检查如何在 Swagger 规范中创建这种类型的响应。这里包中的资源是 org.springframework.core.io.Resou
In my azure portal I have 6 separate applications, I have to list all of the employed resources u
In my azure portal I have 6 separate applications, I have to list all of the employed resources u
我有一个问题,设计师不会显示表单。它失败,错误 Designer 给出警告,如下所示: 我该如何解决这个问题? 最佳答案 您似乎缺少在应用程序中加载此表单所需的项目 资源 . 您可以访问 资源右键单击
我是 angularJS 世界的新手,我可能误解了一些东西。 我的应用程序使用 Controller 、指令和服务,所有这些都运行完美,直到我使用带有 $resource 的服务,然后出现“冲突”或其
我在 Unity3D 工作。 我使用 Resources.LoadAll(path);加载文件夹和子文件夹中的所有项目。执行此操作后,我想获取对象的子文件夹名称或完整路径。这可能吗? 并且不建议使用
我需要监控每个客户端环境(一个订阅、多个资源组)的 Azure 支出。在我的研究中,我发现了 2 个可以使用的 API: 资源费率卡( https://msdn.microsoft.com/fr-fr
在 RDF 1.1 XML 语法文档中 rdf:resource 在定义 Empty Property Elements 时用作缩写形式: When a predicate arc in an RDF
这是一种常见的情况,我们需要在用户更新/创建一些数据后向用户显示错误/成功消息,我们如何在 AngularJS 中实现它? 我想添加回调但找不到解决方案。使用 $http.post().success
我正在使用 android studio 作为 IDE 开发一个 android 应用程序。 我的问题是: 如何在构建APK过程中排除某个目录下的某些文件? 在我的例子中,我想从构建中排除一些图像,因
在编译我的 Visual Studio C# 项目时,出现以下错误: 在“Resources”参数中多次指定项目“obj\Debug\SampleProject.Forms.MDIMain.resou
使用 CoffeeScript、Angular 和 $resource,我创建了以下工厂: angular.module('myapp', ['ngResource']).factory 'MyObj
我是一名优秀的程序员,十分优秀!