- 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/
我正在使用 express并试图通过管道传输 req到远程服务器进行处理,然后通过 res 将结果通过管道传回客户端.它运行良好,但有时我认为 res由 connect-timeout 的操作结束,导
我正在尝试使用 fetch 进行简单的发布请求: const headers = new Headers({ Accept: 'application/json', 'Content-Type
我偶然发现了一个代码示例 here .引起我注意的行(跳过所有其他行): { ... void *res; ... s = pthread_join(tinfo[tnum].thread_id
我有一个 NodeJS 代码,使用请求模块向服务器发出请求。如果我使用“http.request”,代码工作正常,但在 res.on() 上显示错误使用请求来调用电话。以下是显示错误的部分: cons
我想知道这两种不同的方法在 expressjs 中是否相同? res.statusCode = 500; return res.json({ status: "error" }); 或者 r
我正在尝试在 Node.js 中制作简单的 ftp 客户端。一切正常,但我不知道如何在我的 Jade 模板中编写“singleFile.name”。 app.post('/ftp/login', fu
在frameworks/base下有这个xml文件。 /frameworks/base/core/res/res/layout/simple_dropdown_item_2line.xml 如何在我自
我是 odoo v8 的新手,我无法理解 res_partner 和 res_users 表之间的关系以及与 hr_employee 表之间的关系,它们都相关吗? 最佳答案 res.partner之间
我正在开发一个用于用户登录的小部件。基本上,当他们输入有效的帐户详细信息时,我希望它呈现相同的页面(使用 Handlebars )并声明“帐户已成功验证”之类的内容,然后 3 秒后重定向用户。 这是我
我有这种形式的数据 [ { device_id: '12335', timestamp: '2018-05-14T08:31:23.000Z', temperatur: 21,
我是 android 开发的新手,您可能会从我的问题中看出这一点。我发现我有一个 res/menu 文件夹和一个 res/layout 文件夹。它们都包含每个 Activity 的 XML 文件。但是
当我尝试按照指南中的说明在 res/menu 中创建新的菜单资源文件时,该文件夹不存在。 res/xml 也不是。有人可以告诉我如何解决这个问题吗?我尝试创建文件夹,但它不允许我这样做 最佳答案 如果
调用有什么区别: res.flushBuffer(); 对比 res.getOutputStream().flush(); 这些方法是否刷新相同的缓冲区? 如果是这样,你能告诉我这个缓冲区是如何由
为什么以下不起作用? res.send({ successMessage: 'Task saved successfully.' }); res.redirect('/'); 我基本上需要 A
我正在尝试确定是否可以同时调用 res.send(data) 和 res.render('reports')。 为了进一步详细解释,当我路由到“/reports”时,首先在我的服务器端我对返回 jso
app.get('/p/:tagId', function(req, res) { res.send("tagId is set to " + req.param("tagId")); }); 上
我在使用express.js 时遇到一些问题。我想在第一次请求时渲染我的模板,然后从路由中获取一些数据。我的路由如下所示: app.use(function (req, res, next) { r
我想根据屏幕尺寸加载 dimens.xml,但无论屏幕尺寸如何都使用相同的颜色。 我有以下目录结构 res res/values colors.xml res/values-small d
我有一张图片,rectangle.png。它的尺寸是 75x197。它位于 res/drawable 和 res/drawable-xhdpi。它在像这样的网格布局中显示了很多次(截图来自 Nexus
我很好奇返回响应和仅创建响应的区别。 我见过大量使用 return res.status(xxx).json(x) 的代码示例和res.status(xxx).json(x) . 谁能详细解释一下两者
我是一名优秀的程序员,十分优秀!