2013-08-19 2 views
1

안드로이드 응용 프로그램에서 webview를 사용하고 있으며 설정을 저장 한 후 응용 프로그램이 다시 시작될 때 자동으로 시작되도록하려고합니다. 중단 점을 설정 한 후 나는 라인에 충돌한다 "mWebView.setWebChromeClient (새 WebChromeClient를()"응용 프로그램을 확인할 수 있었다 에러 소스는 디버거에서 찾을 수 없습니다 WebActivity에서 내가 얻을 WebActivityWebview 시작시 안드로이드 응용 프로그램이 충돌합니다.

:..

public class WebActivity extends Activity 
{ 

WebView mWebView; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    final Activity mActivity = this; 

    // Adds Progress bar Support 
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    setContentView(R.layout.activity_web); 


    // Makes Progress bar Visible 
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 

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

    mWebView.getSettings().setBuiltInZoomControls(true); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setDomStorageEnabled(true); 

    mWebView.setWebViewClient(new WebViewClient()); 
    mWebView.setWebChromeClient(new WebChromeClient() 
    { 
     public void onProgressChanged(WebView view, int progress) 
     { 
      //Make the bar disappear after URL is loaded, and changes string to Loading... 
      findViewById(R.id.webview).setVisibility(View.GONE); 
      mActivity.setTitle("Loading..."); 
      mActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 

      // Return the app name after finish loading 
      if(progress == 100) 
      { 
       mActivity.setTitle(R.string.webtitle); 
       findViewById(R.id.webview).setVisibility(View.VISIBLE); 
      } 
     } 
    }); 
    Bundle b = getIntent().getExtras(); 
    mWebView.loadUrl("http://" + (b.getString("iptextfield")) + "/index.html"); 
    WebView wv = (WebView) findViewById(R.id.webview); 
    wv.setWebViewClient(new WebViewClient() 
    { 
    boolean toast_f = true; 
     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
     { 
      Context context = getApplicationContext(); 
      CharSequence text = "Loading...(this may take up to 60 seconds)"; 

      if (toast_f) 
      { 
       toast_f = false; 
       int duration = Toast.LENGTH_LONG; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.setGravity(Gravity.CENTER|Gravity.CENTER,0,0); 
       toast.show(); 
      } 

      Bundle b = getIntent().getExtras(); 
      mWebView.loadUrl("http://" + (b.getString("iptextfield")) + "/index.html"); 
     } 
    }); 
} 

}

주요 활동 : 여기

public class MainActivity extends Activity 
{ 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Intent intent; 

    SharedPreferences sharedPref= getSharedPreferences("mypref", 0); 
    String GetStatus = sharedPref.getString("DataSaved", ""); 

    if (GetStatus.equals("true")) 
    { 
     intent = new Intent(this, WebActivity.class); 
    } 
    else 
    { 
     intent = new Intent(this, SetupActivity.class); 
    } 

    startActivity(intent); 
    finish(); 
} 

} 

그냥 응용 프로그램을 실행할 때 내가 얻을 로그 캣 오류입니다 :

08-19 12:25:54.407: W/dalvikvm(15158): threadid=1: thread exiting with uncaught  exception (group=0x4202d438) 
08-19 12:25:54.407: E/AndroidRuntime(15158): FATAL EXCEPTION: main 
08-19 12:25:54.407: E/AndroidRuntime(15158): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.webpage.WebActivity}: java.lang.NullPointerException 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2073) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2098) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread.access$600(ActivityThread.java:138) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.os.Looper.loop(Looper.java:137) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread.main(ActivityThread.java:4911) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at java.lang.reflect.Method.invoke(Method.java:511) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at dalvik.system.NativeStart.main(Native Method) 
08-19 12:25:54.407: E/AndroidRuntime(15158): Caused by: java.lang.NullPointerException 
08-19 12:25:54.407: E/AndroidRuntime(15158): at com.webpage.WebActivity.onCreate(WebActivity.java:58) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.Activity.performCreate(Activity.java:5240) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) 
08-19 12:25:54.407: E/AndroidRuntime(15158): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2037) 
08-19 12:25:54.407: E/AndroidRuntime(15158): ... 11 more 
+1

실제로 예외는 'NullPointerException'입니다. 'WebActivity.java'의''58'' 라인은 무엇입니까? –

+0

@ A - C 행 58은 mWebView.loadUrl ("http : //"(b.getString ("iptextfield")) + "/index.html")입니다. 나는 sharedpreferences에서 iptextfield에 대한 정보를 저장하지 않았습니다. – user2665581

+0

네, 그게 문제가 될 것입니다. 요청한 값이 존재하지 않으면'getString'은 null을 반환합니다. 비 전통적으로 이름 붙여진'GetStatus' 변수는 또한 null이 될 위험이 있습니다. 그러나 – 323go

답변

1

ienot 널 (null) 값, 같은 경우에 발생

NullPointerException가 발생했습니다 라인은 58이다,

mWebView.loadUrl("http://"(b.getString("iptextfield")) + "/index.html"); 
언뜻

, mWebView, b.getString()이거나 B null 수 있었다.

mWebView은 이미 문제없이 사용되었으므로 null이 아니어야합니다.

b.getString()에 의해 반환 된 문자열은 다른 두 문자열과 연결되므로 NPE를 반환하지 않습니다.

그 자체가 b입니다.

MainActivity과 같이 WebActivity을 시작하지만 Intent에는 추가하지 않는 것이 좋습니다.

다음 Activity을 시작하기 전에 Intent#putExtra()을 사용하여 추가 정보를 추가하십시오.

if (b != null){ 
    mWebView.loadUrl("http://" + (b.getString("iptextfield")) + "/index.html"); 
} 

당신은 조금이라도 더 나아가 실제로 당신이 키를 포함 b를 있는지 확인할 수 있습니다 : @siik이 제안

그런 다음, 당신의 Bundle이 null이 있는지 확인하는 것이 좋습니다입니다 찾고.

if (b != null && b.containsKey ("iptextfield")){ 
     mWebView.loadUrl("http://" + (b.getString("iptextfield")) + "/index.html"); 
} 
+0

도움을 주셔서 감사합니다. – user2665581

+0

@ user2665581 문제 없습니다, 스택 오버플로에 오신 것을 환영합니다 :-) –

0

당신은 확인해야 Bundle b = getIntent().getExtras(); 반환 더 완전한 답변을 위해서

관련 문제