Нестандартная проблема загрузки Android Webview - PullRequest
1 голос
/ 08 декабря 2011

Привет, я хотел бы получить объяснение относительно следующего кода.Здесь Иногда моя функция JavaScript работает, а иногда нет.В результате я действительно не знаю, где проблема.Здесь мой файл index.html автоматически загружает положение карты.Затем я вызываю функцию javascript с текущим значением lat, lng в качестве аргумента.Итак, изначально он загружает карту по умолчанию.Тогда карта должна быть переопределена функцией javascript.Проблема в том, что иногда это происходит, а иногда нет.Итак, я хотел бы получить ответ по этому поводу.

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);
    }


}

1 Ответ

0 голосов
/ 12 декабря 2011

Проблема была в сроках. Иногда для загрузки первого URL-адреса требовалось больше времени, в результате чего второй URL-адрес не вызывался. Поэтому я включил SystemClock.sleep(1000) между вызовами loadUrl, и это сработало как шарм.

...