2013-06-24 4 views
1

Мое приложение падает при запуске. Я не знаю, почему. Думаю, я сделал все правильно. И затмить Doesnt ошибки шоу,Сбой приложений каждый раз при запуске

MainActivity.java (Edited)

package org.flikkema.robin.dagrooster; 

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.webkit.WebView; 
import android.widget.Toast; 

@SuppressLint("SimpleDateFormat") 
public class MainActivity extends Activity { 

// Declare as global variable 
    WebView mWebview; 
public boolean onCreateOptionsMenu(Menu menu){ 
    // Make MenuInflater 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    inflater.inflate(R.menu.main, menu); 
// Return True 
return true; 
} 

@SuppressLint("SetJavaScriptEnabled") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(this, "Laden van roosterwijzigingen.", 
    Toast.LENGTH_SHORT).show(); 
    mWebview =(WebView) findViewById(R.id.webView1); 
    // Enable JavaScript 
    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 
    mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 

    } 


public boolean onOptionsItemSelected(MenuItem item) { 
    mWebview =(WebView) findViewById(R.id.webView1); 
    switch (item.getItemId()) { 
    // If button 1 is pressed 
    case R.id.about: 
     // Toast Message 
     Toast.makeText(this, "App made by Robin Flikkema & Sander ten Hove", 
     Toast.LENGTH_LONG).show(); 
     break; 
    // If Share is pressed 
    case R.id.menu_share: 
     // Toast message 
     Toast.makeText(this, "Roosterwijzigingen delen", 
     Toast.LENGTH_SHORT).show(); 
     // Making share selector 
     String shareBody = "Er vervallen nieuwe lessen! Check het uit, met de Eemsdeltacollege Roosterwijzigingen App."; 
     Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
      sharingIntent.setType("text/plain"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Eemsdeltacollege Roosterwijzigingen"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 
      startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.share_using))); 
     break; 
    // If Next is pressed 
    case R.id.menu_next: 
     // Toast message 
     Toast.makeText(this, "Morgen", 
     Toast.LENGTH_SHORT).show(); 
     // Calculate Date 
     Calendar cal=Calendar.getInstance(); 
     int currentDay=cal.get(Calendar.DAY_OF_MONTH); 
     //Set the date to 1 day 
     cal.set(Calendar.DAY_OF_MONTH, currentDay+1); 
     while (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || 
       cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { 
      cal.add(Calendar.DATE, 1); 
     } 
     Date DateDate = cal.getTime(); 
     SimpleDateFormat postFormater = new SimpleDateFormat("dd-M-yyyy"); 

     String newDateStr = postFormater.format(DateDate); 
     // Set URL 
     mWebview .loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php?datum="+newDateStr); 
     setContentView(mWebview); 
     break; 
    // If Refresh is pressed 
    case R.id.menu_refresh: 
     // Toast message 
     Toast.makeText(this, "Roosterwijzigingen ophalen.", 
     Toast.LENGTH_SHORT).show(); 
     // Load URL 
     mWebview .loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 
     setContentView(mWebview); 
     break; 
    // If Overmorgen is pressed 
    case R.id.menu_nextt: 
     // Toast message 
     Toast.makeText(this, "Overmorgen", 
     Toast.LENGTH_SHORT).show(); 
     // Calculate Date 
     Calendar cal1=Calendar.getInstance(); 
     int currentDay1=cal1.get(Calendar.DAY_OF_MONTH); 
     //Set the date to 1 day 
     cal1.set(Calendar.DAY_OF_MONTH, currentDay1+2); 
     while (cal1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || 
       cal1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { 
      cal1.add(Calendar.DATE, 1); 
     } 
     Date DateDate1 = cal1.getTime(); 
     SimpleDateFormat postFormater1 = new SimpleDateFormat("dd-M-yyyy"); 

     String newDateStr1 = postFormater1.format(DateDate1); 
     // Set URL 
     mWebview .loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php?datum="+newDateStr1); 
     setContentView(mWebview); 
     break; 
    // If Help is pressed 
    case R.id.action_settings: 
     // Toast message 
     Toast.makeText(this, "Laden van de Help pagina.", 
     Toast.LENGTH_SHORT).show(); 
     // Load Help 
     mWebview .loadUrl("https://dl.dropboxusercontent.com/u/53488707/RoosterwijzigingenApp/index.html"); 
     setContentView(mWebview); 
     break; 
    // If Vandaag is pressed 
    case R.id.menu_back: 
     // Toast message 
     Toast.makeText(this, "Vandaag", 
     Toast.LENGTH_SHORT).show(); 
     // Load Help 
     mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 
     setContentView(mWebview); 
     break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

} 

LogCat

06-24 14:41:52.079: E/AndroidRuntime(5986): FATAL EXCEPTION: main 
06-24 14:41:52.079: E/AndroidRuntime(5986): java.lang.RuntimeException: Unable to   instantiate activity   ComponentInfo{org.flikkema.robin.dagrooster/org.flikkema.robin.dagrooster.MainActivity}:  java.lang.NullPointerException 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.os.Looper.loop(Looper.java:137) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at dalvik.system.NativeStart.main(Native Method) 
06-24 14:41:52.079: E/AndroidRuntime(5986): Caused by: java.lang.NullPointerException 
06-24 14:41:52.079: E/AndroidRuntime(5986):  at android.content.ContextWrapper.getResources(ContextWrapper.java:81) 

EDIT: После того, как я добавил: WebView mWebview = (WebView) findViewById (R.id.webView1); * Это дает мне ту же ошибку *

EDIT:После того как я отредактированы все. он все еще падает. Ив опубликовал полный код.

+1

Java это не c/C++. Вы должны создать объект перед доступом к его полю. вам нужно вызвать mWebView = новый WebView (это); – Blackbelt

+0

@blackbelt вы имеете в виду: WebView mWebView = новый WebView (this); Где я могу разместить это? внутри onCreate? –

+0

да, вы можете положить внутри onCreate.или вы можете создать файл xml, который содержит WebView, и использовать findViewById – Blackbelt

ответ

0

Простой вы не инициализировать mWebview

использовать этот способ;

WebView mWebview =(WebView) findviewById(R.id.webview_id); 

EDIT

я думаю, что вы должны сделать, как таким образом

// Declare as global variable 
    WebView mWebview; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mylayoutfile); 

     Toast.makeText(this, "Laden van roosterwijzigingen.", 
     Toast.LENGTH_SHORT).show(); 

     mWebview =(WebView) findviewById(R.id.webview_id); 
     // Enable JavaScript 
     mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 
     mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 

     } 
