NullpointerException при запуске активности

у меня есть arraylist, который делает это:

     ArrayList<Integer> id = new ArrayList<Integer>(); 
     for (int i = 0; i <= 20; i++) {
     id.add(getResources().getIdentifier("q"+i, "raw", getPackageName()));}

этот метод до небольшого изменения работал хорошо, но теперь есть сила закрыть! и я получаю этот логарифм:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{yaAli.package313.hossein110/yaAli.package313.hossein110.know}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)at android.app.ActivityThread.access$600(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at yaAli.package313.hossein110.know.onCreate(know.java:33)
at android.app.Activity.performCreate(Activity.java)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
... 12 more

Вот мой OnCreate():

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.basetxt);        
    SharedPreferences   settings=PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    ln=settings.getString("LASTREADln", null);
    if(ln.equals("-1")){ln="0";}
    if(ln!=null){
    final ScrollView s1=(ScrollView) findViewById(R.id.sV1);
    s1.post(new Runnable() {@Override
    public void run() {s1.scrollTo(0, Integer.valueOf(ln));} });}

    final MediaPlayer mp1=MediaPlayer.create(getBaseContext(), R.raw.arza);  

    String pos = getIntent().getStringExtra("key");
    String arr = getIntent().getStringExtra("list");


    TextView tvfa = (TextView)findViewById(R.id.TEXT313);

    String fontPath = "fonts/font1.ttf";
    String fontPath1 = "fonts/font2.ttf";

    Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
    Typeface tf1 = Typeface.createFromAsset(getAssets(), fontPath1);

    SharedPreferences sharedpreferences =    PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    tvfa.getRootView().setKeepScreenOn(sharedpreferences.getBoolean("scrnon", false));
    String sizefa=   sharedpreferences.getString("fontsizefa",null);
    String colorfa=   sharedpreferences.getString("fontcolorfa",null);        
    boolean style=   sharedpreferences.getBoolean("appfont", false);
    boolean music=   sharedpreferences.getBoolean("musictype", false);
    boolean curr=   sharedpreferences.getBoolean("currputfont", false);

String t = read(file(pos,arr,null)); {

if (curr){tvfa.setText(PersianReshape.reshape(t));}else{tvfa.setText(t);} // Txt 
tvfa.setTextSize(1, Float.valueOf(sizefa).floatValue());                    // Size
tvfa.setTextColor(Color.parseColor(colorfa));                               // Color
if (style) { tvfa.setTypeface(tf1); }  else {tvfa.setTypeface(tf);}         // Type
if (music) { mp1.start(); } else { mp1.stop(); }  }}                          // Play
//---------------------------------------------------------------------------- 

person hkh114    schedule 05.10.2012    source источник
comment
очевидно: что происходит в yaAli.package313.hossein110.know.onCreate(know.java:33)?   -  person njzk2    schedule 05.10.2012
comment
Кроме того, если вы используете рекомендуемую среду Eclipse (единственную, которую я пробовал), то отладка становится ошеломляюще простой. Вы поставили точку останова на эту строку и прошлись по всем функциям, чтобы увидеть, где закрадывается ноль?   -  person cloudfeet    schedule 05.10.2012
comment
У вас есть нулевой указатель в методе onCreate().   -  person Shark    schedule 05.10.2012
comment
Поскольку мы не можем сказать, какая строка 33 вашего onCreate(), вы должны помочь. Я предполагаю, что ваше представление контента изменилось, поэтому, когда вы сделали findViewById(), оно вернулось к нулю. Позже, когда вы вызовете post(), может произойти сбой. Это предположение, но только потому, что информации недостаточно.   -  person Greg Giacovelli    schedule 05.10.2012


Ответы (2)


наилучшей практикой для разработки Java является использование литеральной строки вызова .equals. поэтому вместо:

var.equals("string")

вы делаете:

"string".equals(var)

Это гарантирует, что у вас НИКОГДА не будет исключения нулевого указателя при сравнении строк.

Кроме того, похоже, что вы храните числовые значения в виде строк. По какой-то конкретной причине вы не храните их как целые числа?

person toadzky    schedule 05.10.2012

Скорее всего здесь

ln=settings.getString("LASTREADln", null);

это должно быть

ln=settings.getString("LASTREADln", "");

поскольку null установлено как ваше значение по умолчанию, если этот ключ не существует или не содержит ничего, поэтому, если он ничего не содержит, вы должны установить его в "", и для ваших сравнений строк вы должны искать !ln.contentsEquals("") вместо того, чтобы проверять его нулевой

то же самое касается всех строк, которые вы получаете из файла настроек. установите значение по умолчанию "" вместо null

person CQM    schedule 05.10.2012
comment
если это помогло вам, пожалуйста, проголосуйте за него, если это решило вашу основную проблему, отметьте это также как правильное - person CQM; 05.10.2012