2013-11-30 3 views
1

У меня проблемы с моим классом коммутатора в приложении для Android, и я относительно новичок в Java. Я использую Eclipse с Android 4.3. LogCat дает мне этот выход:Переключатель вызывает приложение android для завершения/java.lang.NullPointerException

11-30 08:29:18.296: D/AndroidRuntime(1562): Shutting down VM 
11-30 08:29:18.334: W/dalvikvm(1562): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
11-30 08:29:18.354: E/AndroidRuntime(1562): FATAL EXCEPTION: main 
11-30 08:29:18.354: E/AndroidRuntime(1562): java.lang.NullPointerException 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at de.madstar.asg_erfurtvertretungsplan.Vertreter$2.onClick(Vertreter.java:83) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.view.View.performClick(View.java:4240) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.view.View$PerformClick.run(View.java:17721) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.os.Handler.handleCallback(Handler.java:730) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.os.Looper.loop(Looper.java:137) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at java.lang.reflect.Method.invoke(Method.java:525) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-30 08:29:18.354: E/AndroidRuntime(1562):  at dalvik.system.NativeStart.main(Native Method) 

My App: Vertreter.java (Мои замечания на немецком языке, не пугайтесь: D):

package de.madstar.asg_erfurtvertretungsplan; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Button; 

public class Vertreter extends Activity implements android.view.View.OnClickListener { 

public Vertreter() { 
    super(); 
    } 

public Button btnHeute; 
public Button btnMorgen; 
public WebView WV; 
public int foo = 1; 

//Teil vom Day-Checker von btnMorgen 
public enum Day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 
Day day; 
public Vertreter(Day day) { 
    this.day = day; 
} 




@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_vertreter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.vertreter, menu); 

    WV = (WebView)findViewById(R.id.webView1); 

    btnHeute = (Button)findViewById(R.id.button1); 
    btnHeute.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) {...}); 


    btnMorgen = (Button)findViewById(R.id.button2); 
    btnMorgen.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on click 

      SimpleDateFormat formatter1 = new SimpleDateFormat ("yyyy-MM-"); 
      SimpleDateFormat formatter2 = new SimpleDateFormat ("dd"); 

      Date currentTime = new Date(); 


      //Prüfen ob Freitag,Samstag oder Sontag um auf Montag zu springen 
      switch(day) {   
      case FRIDAY: 
       foo = 3; 
       break; 

      case SATURDAY: 
       foo = 2; 
       break; 

      case SUNDAY: 
       foo = 1; 
       break; 

      case MONDAY: 
       foo = 1; 
       break; 

      case TUESDAY: 
       foo = 1; 
       break; 

      case WEDNESDAY: 
       foo = 1; 
       break; 

      case THURSDAY: 
       foo = 1; 
       break; 
     } 
      //formatter2 in integer umwandeln 
      int form2 = Integer.parseInt(formatter2.format(currentTime)); 



      WV.loadUrl("http://schedule.asg-erfurt.de/" + formatter1.format(currentTime) + (form2 + foo)); 
     } 
    }); 
    //  btnMorgen.setOnClickListener(this); 



    return true;  
} 

//Ab hier Optionen für dropdown menu in actionbar 
@Override 
public boolean onOptionsItemSelected(MenuItem item) {...} 

private void settingsMenuItem(){...} 

@Override 
public void onClick(View v) { 
    // TODO Nothing, just need it to run Onclick listener for buttons 

} 

} 

Я не знаю, почему мое приложение и я попытался использовать точки останова, чтобы найти источник, но я только что выяснил, что проблема, вероятно, связана с switch(day) {...}.

+0

Не могли бы вы оставить свой полный след стека? – Subbu

+2

проблема в строке 83 Vertreter.java, которая является этой линией? – madlymad

+0

Это линия с: выключатель (день) { case FRIDAY: foo = 3; break; ...} – MadTracki

ответ

0

вы работаете над переменной, которая равна null. Когда вы делаете «День день»; вы не создаете экземпляр Day, и я не вижу никакого создания Vertreter в вашем коде, так что, если вы не создаете объект с днем ​​в параметре, я предполагаю, что это ваша проблема.

Day day; 
public Vertreter(Day day) 
{ 
    this.day = day; 
} 

Итак, сначала вызовите ваш переключатель на нулевой ссылке. Надеюсь, это поможет вам.

+0

Да. Спасибо, я это уже видел. Но я хочу переключиться на дни недели, и мой метод не работает ... Знаете ли вы, как вы можете переключаться в дни недели? TY MadTracki – MadTracki

+0

Hum Я смотрел в интернете, и ваш коммутатор кажется хорошим, так что можете ли вы дать мне новую ошибку, которую вы получите без исключения нулевого указателя? вы также можете добавить некоторые распечатки журнала, чтобы получить дополнительную информацию о том, куда идет ваше приложение. Что вы хотите сделать с вашей переменной foo Я действительно не вижу этого? –

+0

OK, если я установил день, например, в субботу, он работает, и он пропускает два дня, чтобы добраться до понедельника. И foo - это просто переменная, сколько дней она должна пропустить, чтобы добраться до понедельника. Спасибо вам большое! Greetings MadTracki – MadTracki

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