2013-06-24 9 views
1

시작할 때 내 앱이 다운됩니다. 나는 이유를 모른다. 나는 그것이 올바르게했다라고 생각한다. 그리고시작시 매번 앱이 다운 됨

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); 
} 

} 

로그 캣,

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) 

편집

MainActivity.java (편집)을 그다지 오류 표시 일식 : 제가 첨가 후 : 웹보기 mWebview = (웹뷰) findViewById를가 (R.id.webView1); 그것은 나에게 같은 오류를 제공 * *

편집 :내가 모든 것을 편집 한 후. 여전히 충돌합니다. ive는 전체 코드를 게시했습니다.

+1

Java c/C++가 아닙니다. 필드에 액세스하기 전에 객체를 만들어야합니다. mWebView = new WebView (this)를 호출해야합니다. – Blackbelt

+0

@blackbelt 당신은 다음을 의미합니다 : WebView mWebView = new WebView (this); 어디에 넣어야합니까? inside onCreate? –

+0

네, 당신은 onCreate 안에 넣을 수 있습니다.또는 WebView가 포함 된 파일 xml을 만들고 findViewById를 사용하여 – Blackbelt

답변

0

간단한 당신은 mWebview

사용이 방법을 초기화하지 않은;

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

편집

은 내가

// 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

mWebviewnull 가능하다이 방법을 같이해야 할 것 같아요.

mWebView = new WebView(this); 

나는 당신의 접미사 m은 "회원"의 약자 생각 :

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

를하거나 시작 : 당신은 그것을 바인딩해야합니다. 따라서 onCreate 외부에서 선언하고 onCreate 메서드 내에서 바인딩하거나 초기화하십시오.

UPDATE : 당신은 WebView를 초기화하지 않은

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 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

같은 방법으로 mWebview –

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

이것은 당신의 멤버 변수를 초기화 할 때, 예를 들면, 너무 일찍 리소스에 액세스하려는 제안합니다. 액티비티 라이프 사이클에서 onCreate() 이상의 getResources() 만 호출하십시오.

mWebView은 다른 사람들이 제안한대로 null입니다. 콘텐츠 화면 계층에서 구성 요소를 찾으려면 findViewById()을 호출하기 전에 먼저 setContentView()해야합니다.

+0

어떻게 iset setContentView() –

+0

Dixit 파텔의 예제에서 볼 수 있습니다. –

+0

@ Flikkema.org 업데이트 된 질문에는 'onCreate()'이전에 리소스 액세스가 표시되지 않습니다. 그게 당신의 전체 코드입니까? 또한 logcat에는 getResources()의 NullPointerException에 더 많은 stacktrace가 있어야 정확한 문제 위치를 정확하게 찾을 수 있습니다. – laalto