2012-09-26 78 views
0

我很困惑。几天前,这工作正常。我做了一些改变,现在它的表现非常怪异。System.currentTimeMillis()返回0

我第一次调用该函数时,它返回0.第二次,稍后在代码中返回正确的时间。

我在这里粘贴大部分的类文件,所以你们可以诊断。

requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.newsdetail); 

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
selectedNewsItem = newsList.get(_index); 
      AlertDialog.Builder alert = new AlertDialog.Builder(NewsDetail.this); 

      alert.setTitle(selectedNewsItem.getTitle()); 
      WebView wv = new WebView(NewsDetail.this); 
      wv.getSettings().setUserAgentString("Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaC6-00/20.0.042; Profile/MIDP-2.1 Configuration/CLDC-1.1; zh-hk) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.2.6.9 3gpp-gba"); 
      wv.getSettings().setSupportZoom(false); 
      wv.loadUrl(selectedNewsItem.getLink()); 
      wv.setWebViewClient(new WebViewClient() 
      { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) 
       { 
        view.loadUrl(url); 
        startTime = System.currentTimeMillis(); 
        return true; 
       } 
      }); 

      alert.setView(wv); 
      alert.setOnKeyListener(new OnKeyListener() 
      { 
       boolean didItHappen = false; 
       int happencount = 0; 
       public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) 
       { 
        if(keyCode == event.KEYCODE_BACK) 
        { 
         happencount++; 
         endTime = System.currentTimeMillis(); 
         Log.d("StartTime: ", String.valueOf(startTime)); 
         Log.d("EndTime: ", String.valueOf(endTime)); 
         totalTime = (endTime - startTime)/1000; 

         if(happencount == 2) 
         { 
          Log.d("Time Spent: ", totalTime + " seconds"); 
          didItHappen = true; 
         } 
        } 
        if(happencount == 2) 
        { 
         SharedPreferences shp; 
         SharedPreferences.Editor ed;        
         shp = getSharedPreferences("timespent", MODE_PRIVATE); 
         ed = shp.edit(); 

         ed.putString("Title", selectedNewsItem.getTitle()); 
         ed.putLong("Time", totalTime); 
         ed.putString("*****", "*****");       
         ed.commit(); 

         startTime = 0; 
         endTime = 0; 
         totalTime = 0; 
         happencount = 0; 
        } 

        return false; 
       } 
      }); 
      alert.show();    
     } 
    }); 
} 
+0

把一个日志里面的函数初始化** startTime **并检查它是否被调用.. – Renjith

+0

我会的。但是它被调用,因为loadUrl函数工作正常,URL加载正常。 – Asim

+0

但你应该检查它被调用的时间。像给出的答案可能是你** onkey()**处理程序将在** startTime **被初始化之前被触发。 – Renjith

回答

3

startTime?我不确定你是否有证据表明System.currentTimeMillis()在设置startTime时返回0。在onKey()处理程序之前没有调用shouldOverrideUrlLoading的可能性更大,就是这样。

+0

但为什么它为零?如果这件事没有被召唤,它不应该给NPE吗? – Asim

+0

什么会导致NPE?这是一个“长”,对吧?如果没有其他初始化,它的值被初始化为0。 –

+0

非常感谢您的有益回应。 你说得对。该函数没有被调用。 lodUrl函数被调用,但该应用程序不会超出这个范围。 那么我该怎么做?在loadUrl函数之前移动我的System.blahblah? 编辑:试了一下。仍然不起作用:我开始认为它甚至没有进入shouldOverrideUrlLoading函数。但那么URL是如何加载的? – Asim