2016-06-07 18 views
-1

Ich habe eine Android-App, die mir eine Karte, meinen Standort und mehrere Busstation Marker zeigt. Ich möchte den Zeitplan ausgewählter Busse vom ausgewählten Marker "Station" in einer Listenansicht anzeigen können.Anzeige von Daten in einer Listenansicht von einer mysql db

Jede Idee, wie das zu tun? Ich brauche auch ein PHP-Skript dafür, wenn Sie mir helfen könnten.

Unten ist mein MapActivity:

import android.content.pm.PackageManager; 
import android.location.Location; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationServices; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

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

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

    String JSON_STRING; 
    HttpURLConnection urlConnection = null; 
    private GoogleMap mMap; 
    GoogleApiClient mGoogleApiClient; 
    LatLng mLatLng; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
     new MarkerTask().execute(); 

    } 



    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     mMap.getUiSettings().isCompassEnabled(); 
     mMap.getUiSettings().setZoomControlsEnabled(true); 
     mMap.getUiSettings().setScrollGesturesEnabled(true); 
     mMap.getUiSettings().setMapToolbarEnabled(false); 


     if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
     { 
      return; 
     } 
     mMap.setMyLocationEnabled(true); 

     buildGoogleApiClient(); 

     mGoogleApiClient.connect(); 

    } 

    protected synchronized void buildGoogleApiClient() { 
     // Toast.makeText(this, "buildGoogleApiClient", Toast.LENGTH_SHORT).show(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     Toast.makeText(this, "onConnected", Toast.LENGTH_SHORT).show(); 
     if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mLastLocation != null) { 

      mLatLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()); 
      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(mLatLng) 
        .zoom(18) 
        .tilt(75) 
        .bearing(20) 
        .build(); 
      mMap.animateCamera(CameraUpdateFactory 
        .newCameraPosition(cameraPosition)); 

     } 


    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Toast.makeText(this,"onConnectionSuspended",Toast.LENGTH_SHORT).show(); 
    } 


    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Toast.makeText(this,"onConnectionFailed",Toast.LENGTH_SHORT).show(); 

    } 




    class MarkerTask extends AsyncTask<Void, Void, String> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(Void... voids) { 
      try { 
       URL url = new URL("http://some address.php"); 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       InputStream inputStream = urlConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuilder stringBuilder = new StringBuilder(); 
       while ((JSON_STRING = bufferedReader.readLine()) != null) { 

        stringBuilder.append(JSON_STRING + "\n"); 
       } 


       bufferedReader.close(); 
       inputStream.close(); 
       urlConnection.disconnect(); 
       return stringBuilder.toString().trim(); 


      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


      return null; 

     } 
      // Executed after the complete execution of doInBackground() method 
      @Override 
      protected void onPostExecute (String result){ 

       JSONObject jsonObj = null; 
       JSONArray jsonArray = null; 
       try { 
        jsonArray = new JSONArray(result); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       for (int i = 0; i < jsonArray.length(); i++) { 
        try { 
         jsonObj = jsonArray.getJSONObject(i); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        LatLng latLng = null; 
        try { 
         latLng = new LatLng(jsonObj.getJSONArray("latlng").getDouble(0), 
           jsonObj.getJSONArray("latlng").getDouble(1)); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


        // Create a marker for each station in the JSON data. 
        try { 
         mMap.addMarker(new MarkerOptions() 
           .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)) 
           .title(jsonObj.getString("name")) 
           .position(latLng)); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
} 

ich erwähnen möchte, dass ich eine MySQL-Datenbank mit drei Tabellen:

  1. Bahnhof
    • STATION_ID
    • Name
    • lat
    • lng
  2. Bus
    • BUS_ID
    • BUS_NO
  3. Schedule
    • BUS_ID
    • STATION_ID
    • ho ur

Vielen Dank für Ihre Hilfe!

Antwort

0

Ich denke, Ihre Frage ist nicht so spezifisch, es sollte sein. Vielleicht hilft dir dieses Tutorial mit der Karte. http://www.tutorialspoint.com/android/android_google_maps.htm In Bezug auf die Art und Weise die Zeitplan zu zeigen, vielleicht können Sie einen benutzerdefinierten Marker Popup in der Karte wie der Marker verwenden und sie im Titel angezeigt wird, Schnipsel und auch ein Symbol hinzufügen:

Marker TP = googleMap.addMarker(new MarkerOptions(). 
     position(customPos) 
     .title("Sydney") 
     .snippet("Population: 4,627,300") 
     .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)))); 

die Referenz Siehe hier: https://developers.google.com/android/reference/com/google/android/gms/maps/model/MarkerOptions#public-method-summary

Verwandte Themen