2011-12-08 27 views
1

嗨我想对下面的代码有一个解释。这里有时我的javascript功能正在工作,有时候不是。结果,我不知道问题在哪里。在这里,我的index.html文件自动加载地图位置。然后我用当前经纬度,lng作为参数调用javascript函数。所以,最初它会加载默认地图。然后,地图应该被javascript函数覆盖。问题有时会发生,有时不会。所以,我想对此有一个答案。Android Webview不规则加载问题

public class MapOptionsDemoModified extends Activity{ 
    //Geocoder geocoder; 
    WebView mWebView; 
    LocationManager mlocManager=null; 
    LocationListener mlocListener; 
    private MyLocationOverlay myLocationOverlay; 
    protected MapView map; 
    private RadioButton mapButton; 
    private RadioButton satelliteButton; 
    private ToggleButton trafficToggle; 
    private ToggleButton labelsToggle; 
    private Configuration config; 
    EditText LOC; 
    Button routesbtn,settingsbtn; 
    public String location="State Street" 
    double lati,longi; 
    GeoPoint currentLocation; 
    double curlat,curlong; 
    InputMethodManager imm; 
    //String adrs; 
    double latitude=40.07546; 
    double longitude=-76.329999; 


    String adrs=""; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map_options_modified); 
     lati=34.1161; 
     longi=-118.149399; 
     adrs=""; 
     routesbtn=(Button)findViewById(R.id.mom_bt2); 

     mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     mlocListener = new MyLocationListener(); 
     mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
     mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 


     mWebView = (WebView) findViewById(R.id.webview); 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     mWebView.loadUrl("file:///android_asset/index.html"); 
     //mWebView.loadUrl("http://www.google.com"); 
     webSettings.setBuiltInZoomControls(true); 
     webSettings.setSupportZoom(true); 
     imm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 




     /* taking data from caller activity page */ 
     // ###################Receiving data starts 
     Bundle extras = getIntent().getExtras(); 
     if (extras == null) { 
     return; 
     } 
     lati=extras.getDouble("latitude"); 
     longi = extras.getDouble("longitude"); 
     adrs=extras.getString("adrs"); 

     // ##### Receiving data ends 


     AlertDialog.Builder pdb=new AlertDialog.Builder(MapOptionsDemoModified.this);   
     pdb.setTitle("GPS"); 
     pdb.setMessage(adrs+" "+Double.toString(lati)+" "+Double.toString(longi)); 
     pdb.setPositiveButton("Ok", null); 
     pdb.show(); 


     mWebView.loadUrl("javascript:getCurrentLocation("+lati+","+longi+")"); 


     routesbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       if(mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
        //while(j<cnt) 
        //{ 

         mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
         if(MyLocationListener.latitude>0) 
         { 
          latitude=MyLocationListener.latitude; 
          longitude=MyLocationListener.longitude; 
          //flag=1; 

          Geocoder gcd = new Geocoder(MapOptionsDemoModified.this, Locale.getDefault()); 
          List<Address> addresses; 
          try { 
           addresses = gcd.getFromLocation(latitude,longitude, 5); 
           if (addresses.size() > 0) 
           { 
            adrs=addresses.get(0).getAddressLine(0)+" "+addresses.get(0).getAddressLine(1)+" "+addresses.get(0).getAddressLine(2); 
           } 
          } catch (IOException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

          //break; 

          finish(); 
          Intent i = new Intent(MapOptionsDemoModified.this,RoutesPageOne.class); 
          i.putExtra("adrs", adrs); 
          i.putExtra("latitude", latitude); 
          i.putExtra("longitude", longitude); 
          startActivity(i); 




         } 
         else 
         { 

          AlertDialog.Builder pdb=new AlertDialog.Builder(MapOptionsDemoModified.this);   
          pdb.setTitle("GPS"); 
          pdb.setMessage("GPS activation in progress"); 
          pdb.setPositiveButton("Ok", null); 
          pdb.show(); 

         } 

        //} 

       } 
       else { 

        AlertDialog.Builder pdb=new AlertDialog.Builder(MapOptionsDemoModified.this);   
        pdb.setTitle("GPS"); 
        pdb.setMessage("GPS is not turned on..., please start gps"); 
        pdb.setPositiveButton("Ok", null); 
        pdb.show(); 
       } 

      } 
     }); 




     LOC=(EditText)findViewById(R.id.mom_editText1);  
     LOC.setOnKeyListener(new OnKeyListener() { 

      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       // TODO Auto-generated method stub 
       location = LOC.getText().toString(); 

       if (keyCode == KeyEvent.KEYCODE_ENTER && location.length() > 0) { 

        LOC.setText(""); 

        imm.hideSoftInputFromWindow(LOC.getWindowToken(), 0); 

        mWebView.loadUrl("javascript:getLocation('" + location + "')"); 


        /*AlertDialog.Builder edb=new AlertDialog.Builder(MapOptionsDemoModified.this);   
        edb.setTitle("gps"); 
        edb.setMessage(location+" lat= "+lati+" long="+longi); 
        edb.setPositiveButton("Ok", null); 
        edb.show();*/ 



        //searchBarcode(barcode); 
        return true; 
       } 

       return false; 
      } 

      }); 



     //imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     mWebView.setWebViewClient(new HelloWebViewClient()); 






    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 


} 

回答

0

问题出在时间上。有时,第一个网址需要更多时间才能加载,因此第二个网址未被调用。所以我已经包含SystemClock.sleep(1000)在loadUrl调用之间,它的工作就像一个魅力。