主要致命错误

时间:2014-11-10 06:37:48

标签: android fatal-error

在Main处显示致命错误。 现在我在发布日志和该来源。回复我错误在哪里以及如何清除它。在此先感谢。

11-10 11:31:50.927: V/Shravan(25876): Police
11-10 11:31:50.947: V/(25876): MainActivity's onPause Method !!!
11-10 11:31:50.977: W/dalvikvm(25876): VFY: unable to resolve static field 863 (MapAttrs) in Lcom/google/android/gms/R$styleable;
11-10 11:31:50.987: W/dalvikvm(25876): threadid=1: thread exiting with uncaught exception (group=0x40aeb9f0)
11-10 11:31:51.007: E/AndroidRuntime(25876): FATAL EXCEPTION: main
11-10 11:31:51.007: E/AndroidRuntime(25876): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
11-10 11:31:51.007: E/AndroidRuntime(25876):    at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:268)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.Activity.setContentView(Activity.java:1837)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at shravan.nyshadh.balaji.Maps.onCreate(Maps.java:86)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.Activity.performCreate(Activity.java:4470)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.os.Looper.loop(Looper.java:137)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at android.app.ActivityThread.main(ActivityThread.java:4424)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at java.lang.reflect.Method.invokeNative(Native Method)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at java.lang.reflect.Method.invoke(Method.java:511)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
11-10 11:31:51.007: E/AndroidRuntime(25876):    at dalvik.system.NativeStart.main(Native Method)

这是主要活动。

public class MainActivity extends Activity {

    /*
     * HOSPITAL, POLICE, FIRESTATION, and AMBULANCE are constant variables that are assigned
     * to their respective emergency itent. It helps us to draw icons and perform web services
     * related activities.
     */
    private static final int HOSPITAL = 1;
    private static final int POLICE = 2;
    private static final int FIRESTATION = 3;
    private static final int AMBULANCE = 4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(Preferences.readString(this, Preferences.NAME) == null){
            startActivity(new Intent(this, Registration.class));
            if(Preferences.readString(this, Preferences.NAME) == null){
                this.finish();
            }
        } else {
            setContentView(R.layout.activity_main);
        }       
    }

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


    /**
     * This is the main screen of our application. This is the first screen shown after a user has registered.
     * The registration screen only shows if it is the users first time using the application.
     * @param v
     */
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.sos_button) {
            startActivity(new Intent(this, Sos.class));
        } else if (id == R.id.firestation_button) {
            Intent firestation = new Intent(this, Maps.class);
            firestation.putExtra("key", FIRESTATION);
            startActivity(firestation);
        } else if (id == R.id.hospital_button) {
            Intent hospital = new Intent(this, Maps.class);
            hospital.putExtra("key", HOSPITAL);
            startActivity(hospital);
        } else if (id == R.id.ambulance_button) {
            Intent ambulance = new Intent(this, Maps.class);
            ambulance.putExtra("key", AMBULANCE);
            startActivity(ambulance);
        } else if (id == R.id.police_button) {
            Log.v("Shravan", "Police");
            Intent police = new Intent(this, Maps.class);
            police.putExtra("key", POLICE);
            startActivity(police);
        } else if (id == R.id.bloodbank_button) {
            Log.v("Shravan", "BloodBank");
            startActivity(new Intent(this,BloodBank.class));
        } else if (id == R.id.emergencycontact_button) {
            try{
              StringBuilder number = new StringBuilder();
              number.append("tel:");
              number.append(Preferences.readString(this, Preferences.EM_NUMBER));
              Intent callIntent = new Intent (Intent.ACTION_CALL);
              callIntent.setData(Uri.parse(number.toString()));
              startActivity(callIntent);
            }catch (ActivityNotFoundException activityException) {
                Log.e("First Response", "Call failed");
            }
        } else if (id == R.id.home_button) {
            try{
              StringBuilder number = new StringBuilder();
              number.append("tel:");
              number.append(Preferences.readString(this, Preferences.PHONE_NUMBER));
              Intent callIntent = new Intent (Intent.ACTION_CALL);
              //callIntent.setData(Uri.parse("tel:5136523144"));
              callIntent.setData(Uri.parse(number.toString()));
              startActivity(callIntent);
            }catch (ActivityNotFoundException activityException) {
                Log.e("First Response", "Call failed");
            }
        } else if (id == R.id.settings_button) {
            startActivity(new Intent(this,Settings.class));
        }
    }

    /** used upon resuming the application. 
     *
     */
    public void onResume(){
        super.onResume();
        Log.v(null, "MainActivity's onResume Method !!!");
    }

    /**
     * an empty onPause method
     */
    public void onPause(){
        super.onPause();
        Log.v(null, "MainActivity's onPause Method !!!");
    }
    /**
     * Called before interrupt to save data.
     */
    protected void onSaveInstanceState (Bundle outState){
        super.onSaveInstanceState(outState);
        // nothing needs to be saved here since nothing is changed or being used. 
    }
    /**
     * Called during onResume() to restore data.
     */
    protected void onRestoreInstanceState (Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
        // Restore session score
        // nothing needs to be restored here since nothing is used previously. 
    }
}

