2013-05-22 3 views
0

это было лет с момента моего последнего класса Java, не говоря уже никогда не написав JAVA на работе ..java.lang.NullPointerException из DroidGap> OnCreate> setWebChromeClient и ProgressBar реализации

В любом случае, я пытаюсь получить это приложение «Кордова», чтобы отобразить загрузочный виджет на всплывающем экране при выполнении javascript html + начальных вызовов AJAX.

Я воспользовался предложениями от this post, но я ничего не делаю правильно ... appView есть на DroidGap.java источник, поэтому он не может быть пустым. На самом деле я понятия не имею, что здесь указывает на null. Возможно, у меня этот код не в том месте?

Желание у меня было больше времени, чтобы погрузиться в вещи здесь ... если у кого-то есть предложения, я все уши, ну, все глаза в любом случае.

Этот номер pastebin post выглядит так же, как и выше, поэтому я считаю, что код progressbar за пределами 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 

Рез/макеты/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 имеет нулевое значение, но оно не должно быть в запрос super.onCreate (...) как видно here:

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); 
+0

- это 'R.layout.main' макет, содержащий' R.id.progressBar1'? Если это так, попробуйте выполнить поиск в строке выполнения следующим образом: 'progessBar1 = (ProgressBar) footer.findViewById (R.id.progressBar1);' также для ясности, в какой строке 48? – FoamyGuy

+0

строка 48: this.appView.setWebChromeClient (новый WebChromeClient() {[...] – obimod

+0

добавил footer.findViewById (R.id.progressBar1); ... хороший улов! Тем не менее, он жалуется на исключение NullPointerException. – obimod

ответ

4

Ну, исключение NullPointerException довольно просто: переменная имеет значение null, и вы пытаетесь получить доступ к полю/методу на нем.

Если линия 48 является

this.appView.setWebChromeClient(new WebChromeClient() { 

есть хороший шанс APPVIEW является недействительным.

Я не знаю Кордовы, но вы должны, вероятно, проверить жизненный цикл DroidGap и взглянуть на примеры, представленные в Javadoc.

Кажется, вам нужно вызвать super.init() в какой-то момент, чтобы инициализировать appView.

+0

выглядит как super.onCreate (...) вызывает super.init() .. спасибо за ссылку Javadoc. Проверьте это сейчас ... – obimod

+0

похоже, что это может быть проблемой импорта. wh ru Я пытаюсь создать javadoc, он много жалуется ... «package android.content не существует» и «не может получить доступ к android.content.BroadcastReceiver» и «пакет org».json не существует "... но ошибки не отображаются в eclipse до запуска – obimod

+0

Какая версия PG вы используете? Последняя версия требует вызова init, см. строку 81: https://github.com/apache/cordova-android/ BLOB/Master/рамки/SRC/орг/Apache/Cordova/CordovaActivity.java – Noogen