简体   繁体   English

尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)”

[英]Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference

I am trying to check if my application is launched for the first time.我正在尝试检查我的应用程序是否是第一次启动。 If yes, the user is asked for an input.如果是,则要求用户输入。 Then, check if Wi-Fi is connected.然后,检查 Wi-Fi 是否已连接。 If Wi-Fi is connected, I use the input provides by the user to load a WebView.如果连接了 Wi-Fi,我会使用用户提供的输入来加载 WebView。

But, the app crashes on launch with an error但是,应用程序在启动时崩溃并出现错误

Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)”

Code代码

public class MainActivity extends Activity {


ProgressBar progressbar;
WebView webView;
LayoutInflater li = LayoutInflater.from(getBaseContext());
View promptsView = li.inflate(R.layout.propmt, null);
String URL;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.activity_main);

    Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE)
            .getBoolean("isFirstRun", true);

    if (isFirstRun) {

        otherWork(promptsView);

    }


       getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit()
                .putBoolean("isFirstRun", false).commit();





    ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected()) {


    getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);

    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(false);
    webView.getSettings().setRenderPriority(RenderPriority.HIGH);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    if (Build.VERSION.SDK_INT >= 19) {
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    }       
    else {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    webView.loadUrl(URL);
    webView.setWebViewClient(new WebViewClient());
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);



       webView.setWebViewClient(new MyWebViewClient());

       progressbar=(ProgressBar)findViewById(R.id.progressBar); 

       webView.setWebChromeClient(new WebChromeClient() {

       // this will be called on page loading progress

       @Override

       public void onProgressChanged(WebView view, int newProgress) {

               super.onProgressChanged(view, newProgress);


               progressbar.setProgress(newProgress);
               //loadingTitle.setProgress(newProgress);
               // hide the progress bar if the loading is complete

               if (newProgress == 100) {
               progressbar.setVisibility(View.GONE);

               } else{
               progressbar.setVisibility(View.VISIBLE);

               }

               }

            });

       } else {

           AlertDialog.Builder AD = new AlertDialog.Builder(this);
            AD.setIcon(R.drawable.ic_launcher);
            AD.setTitle("Not Connected To Wi-Fi/WLAN");
            AD.setMessage("You need an Active Wi-Fi/WLAN on Alliance Broadband Network");
            AD.setPositiveButton(android.R.string.ok, new OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    finish();

                }
            });
            AD.show();

       }


} 

public void otherWork(View promptsView) {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            this);

    // set prompts.xml to alertdialog builder
    alertDialogBuilder.setView(promptsView);

    final EditText userInput = (EditText) promptsView
            .findViewById(R.id.editTextDialogUserInput);

    // set dialog message
    alertDialogBuilder
    .setCancelable(false)
    .setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            // get user input and set it to result
            // edit text
            //result.setText(userInput.getText());
            SharedPreferences pos;
            String fileName = "file";

            pos = getSharedPreferences(fileName, 0);
            SharedPreferences.Editor editor = pos.edit();
            editor.putString("pwd", userInput.getText().toString());      
            editor.commit();

            pos = getSharedPreferences(fileName, 0);
            String data = pos.getString("pwd", "");


            URL = data.toString();

        }
    })
    .setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            dialog.cancel();
        }
    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
}


       @Override
       public boolean onKeyDown(int keyCode, KeyEvent event) {

       if(keyCode == KeyEvent.KEYCODE_BACK){
           finish();
         }
       return super.onKeyDown(keyCode, event);
       }

       private class MyWebViewClient extends WebViewClient {


     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {

     view.loadUrl(url);
     return true;
     }
     }<br>

LogCat日志猫

05-24 01:11:19.279: E/AndroidRuntime(3719): FATAL EXCEPTION: main
05-24 01:11:19.279: E/AndroidRuntime(3719): Process: com.mavenmaverick.ipconnect, PID: 3719
05-24 01:11:19.279: E/AndroidRuntime(3719): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mavenmaverick.ipconnect/com.mavenmaverick.ipconnect.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.os.Looper.loop(Looper.java:135)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread.main(ActivityThread.java:5221)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at java.lang.reflect.Method.invoke(Native Method)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at java.lang.reflect.Method.invoke(Method.java:372)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
05-24 01:11:19.279: E/AndroidRuntime(3719): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.view.LayoutInflater.from(LayoutInflater.java:219)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at com.mavenmaverick.ipconnect.MainActivity.<init>(MainActivity.java:47)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at java.lang.reflect.Constructor.newInstance(Native Method)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at java.lang.Class.newInstance(Class.java:1572)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
05-24 01:11:19.279: E/AndroidRuntime(3719):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
05-24 01:11:19.279: E/AndroidRuntime(3719):     ... 10 more

LayoutInflater li = LayoutInflater.from(getBaseContext()); LayoutInflater li = LayoutInflater.from(getBaseContext());

First, you do not need getBaseContext() , nor do you need LayoutInflater.from() .首先,您不需要getBaseContext() ,也不需要LayoutInflater.from() Use getLayoutInflater() .使用getLayoutInflater()

Second, you cannot call methods on the Activity superclass until after super.onCreate() , except in certain situations.其次,除非在某些情况下,否则在super.onCreate()之后才能调用Activity超类上的方法。 Please postpone your initialization of promptsView until after super.onCreate() has been called.请将promptsView的初始化推迟到super.onCreate()之后。

View view = inflater.inflate(R.layout.fragment_name, container, false);
view.getContext();

Use view.getContext() wherever you need Application Context in fragments.在您需要片段中的应用程序上下文的任何地方使用view.getContext()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:尝试在空对象引用上调用虚方法&#39;java.lang.Object android.content.Context.getSystemService(java.lang.String)&#39; - error:Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 尝试调用虚拟方法 &#39;java.lang.Object android.content.Context.getSystemService(java.lang.String) - Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String) Android 应用程序返回“错误:尝试调用虚拟方法 &#39;java.lang.Object android.content.Context.getSystemService(java.lang.String)” - Android app returns "Error: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)" ViewPagerAdapter尝试在空对象引用上调用虚拟方法Context.getSystemService(java.lang.String)&#39; - ViewPagerAdapter Attempt to invoke virtual method Context.getSystemService(java.lang.String)' on a null object reference android.content.Context.getSystemService(java.lang.String)&#39;对空对象的引用 - android.content.Context.getSystemService(java.lang.String)' on a null object reference Flutter:PlatformException(错误,尝试调用虚拟方法'java.lang.Object android.app.Activity.getSystemService(java.lang.String) - Flutter:PlatformException(error, Attempt to invoke virtual method 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)' 尝试在空对象引用上调用虚拟方法 &#39;android.content.Context.getSharedPreferences(java.lang.String, int)&#39; - Attempt to invoke virtual method 'android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference 尝试在 null object 引用错误上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()' - Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference error 尝试在null对象引用上调用虚拟方法&#39;java.lang.String [] android.os.Bundle.getStringArray(java.lang.String)&#39; - Attempt to invoke virtual method 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)' on a null object reference Android错误:尝试在空对象引用上调用虚拟方法&#39;java.lang.String android.content.Intent.getStringExtra(java.lang.String)&#39; - Android Error : Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM