Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开两次android时,Google地图活动无法运行?我的程序是如何获得多个标记之间的最近距离_Java_Android_Eclipse_Google Maps - Fatal编程技术网

Java 打开两次android时,Google地图活动无法运行?我的程序是如何获得多个标记之间的最近距离

Java 打开两次android时,Google地图活动无法运行?我的程序是如何获得多个标记之间的最近距离,java,android,eclipse,google-maps,Java,Android,Eclipse,Google Maps,我是谷歌android编程的开发者,现在我的项目是如何在谷歌地图上的多个标记之间获得最近的距离。当应用程序在编译后第一次运行时,它工作正常。但在我关闭应用程序并再次运行后,应用程序突然停止。 这是我的密码 MainActivity.java package com.example.dispel; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i

我是谷歌android编程的开发者,现在我的项目是如何在谷歌地图上的多个标记之间获得最近的距离。当应用程序在编译后第一次运行时,它工作正常。但在我关闭应用程序并再次运行后,应用程序突然停止。 这是我的密码

MainActivity.java

package com.example.dispel;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;

import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements LocationListener {
    GoogleMap googleMap;
    ArrayList<LatLng> mMarkerPoints=null; 
    SupportMapFragment fm;
    ImageView iv;
    String atmhasil=null;
    JSONArray jArray;
    LocationManager locationManager;
    String gps_mode=null;
    Polyline poliline=null;
    Boolean end_value;
    LatLng dest;
    Location location;
    Byte status_location;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

           gpson();

        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

        // Showing status
        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Getting reference to the SupportMapFragment of activity_main.xml
             fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

            // Getting GoogleMap object from the fragment
            //globalvariable ak= new globalvariable();

                if(fm==null){
                    fm.setRetainInstance(true);
                        }else{

                     googleMap = fm.getMap();                   
                }






            // Enabling MyLocation Layer of Google Map
            googleMap.setMyLocationEnabled(true);

            // Getting LocationManager object from System Service LOCATION_SERVICE
            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 0, this);
            String provider = locationManager.getBestProvider(criteria, true);


            // Getting Current Location

             location = locationManager.getLastKnownLocation(provider);
             gps_mode="yes";
            new download_database().execute("atm.php");


        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub


        // Getting latitude of the current location
        double latitude = location.getLatitude();

        // Getting longitude of the current location
        double longitude = location.getLongitude();

        // Creating a LatLng object for the current location
        LatLng latLng = new LatLng(latitude, longitude);
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        // Zoom in the Google Map
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

        // Showing the current location in Google Map


        // tvLocation.setText(latitude + " dan " + longitude);
        if (gps_mode != null)
        {
            //poliline.remove();
            //poliline=null;

     choose_route csr=  new choose_route(latLng, mMarkerPoints);
     csr.execute();
   /*  try
     {
  String coba= csr.get();
    //txtv.setText("" + coba + "");
     } catch (Exception ex)
     {

     }
    //TextView txtv= (TextView) findViewById(R.id.tv_location);

    // String cob =   csr.get();

        String url = getDirectionsUrl(latLng, dest);                
        DirectionJsonPharser _distance= new DirectionJsonPharser();
        txtv.setText(_distance.distance_count(url));


        DownloadTask downloadTask = new DownloadTask();

        // Start downloading json data from Google Directions API
        downloadTask.execute(url);*/}
        // Setting latitude and longitude in the TextView tv_location
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentActivity#onResume()
     */
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub

        super.onResume();
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 0, this);
          gps_mode="yes";

    }


    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentActivity#onStop()
     */
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();

    }

    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentActivity#onDestroy()
     */
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();


    }

    public void gpson(){
        LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
              !lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
          // Build the alert dialog
          AlertDialog.Builder builder = new AlertDialog.Builder(this);
          builder.setTitle("Informasi!");
          builder.setMessage("Tolong Nyalakan GPS Anda.");
          builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialogInterface, int i) {
            // Show location settings when the user acknowledges the alert dialog
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);

            }
          });
          Dialog alertDialog = builder.create();
          alertDialog.setCanceledOnTouchOutside(false);
          alertDialog.show();}

    }

        public void callatm(){
            globalvariable ak= new globalvariable();
            atmhasil=ak.koneksi("atm.php","");
            try{
                jArray= new JSONArray(atmhasil);
                JSONObject json_data=null;
                for (int i=0;i< jArray.length();i++)
                {
                    json_data=jArray.getJSONObject(i);
                    double lati= Double.parseDouble(json_data.getString("l1"));
                    double lang= Double.parseDouble(json_data.getString("l2"));
                    googleMap.addMarker(new MarkerOptions().position(new LatLng(lati, lang)).title(json_data.getString("nm")));

                }
            }catch(Exception ex){

            }


        }
        private String getDirectionsUrl(LatLng origin,LatLng dest){

            // Origin of route
            String str_origin = "origin="+origin.latitude+","+origin.longitude;

            // Destination of route
            String str_dest = "destination="+dest.latitude+","+dest.longitude;

            // Sensor enabled
            String sensor = "sensor=false";

            // Building the parameters to the web service
            String parameters = str_origin+"&"+str_dest+"&"+sensor;

            // Output format
            String output = "json";

            // Building the url to the web service
            String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;

            return url;
        }
        private class DownloadTask extends AsyncTask<String, Void, String>{

            // Downloading data in non-ui thread
            @Override
            protected String doInBackground(String... url) {

                // For storing data from web service
                String data = "";

                try{
                    // Fetching the data from web service
                    data = downloadUrl(url[0]);
                }catch(Exception e){
                    Log.d("Background Task",e.toString());
                }
                return data;
            }

            // Executes in UI thread, after the execution of
            // doInBackground()
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);

                ParserTask parserTask = new ParserTask();

                // Invokes the thread for parsing the JSON data
                parserTask.execute(result);
            }
        }
        private String downloadUrl(String strUrl) throws IOException{
            String data = "";
            InputStream iStream = null;
            HttpURLConnection urlConnection = null;
            try{
                URL url = new URL(strUrl);

                // Creating an http connection to communicate with url
                urlConnection = (HttpURLConnection) url.openConnection();

                // Connecting to url
                urlConnection.connect();

                // Reading data from url
                iStream = urlConnection.getInputStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

                StringBuffer sb  = new StringBuffer();

                String line = "";
                while( ( line = br.readLine())  != null){
                    sb.append(line);
                }

                data = sb.toString();

                br.close();

            }catch(Exception e){
                Log.d("Exception while downloading url", e.toString());
            }finally{
                iStream.close();
                urlConnection.disconnect();
            }
            return data;
        }



        private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

            // Parsing the data in non-ui thread
            @Override
            protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

                JSONObject jObject;
                List<List<HashMap<String, String>>> routes = null;
                 try{
                    jObject = new JSONObject(jsonData[0]);
                    DirectionJsonPharser parser = new DirectionJsonPharser();

                    // Starts parsing data
                    routes = parser.parse(jObject);
                }catch(Exception e){
                    e.printStackTrace();

                }
                return routes;
            }

            // Executes in UI thread, after the parsing process
            @Override
            protected void onPostExecute(List<List<HashMap<String, String>>> result) {

                ArrayList<LatLng> points = null;
                PolylineOptions lineOptions = null;

                    if(poliline != null)
                    {

                        poliline.remove();
                        poliline=null;
                    }


                // Traversing through all the routes
                for(int i=0;i<result.size();i++){
                    points = new ArrayList<LatLng>();
                    lineOptions = new PolylineOptions();

                    // Fetching i-th route
                    List<HashMap<String, String>> path = result.get(i);

                    // Fetching all the points in i-th route
                    for(int j=0;j<path.size();j++){
                        HashMap<String,String> point = path.get(j);

                        double lat = Double.parseDouble(point.get("lat"));
                        double lng = Double.parseDouble(point.get("lng"));
                        LatLng position = new LatLng(lat, lng);

                        points.add(position);
                    }

                    // Adding all the points in the route to LineOptions
                    lineOptions.addAll(points);
                    lineOptions.width(5);
                    lineOptions.color(Color.RED);
                }

                // Drawing polyline in the Google Map for the i-th route
                //googleMap.addPolyline(lineOptions);
              poliline=  googleMap.addPolyline(lineOptions);
            }
        }
        // Async Data atm
          private class download_database extends AsyncTask<String, Void, String>{

                /* (non-Javadoc)
                 * @see android.os.AsyncTask#doInBackground(Params[])
                 */
                @Override
                protected String doInBackground(String... params) {
                    // TODO Auto-generated method stub
                    globalvariable ak= new globalvariable();
                    atmhasil=ak.koneksi(params[0],"");

                    return atmhasil;
                }

                /* (non-Javadoc)
                 * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
                 */
                @Override
                protected void onPostExecute(String result) {
                    // TODO Auto-generated method stub
                    try{

                        jArray= new JSONArray(result);
                        JSONObject json_data=null;

                        mMarkerPoints= new ArrayList<LatLng>();

                        for (int i=0;i< jArray.length();i++)
                        {
                            json_data=jArray.getJSONObject(i);
                            double lati= Double.parseDouble(json_data.getString("l1"));
                            //tvloc.setText(""+ lati + "" );
                            double lang= Double.parseDouble(json_data.getString("l2"));
                            googleMap.addMarker(new MarkerOptions().position(new LatLng(lati, lang)).title(json_data.getString("nm")));
                            mMarkerPoints.add(new LatLng(lati, lang));
                        }
                        if(location!=null){

                            onLocationChanged(location);


                        }
                    }catch(Exception ex){

                    }
                }

                /* (non-Javadoc)
                 * @see android.os.AsyncTask#onPreExecute()
                 */
                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();
                }
          }
          private class choose_route extends AsyncTask<ArrayList<LatLng>, Void, String>{

            /* (non-Javadoc)
             * @see android.os.AsyncTask#doInBackground(Params[])
             */
              LatLng firs_point;
              ArrayList<LatLng> atm_sync;

              public choose_route(LatLng firs_point, ArrayList<LatLng> atm_sync){
                 this.firs_point=firs_point;
                this.atm_sync=atm_sync;
              }

            @Override
            protected String doInBackground(ArrayList<LatLng>... params) {
                // TODO Auto-generated method stub
                ArrayList<LatLng> atmarray= new ArrayList<LatLng>();
                atmarray=atm_sync;
                 final Integer[] idx=new Integer[atmarray.size()] ;
                 final double[] data=new double[atmarray.size()] ;
                for (int i=0; i< atmarray.size();i++)
                {

                    /*DirectionJsonPharser _distance= new DirectionJsonPharser();
                    String url = getDirectionsUrl(firs_point, atmarray.get(i) );*/              
                    //txtv.setText(_distance.distance_count(url));

                    idx[i]=i;
                    data[i]=(double) distance_AtoB(firs_point, atmarray.get(i));
                /*  data[i]= Double.parseDouble(_distance.distance_count(url));*/
                }



                Arrays.sort(idx, new Comparator<Integer>() {
                    @Override public int compare(final Integer o1, final Integer o2) {
                        return Double.compare(data[o1], data[o2]);
                    }
                });

                globalvariable ak= new globalvariable();
                //Toast.makeText(getApplicationContext(), idx[0], Toast.LENGTH_SHORT).show();
                atmhasil=ak.koneksi("atm.php","" + idx[0] + "");



                return atmhasil ;
            }

            /* (non-Javadoc)
             * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
             */
            @Override
            protected void onPostExecute(String result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);

                try{
                    jArray= new JSONArray(result);
                    JSONObject json_data=null;
                    for (int i=0;i< jArray.length();i++)
                    {
                        json_data=jArray.getJSONObject(i);
                        double lati= Double.parseDouble(json_data.getString("l1"));
                        double lang= Double.parseDouble(json_data.getString("l2"));
                        googleMap.addMarker(new MarkerOptions().position(new LatLng(lati, lang)).title(json_data.getString("nm")));
                        dest= new LatLng(lati, lang);
                    }

                    TextView txtv= (TextView) findViewById(R.id.tv_location);
                    String url = getDirectionsUrl(firs_point, dest);                

                    DownloadTask downloadTask = new DownloadTask();

                    // Start downloading json data from Google Directions API
                    downloadTask.execute(url);

                }catch(Exception ex){
                /*  TextView txtv= (TextView) findViewById(R.id.tv_location);
                    txtv.setText("" + ex.toString() +"");*/
                }



            }

            /* (non-Javadoc)
             * @see android.os.AsyncTask#onPreExecute()
             */
            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();
            }

          }


          private float distance_AtoB(LatLng Apoint,LatLng Bpoint){
              Location locationA = new Location("point A");

              locationA.setLatitude(Apoint.latitude);
              locationA.setLongitude(Apoint.longitude);

              Location locationB = new Location("point B");

              locationB.setLatitude(Bpoint.latitude);
              locationB.setLongitude(Bpoint.longitude);

              float distance_point = locationA.distanceTo(locationB);
              return distance_point;
          }

        /* (non-Javadoc)
         * @see android.support.v4.app.FragmentActivity#onKeyDown(int, android.view.KeyEvent)
         */
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
             if(keyCode==KeyEvent.KEYCODE_BACK)  
                {  
                    //do whatever you want the 'Back' button to do  
                    //as an example the 'Back' button is set to start a new Activity named 'NewActivity'  
                 getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);


                 Intent inte= new Intent(this,Log_in.class);
                   startActivity(inte);

                   finish();
                }  
                return true; 
        }



}

当发生错误时,您可以发布日志猫吗?@Lal是的,我的问题中包括了我的日志猫。请帮帮我……:'MainActivity中第516行是什么?@Lal final Integer[]idx=新整数[atmarray.size];检查516行之前是否有atmarray.size的值
05-11 15:23:46.050: W/dalvikvm(11959): threadid=29: thread exiting with uncaught exception (group=0x4001e578)
05-11 15:23:46.060: E/AndroidRuntime(11959): FATAL EXCEPTION: AsyncTask #5
05-11 15:23:46.060: E/AndroidRuntime(11959): java.lang.RuntimeException: An error occured while executing doInBackground()
05-11 15:23:46.060: E/AndroidRuntime(11959):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.lang.Thread.run(Thread.java:1019)
05-11 15:23:46.060: E/AndroidRuntime(11959): Caused by: java.lang.NullPointerException
05-11 15:23:46.060: E/AndroidRuntime(11959):    at com.example.dispel.MainActivity$choose_route.doInBackground(MainActivity.java:516)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at com.example.dispel.MainActivity$choose_route.doInBackground(MainActivity.java:1)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
05-11 15:23:46.060: E/AndroidRuntime(11959):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
05-11 15:23:46.060: E/AndroidRuntime(11959):    ... 4 more