来自DroidGap的java.lang.NullPointerException> onCreate> setWebChromeClient& progressBar实现

时间:2013-05-22 16:52:43

标签: java android cordova phonegap-build

自从我上一次Java课程以来已经有好几年了,更不用说从未在工作中编写过JAVA了。

无论如何,我正在尝试使用这个Cordova应用程序在启动屏幕上渲染加载小部件,同时执行javascript html +初始AJAX调用。

我接受了来自this post的建议,但我没有做正确的事情... appView是每个DroidGap.java来源,因此不能为空。实际上我不知道这里指向null的是什么..也许我在错误的地方有这个代码?

希望我有更多时间潜入这里的事情......如果有人有一些建议,我会全力以赴,好吧,无论如何都是所有的目光。

这个pastebin post看起来与上面的相同,所以我认为在onCreate之外使用进度条代码无济于事。

package com.Project.MainActivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.ProgressBar;

import org.apache.cordova.*;

public class MainActivity extends DroidGap
{
    final Activity activity = this;
    private ProgressBar progessBar1;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        View footer = View.inflate(getContext(), R.layout.main, root);
        root.addView(footer);
        progessBar1 = (ProgressBar) findViewById(R.id.progressBar1);
        this.appView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) { 
                progessBar1.setProgress(progress * 1000);
                if(progress < 100 && progessBar1.getVisibility() == ProgressBar.GONE) {
                    progessBar1.setVisibility(ProgressBar.VISIBLE);
                }
                progessBar1.setProgress(progress);
                if(progress == 100) {
                    progessBar1.setVisibility(ProgressBar.GONE);
                }

                Log.d("Progress", progress+"");

             }
        });

        super.setStringProperty("loadingDialog", "Wait, Loading...");
        // Set by <content src="index.html" /> in config.xml

        super.loadUrl("file:///android_asset/www/index.html");
    }
}

此代码生成输出:

05-22 10:13:27.238: E/UpdateReceiver(11872): ACTION_PACKAGE_REMOVED
05-22 10:13:29.988: E/dalvikvm(14200): could not disable core file generation for pid 14200: Operation not permitted
05-22 09:37:01.394: E/AndroidRuntime(13370): FATAL EXCEPTION: main
05-22 09:37:01.394: E/AndroidRuntime(13370): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Project.MainActivity/com.Project.MainActivity.MainActivity}: java.lang.NullPointerException
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1702)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1722)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread.access$1500(ActivityThread.java:124)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:974)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.os.Looper.loop(Looper.java:130)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread.main(ActivityThread.java:3821)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at java.lang.reflect.Method.invokeNative(Native Method)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at java.lang.reflect.Method.invoke(Method.java:507)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at dalvik.system.NativeStart.main(Native Method)
05-22 09:37:01.394: E/AndroidRuntime(13370): Caused by: java.lang.NullPointerException
05-22 09:37:01.394: E/AndroidRuntime(13370):    at com.Project.MainActivity.MainActivity.onCreate(MainActivity.java:48)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-22 09:37:01.394: E/AndroidRuntime(13370):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
05-22 09:37:01.394: E/AndroidRuntime(13370):    ... 11 more

res / layouts / main.xml ...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
        <ProgressBar
        android:id="@+id/progressBar1"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:maxHeight="10dip"
        android:minHeight="10dip" />
</LinearLayout>

this.appView为null,但它不应该按照here看到的super.onCreate(...)调用:

 313     /**
 314      * Create and initialize web container with default web view objects.
 315      */
 316     public void init() {
 317         CordovaWebView webView = new CordovaWebView(CordovaActivity.this);
 318         CordovaWebViewClient webViewClient;
 319         if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
 320         {
 321             webViewClient = new CordovaWebViewClient(this, webView);
 322         }
 323         else
 324         {
 325             webViewClient = new IceCreamCordovaWebViewClient(this, webView);
 326         }
 327         this.init(webView, webViewClient, new CordovaChromeClient(this, webView));
 328     }
 329 
 330     /**
 331      * Initialize web container with web view objects.
 332      *
 333      * @param webView
 334      * @param webViewClient
 335      * @param webChromeClient
 336      */
 337     @SuppressLint("NewApi")
 338     public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
 339         LOG.d(TAG, "DroidGap.init()");
 340 
 341         // Set up web container
 342         this.appView = webView;
 343         this.appView.setId(100);
 344 
 345         this.appView.setWebViewClient(webViewClient);
 346         this.appView.setWebChromeClient(webChromeClient);

1 个答案:

答案 0 :(得分:4)

好吧,NullPointerException非常简单:变量为null,你正试图访问它上面的字段/方法。

如果第48行是

this.appView.setWebChromeClient(new WebChromeClient() {

appView很有可能为空。

我不知道Cordova,但您应该查看DroidGap生命周期并查看Javadoc中提供的示例。

似乎你需要在某个时候调用super.init()来初始化appView。

相关问题