Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getResource Error

Tags:

android

every time I call getResources in my main activity it results in an error and the app is forced to quit. This also happens if I call getApplicationContext().getResources() and even in a totally new project in Eclips. Do I need to do anything before the call? Error on AVD with Android 2.1 and LG GW620 with OpenEtna (2.1)

MainActivity.java:

package com.robin.blatest;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;

public class MainActivity extends Activity {

    Resources res = this.getResources();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.robin.blatest"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

LogCat:

W/dalvikvm(  229): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime(  229): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  229): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.robin.blatest/com.robin.blatest.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(  229):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
E/AndroidRuntime(  229):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime(  229):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(  229):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime(  229):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  229):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  229):    at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(  229):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  229):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  229):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(  229):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(  229):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  229): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  229):    at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
E/AndroidRuntime(  229):    at com.robin.blatest.MainActivity.<init>(MainActivity.java:9)
E/AndroidRuntime(  229):    at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(  229):    at java.lang.Class.newInstance(Class.java:1479)
E/AndroidRuntime(  229):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(  229):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
E/AndroidRuntime(  229):    ... 11 more

Cheers Robin

Edit: Added Code

like image 498
globin Avatar asked Jul 16 '11 19:07

globin


2 Answers

You can't do

Resources res = this.getResources();

in the field declaration. It's null at that point!

Put it in onCreate instead.

You'd do something like:

private Resources res = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    res = this.getResources();
}

If you wanted a field containing that data.

But it's just as easy to do this.getResources() whenever you need it.

like image 189
Ribose Avatar answered Nov 06 '22 13:11

Ribose


The getResources()-method is a method from the Context-class.

When in an Activity, you can use this to access it.

But you should show us some of your code.

like image 39
Lukas Knuth Avatar answered Nov 06 '22 15:11

Lukas Knuth