2017-02-21 16 views
-3

Я совершенно новичок в разработке Android. Я создал приложение под названием «серия». Если я хочу запустить свое приложение, он продолжает останавливаться и говорит мне, что есть NullPointerException ... Может ли кто-нибудь мне помочь?NullPointerException на Android Studio Project

Вот мой код:

public class MainActivity extends AppCompatActivity { 

int episode = 1; 
int season = 1; 
final Button add = (Button) findViewById(R.id.add); 

@Override 
protected void onCreate(Bundle savedInstancesState) { 
    super.onCreate(savedInstancesState); 
    setContentView(R.layout.activity_main); 

    ListView resultListView = (ListView) findViewById(R.id.series_list); 

    HashMap<String, String> nameAdresses = new HashMap<>(); 
    nameAdresses.put("The 100 ", "Season " + season + " Episode" + episode); 
    nameAdresses.put("Supernatural ", "Season " + season + " Episode " + episode); 

    List<HashMap<String, String>> listItems = new ArrayList<>(); 
    SimpleAdapter adapter = new SimpleAdapter(this, listItems, R.layout.list_item, 
      new String[]{"First Line", "Second Line"}, 
      new int[]{R.id.text1, R.id.text2}); 

    Iterator it = nameAdresses.entrySet().iterator(); 
    while (it.hasNext()) { 
     HashMap<String, String> resultsMap = new HashMap<>(); 
     Map.Entry pair = (Map.Entry) it.next(); 
     resultsMap.put("First Line", pair.getKey().toString()); 
     resultsMap.put("Second Line", pair.getValue().toString()); 
     listItems.add(resultsMap); 
    } 

    resultListView.setAdapter(adapter); 

add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      episode++; 
     } 
    }); 
    } 
} 

LogCat:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.yurivanderburg.series, PID: 2389 
       java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.yurivanderburg.series/com.example.yurivanderburg.series.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
        at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120) 
        at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:151) 
        at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31) 
        at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55) 
        at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:33) 
        at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:33) 
        at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) 
        at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) 
        at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) 
        at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) 
        at com.example.yurivanderburg.series.MainActivity.<init>(MainActivity.java:21) 
        at java.lang.Class.newInstance(Native Method) 
        at android.app.Instrumentation.newActivity(Instrumentation.java:1078) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  
        at android.app.ActivityThread.-wrap12(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:154)  
        at android.app.ActivityThread.main(ActivityThread.java:6077)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  
+0

разместим ваш журнал ошибок пожалуйста –

+0

вызова findViewById после метода setContentView в OnCreate – USKMobility

+0

Где находится StackTrace ошибки? Я предполагаю, что проблема заключается в том, что 'final Button add = (Button) findViewById (R.id.add);'. Вы должны поместить эту строку после 'ListView resultListView = (ListView) findViewById (R.id.series_list);' –

ответ

0
final Button add = (Button) findViewById(R.id.add); 

Вы добавили это за пределами OnCreate. Это запрещено в Android, вы не можете инициализировать объекты просмотра до setContentView.

1

пожалуйста, добавьте эту строку в oncreateView()

final Button add = (Button) findViewById(R.id.add); 

после

setContentView(R.layout.activity_main); 
1
final Button add = (Button) findViewById(R.id.add); 

удалить эту строку и добавьте

Button add; 

и ниже вашего setContentView добавьте эту строку

add = (Button) findViewById(R.id.add); 

надеюсь, что это поможет вам

+0

@Yuri, если это поможет вам отметить это как правильный ответ, чтобы другие получали помощь от этого. Рад помочь вам :) :) :) –

+0

Спасибо за быстрый ответ! Я поместил Button внутри класса onCreate, но проблема еще не решена. – Yuri

+0

добро пожаловать @Yuri пожалуйста amrk это как правильный ответ –

0

переместить кнопку внутри onCreate

public class MainActivity extends AppCompatActivity { 

int episode = 1; 
int season = 1; 

@Override 
protected void onCreate(Bundle savedInstancesState) { 
    super.onCreate(savedInstancesState); 
    setContentView(R.layout.activity_main); 

    Button add = (Button) findViewById(R.id.add); 

    ListView resultListView = (ListView) findViewById(R.id.series_list); 

    HashMap<String, String> nameAdresses = new HashMap<>(); 
    nameAdresses.put("The 100 ", "Season " + season + " Episode" + episode); 
    nameAdresses.put("Supernatural ", "Season " + season + " Episode " + episode); 

    List<HashMap<String, String>> listItems = new ArrayList<>(); 
    SimpleAdapter adapter = new SimpleAdapter(this, listItems, R.layout.list_item, 
      new String[]{"First Line", "Second Line"}, 
      new int[]{R.id.text1, R.id.text2}); 

    Iterator it = nameAdresses.entrySet().iterator(); 
    while (it.hasNext()) { 
     HashMap<String, String> resultsMap = new HashMap<>(); 
     Map.Entry pair = (Map.Entry) it.next(); 
     resultsMap.put("First Line", pair.getKey().toString()); 
     resultsMap.put("Second Line", pair.getValue().toString()); 
     listItems.add(resultsMap); 
    } 

    resultListView.setAdapter(adapter); 

    add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      episode++; 
     } 
    }); 
} 
}