2014-03-05 61 views
0

我按照this example設置鬧鐘。設置Android鬧鐘 - 提醒應用程序

這是MainActivity類Droidgap

@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" }) public class MainActivity extends DroidGap { 
//CordovaWebView cwv; 
final static public long ONE_SECOND = 1000; 
final static public long TWENTY_SECONDS = ONE_SECOND * 20; 
public PendingIntent pi; 
public BroadcastReceiver br; 
public AlarmManager am; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  

    WebView webView =new WebView(this); 
    //enabling javascript call to native code 
    webView.getSettings().setJavaScriptEnabled(true); 

    webView.setClickable(true); 
    //Give name to interface class, "Reminder" will call through javascript 
    webView.addJavascriptInterface(new MainActivity(), "Reminder"); 

    webView.loadUrl("file:///android_asset/www/index.html"); 
    setContentView(webView);   

} 

這項工作很好,它集報警及消防適當延長,

@Override 
public void onStart(){ 
    super.onStart(); 
    setup(); 
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 
      TWENTY_SECONDS, pi); //This code works 
} 

雖然我嘗試用別的方法必須通過相同的代碼javascript其給予NullPointerException,這是我的JavascriptInterface,

@JavascriptInterface 
public void showToast(String mssg) { 

    Log.v("AlrmMNG", am.toString());//Even this log is not working 
     am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 
       TWENTY_SECONDS, pi); 

Log.v("Alarm end", "Alarm set"); 
} 

這是logcat的

03-05 12:25:58.330: E/AndroidRuntime(3444):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
03-05 12:55:59.710: W/System.err(3640): java.lang.NullPointerException 
03-05 12:55:59.710: W/System.err(3640):  at com.agrando.reminder_level1.MainActivity.showToast(MainActivity.java:67) 
03-05 12:55:59.710: W/System.err(3640):  at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 
03-05 12:55:59.720: W/System.err(3640):  at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27) 
03-05 12:55:59.730: W/System.err(3640):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-05 12:55:59.730: W/System.err(3640):  at android.os.Looper.loop(Looper.java:136) 
03-05 12:55:59.730: W/System.err(3640):  at android.os.HandlerThread.run(HandlerThread.java:61) 
03-05 12:55:59.830: I/chromium(3640): [INFO:CONSOLE(25)] "Uncaught Error: Error calling method on NPObject.", source: file:///android_asset/www/index.html (25) 

我在幾個不同的方法,但同樣的結果。試過這個(我沒有在這裏添加設置()的代碼,你可以從上面的鏈接中找到它。 )請幫助**
*
這裏是link to project files * **

+0

'新MainActivity()'是錯誤不能實例活動類 – Raghunandan

+0

@Raghunandan - 當然可以,但我想這使用「新的測試(本)」類,但同樣的結果。在測試類中我有showToast()方法。測試類擴展MainActivity – shalin

+0

什麼是測試類? – Raghunandan

回答

1

amAlarmManager實例null你忘了初始化befo前再利用,從而做到爲:

am=(AlarmManager)MainActivity.this.getSystemService(Context.ALARM_SERVICE); 
+0

在設置警報之前,我是否需要一次又一次地啓動它?我開始在onStart() 。 – shalin

+0

@saw:你的意思是你在'setup'裏初始化了它?那麼確定不需要再次初始化它。 –

+0

@saw:但是am或pi都是null,並且還創建一個單獨的或內部的類來傳遞addJavascriptInterface方法,而不是創建MainActivity對象 –