-3

I have error when using getRessources() to get values from string.xml.

Here my file:

import android.app.Activity;
import android.util.Log;
import android.content.Context;


public class mailing extends Activity {
    int[] mail_images= new int[]{0, R.drawable.simple, R.drawable.p};
    String[] mail_array_spinner = new String[]{getResources().getString(R.string.type_select),getResources().getString(R.string.maillist)};

    public int get_image_id(String check){
        int got=-1;

        for(int i=0;i<mail_images.length;i++){
            if(mail_array_spinner[i].equals(check)){
                got=i;
            }
        }
        return mail_images[got];
    }
}

My application stopped when reading the code and the error come form:

String[] mail_array_spinner = new String[]{getResources().getString(R.string.type_select),getResources().getString(R.string.maillist)};

Here the log:

01-02 16:59:39.255 6087-6087/com.example.xx.cxeapp D/typei: mail
01-02 16:59:39.257 6087-6087/com.example.xx.cxeapp D/AndroidRuntime: Shutting down VM
01-02 16:59:39.258 6087-6087/com.example.xx.cxeapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.xx.cxeapp, PID: 6087
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:87)
        at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
        at com.example.mouh.myapplication.mail.<init>(mail.java:11)
        at Adapters.InProgressListAdapter.getView(InProgressListAdapter.java:62)
        at android.widget.AbsListView.obtainView(AbsListView.java:2346)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1280)
        at android.widget.ListView.onMeasure(ListView.java:1188)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610)
        at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:677)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18788)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1489)
        at android.view.View.measure(View.java:18788)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:901)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1112)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:632)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
        at android.view.View.measure(View.java:18788)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)

Any help to fix this issue please ? thanks.

Dici
  • 25,226
  • 7
  • 41
  • 82
J. Arnold
  • 23
  • 4

2 Answers2

1

You have not written your code inside the onCreate(), do the following

    public class mailing extends Activity {
        int[] mail_images; 
        String[] mail_array_spinner;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mail_images= new int[]{0, R.drawable.simple, R.drawable.p};
            mail_array_spinner = new String[]{getResources().getString(R.string.type_select),getResources().getString(R.string.maillist)};


    }

      public int get_image_id(String check){
            int got=-1;
            mail_images= new int[]{0, R.drawable.simple, R.drawable.p};
            mail_array_spinner = new String[]{getResources().getString(R.string.type_select),getResources().getString(R.string.maillist)};
            for(int i=0;i<mail_images.length;i++){
                if(mail_array_spinner[i].equals(check)){
                    got=i;
                }
            }
            return mail_images[got];
        }

}

Parag Kadam
  • 3,620
  • 5
  • 25
  • 51
  • Thank for your answer, but when i made this changes, i got `get_image_id()` not recognized ! same as `mail_images` and `mail_array_spinner` – J. Arnold Jan 02 '16 at 22:38
  • Same thing :( i thing must be global or something like this. – J. Arnold Jan 02 '16 at 22:44
  • What are you trying to achieve with this code? You have not called the method `get_image_id()` to begin with. – Parag Kadam Jan 02 '16 at 22:47
  • the solution to fix it is to add: `int[] mail_images; String[] mail_array_spinner;` `before protected void onCreate` but doing this follow me to another error: `java.lang.NullPointerException: Attempt to get length of null array` – J. Arnold Jan 02 '16 at 22:51
  • Yes the reason is that you are not calling your `get_image_id()` from your `onCreate()`. – Parag Kadam Jan 02 '16 at 22:54
  • In this file i dont have to call it, but this not resolved the problem as it return null and crash application. – J. Arnold Jan 02 '16 at 22:57
  • i seen this,, but didn't solved the problem, return this error: `java.lang.NullPointerException: Attempt to get length of null array` – J. Arnold Jan 02 '16 at 23:02
  • Add most recent logcat. – Parag Kadam Jan 02 '16 at 23:04
  • `java.lang.NullPointerException: Attempt to get length of null array - at com.example.sneh.myapplication.image_assoc.get_image_id(image_assoc.java:27)` here the logs - he point to this line: `for(int i=0;i – J. Arnold Jan 02 '16 at 23:07
  • Things look fine to me.Make sure you have copy pasted the exact code that i have posted. – Parag Kadam Jan 02 '16 at 23:15
1

You are attempting to call getResources() before your activity has been created, Which results in a null pointer exception. call getResources in the onCreate() method.

public class mailing extends Activity {
int[] mail_images; 
String[] mail_array_spinner; 
    public void onCreate(Bundle savedInstanceState){
      super.OnCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      mail_images  = new int[]{0, R.drawable.simple, R.drawable.p};
      mail_array_spinner =  new String[]{getResources().getString(R.string.type_select),getResources().getString(R.string.maillist)};
    }
    public int get_image_id(String check){
        int got=-1;

        for(int i=0;i<mail_images.length;i++){
            if(mail_array_spinner[i].equals(check)){
                got=i;
            }
        }
        return mail_images[got];
    }
}
Yaw Asare
  • 548
  • 4
  • 10