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

2024-04-06

我正在尝试检查我的应用程序是否是第一次启动。如果是,则要求用户输入。然后,检查 Wi-Fi 是否已连接。如果连接了 Wi-Fi,我将使用用户提供的输入来加载 WebView。

但是,该应用程序在启动时崩溃并出现错误

尝试在空对象引用上调用虚拟方法“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());

首先,你不需要getBaseContext(),你也不需要LayoutInflater.from(). Use getLayoutInflater().

其次,您不能调用Activity超类直到之后super.onCreate(),但在某些情况下除外。请推迟您的初始化promptsView直到之后super.onCreate()已被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Java生成范围内不重复的随机数

    我想生成 1 到 4 范围内的随机数 包括 4 这是我的代码 int num r nextInt 4 1 r is instance of Random 但是 我在循环中运行上述代码 并且不想重复随机数 现在发生的事情我经常得到 1 1 1
  • Java OR 运算符优先级

    如何在 Java 中以 if 的方式链接条件语句b是假的 不如不检查c If a and c是假的 并且b是真的 确实c会被检查吗 if a b c 我正在寻找 PHP 所拥有的类似功能 但两者之间存在差异OR and 爪哇 如果左操作数是
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • 堆内存与对象内存

    根据一篇关于Java内存和特性的论文 内存分数分为两种类型 堆内存 即应用程序在运行时消耗的内存 对象内存 即程序中使用的各种对象分配的内存 例如整数和字符串等 他们的意思是stack当他们说时的记忆object记忆 或者它们是什么意思 很
  • 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

    我将 Spring jdbc 与 org apache commons dbcp BasicDataSource 结合使用 使用用户名和密码进行连接 我想使用BasicDataSource 因为我只有一个连接 我有这个代码
  • 在类路径中使用通配符调用 java 失败

    我当前目录中有一些 jar 它们都需要位于类路径中 因此我想对类路径使用通配符约定 命令行是 java exe classpath org python util jython args 但是我收到这个错误 Exception in thr
  • 膨胀类 android.support.v7.internal.widget.NativeActionModeAwareLayout 时出错

    如果您以前解决过这个问题 请有人帮助我 我正在尝试使用材料设计制作一些东西 以便应用程序可以运行到 API 10 的低版本 我的代码中没有任何错误 但我不断收到此错误 Android 日志猫 06 01 05 05 37 414 E And
  • 在所有方法调用上允许类型见证有什么意义?

    假设我们有两种方法 如下所示 public static
  • 一起使用 String 和 int 时的 System.out.println 行为 [重复]

    这个问题在这里已经有答案了 考虑下面的代码片段 public class Student public static void main String args int a 3 int b 4 System out println a b
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • Spring 非托管 bean 的依赖注入

    我有一个非托管的 JPA 域类 它是通过实例化的new操作员 UserAccount account new UserAccount userRepository save account In my UserAccount类 我有一个be
  • 如何在不打开浏览器的情况下查看 Android 应用程序中的网页?

    嘿 我正在开发一个 Android 应用程序 我想连接到该应用程序内的网络 不过 我在某种程度上尝试过 WebView 但它在我的目录中显示的文件很好 但当连接到 google com 时 它显示错误 然后我添加了这个文件
  • android Analytics v4 最简化

    我正在尝试以最简单的方式将谷歌分析连接到我的应用程序 我想实现analytics v4 因为google说他们很快就会强制升级到它 所以我不想做两次同样的工作 在这种情况下 谷歌的教程不是很有效 合并他们在那里所说的内容和我在互联网上找到的
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 如何使用JSqlParser向sql添加where条件?

    我想用JSqlParser向sql添加where条件 例如 Before select from test table where a 1 group by c After select from test table where a 1
  • 有没有办法检测apk是否存储在SD卡上?

    有没有办法检测apk是否存储在SD卡上 如何 使用 getApplicationInfo sourceDir http developer android com reference android content pm Applicati
  • 当键位于父类中时,如何将一对多集合映射到连接的子类

    我想将一对多集合映射到子类 但集合的键是父类的属性 目前我正在映射 AbstractFoo Foo 和 Bar 类 如下所示
  • 尝试接收 UDP 多播时出现空指针异常

    在尝试了几次让简单的 UDP 多播接收器工作后 我感到很困惑 在我自己的代码无法按预期工作后 我尝试了 vertx 文档中发布的确切示例 DatagramSocket socket vertx createDatagramSocket ne
  • Swing:如何创建事件并将其分派给组件?

    我需要将一些事件发送到 Swing 中的组件 因此它的处理方式就像任何用户生成的标准 Swing 事件一样 基本上 类似于宏记录器 然后是 JEditorPane 的执行器 但我需要对生成的事件有更多的控制 所以 假设我有一个编辑 我想 捕

随机推荐