这是Map类。

/**
 * In this activity, emergency icons are drawn according to the view that was clicked
 * from MainActivity. Icons are numbered in order of increasing distance 
 * from user's current location.
 *
 */
public class Maps extends FragmentActivity {
    private GoogleMap myMap;
    LocationManager lm;
    LocationListener locationListener;
    Location mLoc;
    int code;
    boolean zoomb = true;
    ArrayList<String> ambulances = new ArrayList<String>();
    boolean directioncheck = false;

    // LIST VIEW
    ListView listview;
    ArrayList<String> itemlist = new ArrayList<String>();
    ArrayAdapter<String> adapter;
    ArrayList<Marker> markerlist;

    Direction direction = new Direction();
    ArrayList<LatLng> pline = new ArrayList<LatLng>();
    LatLng currentmarker;
    Integer cid;

    String provider = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);


        /*
         * Check if any of the radios (Mobile Data or Wi-Fi) are on. 
         */
        final WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
        TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if(telephonyManager.getDataState() == 0 && wifiManager.isWifiEnabled() == false && manager.isProviderEnabled(LocationManager.GPS_PROVIDER) == false) {
            AlertDialog.Builder ad = new AlertDialog.Builder(Maps.this);
            ad.setTitle("First-Responder");
            ad.setMessage("Your network and gps providers are off. Please enable one of them.");
            ad.setPositiveButton("Network", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    AlertDialog.Builder network = new AlertDialog.Builder(Maps.this);
                    network.setTitle("First-Responder");
                    network.setMessage("Please choose between Wi-Fi and Mobile Data");
                    network.setPositiveButton("Wi-Fi", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
                            startActivity(intent);
                            provider = "network";
                        }
                    });
                    network.setNegativeButton("Mobile Data", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            Intent intent = new Intent (android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS);
                            startActivity(intent);
                            provider = "network";
                        }
                    });
                    network.show();
                }
            });
            ad.setNegativeButton("GPS", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(intent);
                    provider = "gps";
                }
            });
            ad.show();
        }

        if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED) {
            provider = "network";
        } else if (wifiManager.isWifiEnabled()) {
            provider = "network";
        } else if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            provider = "gps";
        }

        listview = (ListView)findViewById(R.id.listView);
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,itemlist);
        listview.setAdapter(adapter);
        markerlist = new ArrayList<Marker>();

        FragmentManager myFragmentManager = getSupportFragmentManager();
        SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager.findFragmentById(R.id.map);
        myMap = mySupportMapFragment.getMap();
        myMap.setMyLocationEnabled(true);
        myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();
        Intent intent = getIntent();
        code = intent.getIntExtra("key", 0);

        if (provider != null) {
            mLoc = lm.getLastKnownLocation(provider);
        }

        if (mLoc != null) {
            query(mLoc);
        }

        listview.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                //Toast.makeText(getApplicationContext(), Integer.toString(markerlist.size()), Toast.LENGTH_LONG).show();
                LatLng point = markerlist.get(position).getPosition();
                CameraUpdate center = CameraUpdateFactory.newLatLng(point);
                myMap.animateCamera(center, 2000, null);
            }
        });
        myMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(final Marker marker) {
                // TODO Auto-generated method stub
                AlertDialog.Builder ad = new AlertDialog.Builder(Maps.this);
                ad.setTitle("First-Responder");
                ad.setMessage("Would you like directions?");
                ad.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick( DialogInterface dialog, int arg1) {
                        myMap.clear();
                        query(mLoc);
                        currentmarker = marker.getPosition();
                        LatLng pt = marker.getPosition();
                        direction.getmapsinfo(myMap, pt, mLoc, itemlist, adapter);
                        listview.setClickable(false);
                    }
                });
                ad.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        //ok, do nothing
                        dialog.cancel();
                    }
                });
                ad.show();
            }
        });
    }

    /**
     * This method takes in a parameter loc, which is the user's current location. Then, according to the view
     * pressed from MainActivity the according case is executed. The method performs a Google nearby search and
     * returns a JSON String for parsing.
     * @param loc
     */
    public void query(Location loc) {
        switch (code) {
        case 1:
            new GetHospitals()
                    .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="
                            + Double.toString(mLoc.getLatitude())
                            + ","
                            + Double.toString(mLoc.getLongitude())
                            + "&rankby=distance&types=hospital&sensor=false&key=AIzaSyAPrOxAoTKUdaXtktg4B2QrdPZO5SpM0VQ");
            break;
        case 2:
            new GetHospitals()
                    .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="
                            + Double.toString(mLoc.getLatitude())
                            + ","
                            + Double.toString(mLoc.getLongitude())
                            + "&rankby=distance&types=police&sensor=false&key=AIzaSyAPrOxAoTKUdaXtktg4B2QrdPZO5SpM0VQ");
            break;
        case 3:
            new GetHospitals()
                    .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="
                            + Double.toString(mLoc.getLatitude())
                            + ","
                            + Double.toString(mLoc.getLongitude())
                            + "&rankby=distance&types=fire_station&sensor=false&key=AIzaSyAPrOxAoTKUdaXtktg4B2QrdPZO5SpM0VQ");
            break;
        case 4:
            Database db = new Database(Maps.this);
            LatLng point = new LatLng(mLoc.getLatitude(), mLoc.getLongitude());
            ambulances = db.sort(point);
            placemarkers(ambulances);
            db.close();
            break;
        }
    }


    /**
     * Assigns a number according to distance the nearest ambulance.
     * @param ambulances
     */
    private void placemarkers(ArrayList<String> ambulances){
        Bitmap myWrittenBitmap;     
        for(int i = 0; i < ambulances.size(); i++){
            String item = ambulances.get(i);
            Marker m;
            myWrittenBitmap = customImage(i+1, R.drawable.ambulance_launcher);

            String[] values = item.split(",");
            String name = values[0];
            String number = values[1];
            String itemlat = values[2];
            String itemlong = values[3];

            LatLng point = new LatLng(Double.parseDouble(itemlat), Double.parseDouble(itemlong));
            m = myMap.addMarker(new MarkerOptions().position(point).title(name).snippet(number).icon(BitmapDescriptorFactory.fromBitmap(myWrittenBitmap)));
            markerlist.add(m);
            if(!directioncheck){
                itemlist.add(Integer.toString(i+1)+"  "+ name);
                adapter.notifyDataSetChanged();
            }
        }
        LatLng point = new LatLng(mLoc.getLatitude(), mLoc.getLongitude());
        CameraUpdate center = CameraUpdateFactory.newLatLng(point);
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);
        myMap.moveCamera(center);
        myMap.animateCamera(zoom);
    }


    /**
     * This method takes in an index and a picture (represented as an int) 
     * and creates a canvas on which to paint and write the number on.
     * @param index
     * @param resource
     * @return bitmap
     */
    // adding custom images to markers.
    private Bitmap customImage(int index, int resource ){
        Bitmap bm;
        Bitmap myWrittenBitmap;
        Canvas canvas;
        Paint txtPaint;

        bm = BitmapFactory.decodeResource(getResources(), resource);
        myWrittenBitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_4444);
        // create a Canvas on which to draw and a Paint to write text.
        canvas = new Canvas(myWrittenBitmap);
        txtPaint = new Paint();
        txtPaint.setColor(Color.RED);
        txtPaint.setTextSize(12);
        txtPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
        txtPaint.setTypeface(Typeface.DEFAULT_BOLD);
        //draw ref bitmap then text on our canvas
        canvas.drawBitmap(bm, 0, 0, null);
        canvas.drawText(Integer.toString(index), 10,10 , txtPaint);
        return myWrittenBitmap;

    }

    private class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location loc) {
            if (loc != null) {
                mLoc = new Location(loc);
                //query(mLoc);
            }
        }

        @Override
        public void onProviderDisabled(String provider) {
            Context context = Maps.this;
            AlertDialog.Builder ad = new AlertDialog.Builder(context);
            ad.setTitle("Warning!");
            ad.setMessage("Provider: " + provider + " disabled");
            if(provider.equals("network")) {
                String button1String = "Enable network";
                ad.setPositiveButton(button1String, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int arg1) {
                        Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        startActivity(intent);
                    }
                });
            }
            ad.show();
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.maps, menu);
        return true;
    }

    public String readConnectionString(String URL) {
        StringBuilder stringBuilder = new StringBuilder();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(URL);
        try {
            HttpResponse response = httpClient.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream inputStream = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                inputStream.close();
            } else {
                Log.d("ConnectionString", "Failed to connect");
            }
        } catch (Exception e) {
            Log.d("ConnectionString", e.getLocalizedMessage());
        }
        return stringBuilder.toString();
    }

    private class GetHospitals extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... urls) {
            return readConnectionString(urls[0]);
        }

        protected void onPostExecute(String JSONString) {
            try {
                JSONObject jsonObject = new JSONObject(JSONString);
                JSONArray EmergencyItems = new JSONArray(
                        jsonObject.getString("results"));
                for (int i = 0; i < EmergencyItems.length(); i++) {
                    JSONObject EmergencyItem = EmergencyItems.getJSONObject(i);
                    Double lat = Double.parseDouble(EmergencyItem
                            .getJSONObject("geometry")
                            .getJSONObject("location").getString("lat"));
                    Double lng = Double.parseDouble(EmergencyItem
                            .getJSONObject("geometry")
                            .getJSONObject("location").getString("lng"));
                    LatLng point = new LatLng(lat,lng);
                    Bitmap myWrittenBitmap;
                    Marker m;
                    switch (code) {
                    case 1:
                        myWrittenBitmap = customImage(i+1, R.drawable.hsp_launcher);
                         m = myMap.addMarker(new MarkerOptions().position(point).title(EmergencyItem.getString("name")).snippet(EmergencyItem.getString("vicinity")).icon(BitmapDescriptorFactory.fromBitmap(myWrittenBitmap)));
                        if(directioncheck == false){
                            itemlist.add(Integer.toString(i+1)+"  "+ EmergencyItem.getString("name"));
                            adapter.notifyDataSetChanged();
                        }
                        markerlist.add(m);
                        break;
                    case 2:
                        myWrittenBitmap = customImage(i+1, R.drawable.pol_launcher);
                        m = myMap.addMarker(new MarkerOptions().position(point).title(EmergencyItem.getString("name")).snippet(EmergencyItem.getString("vicinity")).icon(BitmapDescriptorFactory.fromBitmap(myWrittenBitmap)));
                        if(directioncheck == false){
                            itemlist.add(Integer.toString(i+1)+"  "+ EmergencyItem.getString("name"));
                            adapter.notifyDataSetChanged();
                        }
                        markerlist.add(m);
                        break;
                    case 3:                     
                        myWrittenBitmap = customImage(i+1, R.drawable.fire_launcher);
                        m = myMap.addMarker(new MarkerOptions().position(point).title(EmergencyItem.getString("name")).snippet(EmergencyItem.getString("vicinity")).icon(BitmapDescriptorFactory.fromBitmap(myWrittenBitmap)));
                        if(directioncheck == false){
                            itemlist.add(Integer.toString(i+1)+"  "+ EmergencyItem.getString("name"));
                            adapter.notifyDataSetChanged();
                        }
                        markerlist.add(m);
                        break;
                    }
                }
                if(zoomb) {
                    LatLng point = new LatLng(mLoc.getLatitude(), mLoc.getLongitude());
                    CameraUpdate center = CameraUpdateFactory.newLatLng(point);
                    CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);
                    myMap.moveCamera(center);
                    myMap.animateCamera(zoom);
                    zoomb=false;
                }
            } catch (Exception e) {
                Log.d("EmergencyItem", e.getLocalizedMessage());
            }
        }
    }

    /** used upon resuming the application. 
     *
     */
    @Override
    public void onResume(){
        super.onResume();
//      if(provider == "network") {
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
//      } else if (provider == "gps") {
//          lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
//      }
        Log.v(null, "Maps's onResume Method !!!");      
    }
    /**
     * Android onPause method. Clears any stored location in location manager.
     */
    @Override
    public void onPause(){
        super.onPause();
        lm.removeUpdates(locationListener);
        zoomb = true;
        Log.v(null, "Maps's onPause Method !!!");
    }

    /**
     * Android onSaveInstanceState method. Here, the
     * driving instructions, latitudes and longitudes
     * are stored.
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if(direction.getDirections() != null){
            Log.v("!NullDirection", "!NULL");
            outState.putStringArrayList("DIRECTIONS", direction.getDirections());
            Preferences.writeLatLng(this, Preferences.MLAT, currentmarker);
        } else {
            Log.v("NullDirection", "NULL");
        }
    }

    /**
     * 
     */
    @Override
    protected void onRestoreInstanceState(Bundle inputState){
        Log.v("INRESTORE", "onRestoreInstanceState");
        if(inputState != null){
            if(inputState.containsKey("DIRECTIONS")){
                itemlist.clear();
                //adapter.clear();
                adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,itemlist);
                ArrayList<String> tempitemlist = inputState.getStringArrayList("DIRECTIONS");
                Log.v("FIRST DIRECTION", Integer.toString(itemlist.size()));
                for(int i = 0; i < tempitemlist.size(); i++){
                    itemlist.add(tempitemlist.get(i));
                    adapter.notifyDataSetChanged();
                }
                directioncheck = true;
            }
            if(Preferences.readMarker(this, Preferences.MLAT) != null){
                LatLng pts = Preferences.readMarker(this, Preferences.MLAT);
                currentmarker = pts;
                direction.getmapsinfo(myMap, pts, mLoc, itemlist, adapter);
            }
        }
    }
}

当我点击警察按钮时,我将使用我的GPS定位器显示当前位置最近的警察局。但是,当我点击它时,不幸的是退出了。

0 个答案:

没有答案