2016-03-15 4 views
0

Я только начал изучать Android и пытался создать приложение с тремя переключателями и другой кнопкой. когда выбран переключатель и кнопка нажата, я открыл новое действие с соответствующим изображением. Но я продолжаю получать это исключение. Как это решить? Вот код для моего основного класса (Imagelist)java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.content.Context.getPackageName()'

Intent intent= new Intent(Imagelist.this,Image_Activity.class); 
    public void onRadioButtonClicked(View view) { 

     boolean checked = ((RadioButton) view).isChecked(); 

     switch(view.getId()) { 
      case R.id.image1: 
       if (checked) 
        intent.putExtra("image", R.drawable.pic1); 
        break; 
      case R.id.image2: 
       if (checked) 
        intent.putExtra("image",R.drawable.pic2); 
        break; 
      case R.id.image3: 
       if(checked) 
        intent.putExtra("image",R.drawable.pic3); 
        break; 
     } 
    } 
    public void sendMessage(View view){ 
     Bundle extras = intent.getExtras(); 
     if (extras != null) 
     startActivity(intent); 

    } 

и для моей второй активности (Image_Activity), я положил это в методе

ImageView image_view= (ImageView) findViewById(R.id.picture); 
//picture is the id of the imageview in the xml file 

Intent intent1= getIntent() ; 
Bundle extras = intent1.getExtras(); 
if (extras != null) { 
    if (extras.containsKey("image")) { 
     int imageId = intent1.getIntExtra("image", 0); 
     image_view.setImageResource(imageId); 
    } 
} 

LogCat это показывает, OnCreate()

FATAL EXCEPTION: main 
     Process: com.example.sharath.imageapp, PID: 27615 
     java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.sharath.imageapp/com.example.sharath.imageapp.Imagelist}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2290) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) 
      at android.app.ActivityThread.access$800(ActivityThread.java:156) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:211) 
      at android.app.ActivityThread.main(ActivityThread.java:5371) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
      at android.content.ContextWrapper.getPackageName(ContextWrapper.java:132) 
      at android.content.ComponentName.<init>(ComponentName.java:77) 
      at android.content.Intent.<init>(Intent.java:4161) 
      at com.example.sharath.imageapp.Imagelist.<init>(Imagelist.java:57) 
      at java.lang.reflect.Constructor.newInstance(Native Method) 
      at java.lang.Class.newInstance(Class.java:1606) 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2280) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)  
      at android.app.ActivityThread.access$800(ActivityThread.java:156)  
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)  
      at android.os.Handler.dispatchMessage(Handler.java:102)  
      at android.os.Looper.loop(Looper.java:211)  
      at android.app.ActivityThread.main(ActivityThread.java:5371)  
      at java.lang.reflect.Method.invoke(Native Method)  
      at java.lang.reflect.Method.invoke(Method.java:372)  
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)  
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)  
+0

'NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.content.Context.getPackageName()'' –

+0

Проблема здесь 'startActivity (intent);' –

+0

Я прочитал этот поток, но вижу, как я не использую адаптер я думал, что проблема связана с чем-то еще – Jacksparrow

ответ

0

движение

Intent intent= new Intent(Imagelist.this,Image_Activity.class); 

в

public void sendMessage(View view){ 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      Intent intent= new Intent(Imagelist.this,Image_Activity.class); 
      startActivity(intent); 
     } 
} 

или

Intent intent; 
public void onRadioButtonClicked(View view) { 

    intent = new Intent(Imagelist.this,Image_Activity.class); 
    // same as it is right now 
} 

и

public void sendMessage(View view){ 
      if (intent != null) { 
       Bundle extras = intent.getExtras(); 
       startActivity(intent); 
      } 
} 

, если экземпляр намерения в рамках класса, контекст не равно нулю, так как Activity не пройти его первоначальный жизненный цикл, следовательно, в вашем случае вы пропускаете нуль, как первый параметр

+0

если я перемещаю намерение намерения = новое намерение (Imagelist.this, Image_Activity.class); в sendMessage, как я могу добавить дополнительные функции в методе onRadioButtonClicked? (поскольку намерение теперь локально для sendMessage) – Jacksparrow

+0

сбой, если я не выбираю радиообъект и нажимаю send – Jacksparrow

+0

, вы проверяете, если 'if (intent! = null) {' ? Вы делали именно то, что я написал? – Blackbelt

Смежные вопросы