1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Städteführer App (Facharbeit)

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von deni100, 06.02.2012.

  1. deni100, 06.02.2012 #1
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Hallo Jungs und Mädels, ich mache gerade mein Fachabi und mein Abschlussprojekt ist eine App für eine Stadt. (Städteführer).
    Ich habe schon eine Datenbank erstellt und meine Gui ist fertig. Ich kann auch schon GPS Daten empfangen.
    Mein Ziel ist es durch die Datenbank die Koordinaten der jeweiligen Sehenswürdigkeiten mit den GPS Koordinaten von meinem Standort zu berechnen und somit die Entfernung zu berechnen, außerdem wollte ich eine Richtungsanzeige (Luftlinie) implementieren.
    Was empfiehlt ihr mir, wie ich jetzt voran gehen könnte um mein Problem zu lösen.
    Ich möchte auf keinen Fall fertige Lösungen oder irgendwie Codes sehen, sondern eher Tipps wie ich vielleicht Koordinatenberechnung in Android und Richtungsanzeige realisieren könnte.
    Mit freundlichen Grüßen
    deni100
     
  2. Sentence, 06.02.2012 #2
    Sentence

    Sentence Erfahrener Benutzer

    Beiträge:
    242
    Erhaltene Danke:
    51
    Registriert seit:
    27.01.2011
    Phone:
    S3, S6 Edge
    deni100 bedankt sich.
  3. Maddi, 06.02.2012 #3
    Maddi

    Maddi Android-Hilfe.de Mitglied

    Beiträge:
    82
    Erhaltene Danke:
    10
    Registriert seit:
    18.07.2010
    Das ist sicher einer der elegantesten wege.^^
    Ich hätte jetzt für die Richtungspfeile aus den zwei Koordinaten einen Richtungsvektor berechnet der in die entsprechende Richtung zeigt.
     
  4. deni100, 10.02.2012 #4
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Eine Frage:
    Habe z.B jetzt 10 Einträge in meiner Datenbank und ich habe Felder wie ID, Sehenswürdigkeitenname und so.. jedoch muss ich jedesmal die ID von sich selbst eingeben, gibt es eine Möglichkeit, dass ich die Einträge in der Datenbank zähle oder gibt es da eine Methode dafür?
     
  5. Tom299, 10.02.2012 #5
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Wie meinst du das, du mußt die ID von sich selbst jedes mal eingeben? Was willst du denn erreichen? Oder willst du nur die Einträge in der DB zählen?

    Vermutlich suchst du nur eine Möglichkeit, deine Daten in der Datenbank abzufragen?
     
  6. deni100, 10.02.2012 #6
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Ich meine ich hab jetzt 10 Einträge.
    Angenfangen
    Id 1 Name :Hotel
    Id 2 Name : Bahnhof
    und jedesmal wenn ich in die Datenbank etwas neues einfügen will, muss ich manuell die ID auch mitschreiben, das heißt ich muss die 3 als Id manuell selber eingeben, wie kriege ich die Anzahl der Einträge heraus, sodass ich einfach dann die ID automatisch für den nächsten Eintrag ermitteln kann.
    MfG
     
  7. Tom299, 10.02.2012 #7
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
  8. mradlmaier, 11.02.2012 #8
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    deni100 bedankt sich.
  9. deni100, 13.02.2012 #9
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Ja das habe ich schon bemerkt, trotzdem vielen Dank :)
     
  10. Tom299, 14.02.2012 #10
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Soweit ich weiß gilt die Konvention _id nur für SimpleCursorAdapter und nicht im allgemeinen. Da ich immer eigene Adapter verwende bin ich auch noch nie über dieses Problem gestolpert.

    Hier gibts noch einen interessanten Thread dazu: listview - Android column '_id' does not exist? - Stack Overflow

    Ein Trick wäre z.B. SELECT t.*,t.id as _id FROM table t, damit der SimpleCursorAdapter funktioniert, ohne wirklich eine Spalte in der DB _id zu nennen.
     
    deni100 und DieGoldeneMitte haben sich bedankt.
  11. deni100, 14.02.2012 #11
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Code:
    public class ShAuswahl extends ListActivity{
    	
    	final static String MY_DB_NAME = "Guide";
    	final static String MY_DB_TABLE = "SH";
    	final static String tag="ensacom"; 
    	private static final int COLUMN_INDEX_TITLE = 1; //Titel des Contextmenüs
    
    	public static final int EDIT_ID = Menu.FIRST;
    	public static final int DELETE_ID = Menu.FIRST + 1;
    	public static final int ZIEL_ID = Menu.FIRST + 2;
    	private SQLiteDatabase Datenbank;
    	private DatenbankManager Helper;
    	
    	private static final String KLASSEN_SELECT_RAW = //rohe sql-anfrage
    	"SELECT _id , name FROM SH";
    	
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main88);
    		Helper = new DatenbankManager(this);			
    		;		
    		
    	}
    	
    	
    	protected void onResume(){
    		String text = "Datenbank wurde geoeffnet";
    		super.onResume();
    		Datenbank = Helper.getReadableDatabase();
    		Toast eintoast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
    		eintoast.show();		
    	ladeDaten();
    	}
    	private void ladeDaten() {
    		//		Cursor klassencursor =Datenbank.rawQuery(KLASSEN_SELECT_RAW, null); //zeiger auf element der ergebnismenge
    				Cursor klassencursor =Datenbank.query("SH", 
    						new String[] {
    							"_id",
    							"name",
    							"longitude",
    							"latitude",
    							"info"
    						}, 
    						null, null, null, null, null);
    				startManagingCursor(klassencursor); 
    			
    				SimpleCursorAdapter klassenadapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_1,klassencursor,
    						new String[] {"name"}, 
    						new int []{android.R.id.text1}
    				);
    				setListAdapter(klassenadapter);
    	}
    	@Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        	AdapterView.AdapterContextMenuInfo info;
            try {
                 info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            } catch (ClassCastException e) {
                Log.e("Guide", "bad menuInfo", e);
                return;
            }
    
           Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
           if (cursor == null) {
                // For some reason the requested item isn't available, do nothing
                return;
            }
    
            menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));
    
            menu.add(0, EDIT_ID, 0, R.string.cmEdit);
            menu.add(0, DELETE_ID, 0, R.string.cmDelete);
            menu.add(0, ZIEL_ID, 0, R.string.cmZiel);
        }
    	public boolean onContextItemSelected(MenuItem item) {		
    		AdapterView.AdapterContextMenuInfo info;
            try {
                 info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            } catch (ClassCastException e) {
                Log.e("Guide", "bad menuInfo", e);
                return false;
            }
    		
    		switch (item.getItemId()) {
        		case EDIT_ID:
        			Log.v("Guide", "Edit Guide with id: "+""+info.id); 
        			return true;
        		case DELETE_ID:
        			Log.v("Guide", "Delete Gui with id: "+""+info.id);
        			return true;
        		case ZIEL_ID:
        			Log.v("Guide", "Entfernung with id: "+""+info.id);
        		default:
        			return super.onContextItemSelected(item);
        		}
        	}
    	
    	protected void onPause(){
    		String text = "Datenbank wurde geschlossen";
    		Datenbank.close();
    		super.onPause();
    		Toast eintoast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
    		eintoast.show();
    		
    	}
    
    }

    Hier kriege ich keine Fehlermeldung, ich versuche aus der Datenbank zu lesen und wenn ich auf einen Eintrag klicke ,soll ein Menü erscheinen, doch es passiert nichts, wo ist mein Fehler :huh:

    Die Datenbank wird ausgelesen, doch beim klicken öffnet sich kein Kontextmenü :/
     
  12. Tom299, 14.02.2012 #12
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    im onCreate fehlt registerForContextMenu(YourView);
     
    deni100 bedankt sich.
  13. deni100, 15.02.2012 #13
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Wie kriege ich denn jetzt die _id des jeweiligen Items heraus, bin schon am suchen, aber irgendwie will es nicht klappen
     
  14. deni100, 16.02.2012 #14
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Code:
     String sSelect ="SELECT longitude,latitude FROM SH WHERE _id="+info.id;
        			Cursor mustafa=     Datenbank.rawQuery(sSelect, null);
        			startManagingCursor(mustafa);
        			int view[] = {R.id.textView2, R.id.textView3};
        			String col[] = { "latitude", "longitude"};
        			SimpleCursorAdapter ca = new SimpleCursorAdapter(
        			        this, R.layout.main88, mustafa, col, view);
        			
        			
        			
        			TextView test = (TextView) findViewById(R.id.textView1);
        			test.setText(ca.getStringConversionColumn());
        			

    Wo ist denn mein Fehler, ich versuche eine SQL Abfrage zu machen und als Fehler kommt
    column '_id' does not exist
     
  15. JanF, 16.02.2012 #15
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    Der Fehler muss ja auch kommen, hoffentlich aber erst wenn Du den SimpleCursorAdapter instanzierst, denn dein Cursor enthält nicht die Spalte "_id".
    Probier es mal hiermit:
    Code:
    String sSelect ="SELECT _id,longitude,latitude FROM SH WHERE _id="+info.id;
    oder
    Code:
    String sSelect ="SELECT * FROM SH WHERE _id="+info.id;
    Hast Du das Notepad Tutorial von developer.android.com schon durchgearbeitet? Wenn nicht solltest Du es tun, dauert nicht lange und die meisten Deiner hier gestellten Fragen werden dort behandelt.
     
    deni100 bedankt sich.
  16. deni100, 16.02.2012 #16
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Code:
    Cursor klassencursor =Datenbank.query("SH", 
    						new String[] {
    							"_id",
    							"name",
    							"longitude",
    							"latitude",
    							"info"
    						}, 
    						null, null, null, null, null);
    				startManagingCursor(klassencursor); 
    			
    				SimpleCursorAdapter klassenadapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_2,klassencursor,
    						new String[] {"longitude","latitude"},
    						new int []{android.R.id.text1,android.R.id.text2}
    				);
    				setListAdapter(klassenadapter);

    Ich hab das jetzt so realisiert, ich frage mich jetzt

    " new String[] {"longitude","latitude"}," wie kann ich das benutzen, also z.B als Parameter bei einer MEthode zu benutzen. Im Moment sind das ja Strings..
     
  17. Tom299, 16.02.2012 #17
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Die Strings sind die Spaltennamen. Du mußt schon den Cursor benutzen um auf die Inhalte selbst zuzugreifen.

    Also z.B. klassencursor.getString(klassencursor.getColumnIndex("longitude"));

    Oder meinst du was anderes? ;-)
     
    deni100 bedankt sich.
  18. deni100, 16.02.2012 #18
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note

    Ja das meinte ich, aber als Fehler kommt"android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1"
     
  19. Tom299, 16.02.2012 #19
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Dann mußt du ihn positionieren, gibt sowas wie .movetoFirst(), .moveToPosition(position) usw. ...
     
    deni100 bedankt sich.
  20. deni100, 16.02.2012 #20
    deni100

    deni100 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    2
    Registriert seit:
    10.10.2011
    Phone:
    Samsung Galaxy Note
    Code:
    double latitude = Double.parseDouble(klassencursor2.getString(klassencursor2.getColumnIndex("latitude")));
    				double longitude = Double.parseDouble(klassencursor2.getString(klassencursor2.getColumnIndex("latitude")));
    				 Location location = obj.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    				 
    				
    				 
    				 String    message= (""+obj.distance(location.getLatitude(),location.getLongitude(), latitude, longitude));
    				
    				Toast.makeText(obj, message, Toast.LENGTH_LONG).show();Toast.makeText(obj, message,
    						Toast.LENGTH_LONG).show();
    So habe jetzt von meiner GPS Klasse ein Objekt angelegt und versuche die Methode Distance() zu benutzen, soweit so gut, jedoch kriege ich irgendwie ein Java.lang.nullpointer exception, irgendwo ist da ein kleiner Fehler, den ich gerade nicht sehen kann ..



    Ich sehe gerade , dass ich ein Problem beim Anlegen des Objektes habe
    GPS obj=new GPS();

    so habe ich das Objekt angelegt.


    " threadid=1: thread exiting with uncaught exception (group=0x4001e578)" das kommt auch als Fehler
     
    Zuletzt bearbeitet: 16.02.2012

Diese Seite empfehlen