+0

, он говорит, что mWebview не может быть разрешен, когда я использую WebView mWebView = (WebView) findViewById (R.id.webView1); –

+0

У вас создан файл макета и в этом месте Webview –

+0

Это действительно работало :), но мне нужно использовать: WebView mWebview = (WebView) findviewById (R.id.webview_id); в каждом методе –

0

mWebview можно null. Вы должны обвили его:

mWebView = (WebView) findViewById(R.id.YourWebView); 

или инициировать его:

mWebView = new WebView(this); 

Я думаю, что ваш индекс т означает "член". Поэтому объявляйте его за пределами onCreate и связать или инициировать его внутри метода onCreate.

UPDATE:

private WebView mWebview; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.mylayoutfile); 

Toast.makeText(this, "Laden van roosterwijzigingen.", 
Toast.LENGTH_SHORT).show(); 

mWebview =(WebView) findviewById(R.id.webview_id); 
// Enable JavaScript 
mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 
mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 

} 
+0

Когда я использую это: mWebView = (WebView) findViewById (R.id.webView1); говорит, что mWebView не может быть разрешен переменной –

1

Вы не инициализирован WebView.

WebView mWebview ; 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mWebview = new WebView(this);  
     Toast.makeText(this, "Laden van roosterwijzigingen.", 
             Toast.LENGTH_SHORT).show(); 
     // Enable JavaScript 
     mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 
     mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php"); 
     setContentView(mWebview); 
} 
+0

Нужно ли инициализировать WebView в каждом методе? –

+0

@ Flikkema.org я не понимаю каждый метод ?. Вы можете объявить 'WebView mWebview' как член класса, инициализируя его' onCreate'. – Raghunandan

+0

ive больше методов, где я использую mWebview –

0
Caused by: java.lang.NullPointerException 
    at android.content.ContextWrapper.getResources(ContextWrapper.java:81) 

Это говорит о том что вы пытаетесь получить доступ к ресурсам слишком рано, например, при инициализации ваших переменных-членов. Только звоните getResources() в onCreate() или позже в жизненном цикле деятельности.

После того, как вы установили это, вы обнаружите, что mWebView является null, как предложено другими. Прежде чем звонить findViewById(), вам нужно будет setContentView(), чтобы найти компоненты в иерархии вашего содержимого.

+0

Как iset setContentView() –

+0

вы видите это в примере от Dixit Patel. –

+0

@ Flikkema.org Обновленный вопрос не показывает доступ к ресурсам до 'onCreate()'. Это ваш полный код? Кроме того, ваш logcat должен содержать больше stacktrace в этом исключении NullPointerException в getResources(), чтобы помочь вам точно определить точное местоположение проблемы. – laalto