Menü fehlt

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Menü fehlt im Android App Entwicklung im Bereich Betriebssysteme & Apps.
Micka

Micka

Fortgeschrittenes Mitglied
Hy,

in meiner App "Temperaturprüfung" habe ich ein Menü über das man zu den Einstellungen kommen soll. Komischerweise gibt es aber den Menü button nicht.

Auf dem Handy läuft alles, aber auf dem Tablet (kein Hardware Optionsbutton) klappt es leider nicht. Bei anderen Apps ist unten in der Leiste oder oben rechts in der Ecke ein Menübutton. Klickt man drauf öffnet sich das Menü. Bei der App Temperaturprüfung fehlt genau dieser Button.

Jemand ne Ahnung warum der Button nicht erscheint? Habe mal 2 Bilder angehangen auf denen man Sieht welchen Button ich meine. Einmal oben rechts in der Ecke, einmal unten in der Leiste.

Hier der Code der Activity
Code:
package de.gerding.wert_auslesen_wifi;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class WertAuslesen extends Activity
{
    //Globale Deklaration
    private static final int RESULT_SETTINGS = 1;
    private String arduinoIP = "192.168.137.3";     
    private boolean abfrage = false;
    private boolean temperaturgraphanzeigen = false;
    private ArduinoCommManager commMan;
    private InetAddress ip;
    private int port = 1234;
    private int pin = 16;
    private TextView txt_Wertanzeige;
    private EditText edit_dbname;
    static String DBNAME = "temperatur_standard";
    private Intent temperaturgraphintent;
    public static String TEMPERATUR ="temperatur";
    public static String DATENBANKEN = "datenbanken";
    private String[] vorhandeneDatenbanken;
    ArrayAdapter <CharSequence> datenbankenSpinnerAdapter;
    private Spinner datenbankenSpinner;
    private static boolean wait = false;
    private static boolean ping;
    private static boolean compared = false;
    private CouchDBManager dbManager = new CouchDBManager();

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        Log.i("WERT_AUSLESEN_WIFI","onCreate()");
        super.onCreate(savedInstanceState);
        //zuweisen der Views
        setContentView(R.layout.activity_wert_auslesen);
        refreshUserSettings();
       
        datenbankenSpinner = (Spinner) findViewById(R.id.spinner_vorhandene_Datenbanken);
        datenbankenSpinnerAdapter =  new ArrayAdapter <CharSequence> (this, R.layout.spinnerlayout );
        datenbankenSpinnerAdapter.setDropDownViewResource(R.layout.spinnerlayout);
        datenbankenSpinner.setAdapter(datenbankenSpinnerAdapter);
        txt_Wertanzeige = (TextView) findViewById(R.id.txt_Wertanzeige);
        edit_dbname = (EditText) findViewById(R.id.edittext_Dbname);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        temperaturgraphintent = new Intent(this, TemperaturGraphActivity.class);
        commMan = new ArduinoCommManager();
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        //laden der vorhandenen Datenbanken für Spinner        
        if(verbindungstest())
        {
            vorhandeneDatenbankenLaden();
        }
    }
    public void vorhandeneDatenbankenLaden()
    {
        Log.i("WertAuslesen", "vorhandeneDatenbankenLaden()");
        wait = false;
        datenbankenSpinnerAdapter.clear();
        vorhandeneDatenbanken = null;
        new Thread()
        {
            public void run()
            {
                // Netzwerk-Kram
                try 
                {
                    if(!dbManager.DatabaseExists(DATENBANKEN))
                    {
                        dbManager.CreateDatabase(DATENBANKEN);
                        dbManager.CreateDocument(DATENBANKEN, TEMPERATUR);
                    }else if(!dbManager.documentExists(DATENBANKEN, TEMPERATUR))
                    {
                        dbManager.CreateDocument(DATENBANKEN, TEMPERATUR);
                        vorhandeneDatenbanken = new String[]{""};
                    }else 
                    {
                        vorhandeneDatenbanken = dbManager.getTemperaturDatenbanken();
                    }
                    wait = true;
                } catch (Exception e) 
                {
                    e.printStackTrace();
                }
               }
           }.start();
           while(!wait)
        {    
            //Warten bis vorhandene Datenbanken geladen sind
        }
        if(vorhandeneDatenbanken != null)
        {
            for(int i = 0; i<vorhandeneDatenbanken.length; i++)
            {
                datenbankenSpinnerAdapter.add(vorhandeneDatenbanken[i]);
            }
        }else
        {
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!TEST");
        }
        datenbankenSpinner.setAdapter(datenbankenSpinnerAdapter);
    }
    public void abfrageStarten(View v)
    {
        Log.i("WERT_AUSLESEN_WIFI","abfrageStarten()");
        //Variable abfrage steuert den Abruf der Daten des Sensors im Thread
        abfrage = true;
        //Prüfen welche Datenbank verwendet werden soll
        if(edit_dbname.getText().toString().equals(""))
        {
            //Wenn kein Datenbankname angegeben ist -> Datenbankname = my_auto_test
            DBNAME = "my_auto_test";
            //Prüfen ob Datenbank schon existiert
            vorhandeneDatenbankenLaden();
            compared = false;
            for(int i = 0; i<vorhandeneDatenbanken.length; i++)
            {
                //Vergleich mit eingetragenden Datenbanknamen
                if(DBNAME.equalsIgnoreCase(vorhandeneDatenbanken[i]))
                {
                    //Datenbank existiert
                    compared = true;
                }
            }
            if(!compared)
            {
                //Datenbank existiert noch nicht -> Datenbank wird angelegt
                new Thread()
                {
                    public void run()
                    {
                           // Netzwerk-Kram
                        try 
                        {
                            dbManager.addTemperaturDatenbank(DBNAME);
                            wait = true;
                        } catch (Exception e) 
                        {
                            e.printStackTrace();
                        }
                      }
                   }.start();
                   while(!wait)
                   {
                       //Warten bis Datenbank eingetragen ist
                   }
            }
               vorhandeneDatenbankenLaden();
        }
        else
        {
            //Es wurde ein Datenbankname angegeben
            DBNAME = edit_dbname.getText().toString().toLowerCase();
            //Prüfen ob Datenbank schon existiert
            vorhandeneDatenbankenLaden();
            compared = false;
            do
            {
                if(vorhandeneDatenbanken.length == 0)
                {
                    //Wenn noch keine Datenbanken existieren
                    wait = false;
                    new Thread()
                    {
                        public void run()
                        {
                            // Netzwerk-Kram
                            try 
                            {
                                dbManager.addTemperaturDatenbank(DBNAME);
                                wait = true;
                                compared = true;
                            } catch (Exception e) 
                            {
                                e.printStackTrace();
                            }
                            
                        }
                    }.start();
                }
                for(int i = 0; i<vorhandeneDatenbanken.length; i++)
                {
                    //Wenn Datenbanken existieren -> prüfen ob gewünschte Datenbank schon existiert
                    //Vergleich mit eingetragenden Datenbanknamen
                    if(DBNAME.equalsIgnoreCase(vorhandeneDatenbanken[i]))
                    {
                        compared = true;
                    }
                    //Wenn gewünschte Datenbank noch nicht existiert -> Datenbank anlegen
                    if(i == vorhandeneDatenbanken.length-1 && !compared)
                    {
                        wait = false;
                        new Thread()
                        {
                            public void run()
                            {
                                // Netzwerk-Kram
                                try 
                                {
                                    dbManager.addTemperaturDatenbank(DBNAME);
                                    wait = true;
                                    compared = true;
                                } catch (Exception e) 
                                {
                                    e.printStackTrace();
                                }
                                
                            }
                        }.start();
                        while(!wait)
                        {
                            //Warten bis Datenbankname eingetragen ist
                        }
                    }
                }
            }while(!compared);
            //Aktualiesierung des Spinners mit den nun vorhandenen Datenbanken
            wait = false;
            vorhandeneDatenbankenLaden();
        }
        //initialisieren der IP des Arduino
        try 
        {
            //ip = InetAddress.getByName("192.168.72.2");
            ip = InetAddress.getByName(arduinoIP);
        } catch (UnknownHostException e) 
        {
            Log.i("WERT_AUSLESEN_WIFI","wertAbfragen-IpFehler");
            e.printStackTrace();
            Toast.makeText(this, "Fehler beim setzen der IP", Toast.LENGTH_LONG).show();
        }
        final int spin = pin;
        final InetAddress sip = ip;
        final int sport = port;
        //Abrufen des Sensorwerts vom Arduino
        final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
        new Thread()
        {
            public void run()
            {
                while(abfrage)
                {
                    // Netzwerk-Kram
                    try 
                    {
                        int sensorwert = 0;
                        sensorwert = Integer.valueOf(commMan.readAnalogValue(spin, sip, sport));
                        //Umwandeln des Sensorwerts in Temperatur
                        final double erg = dbManager.getTemperatureSeed(sensorwert);
                        myHandler.post(new Runnable()
                        {
                            public void run()
                            {
                                double value = Math.round(erg*10);
                                value /= 10;
                                //Temperatur im UI anzeigen
                                txt_Wertanzeige.setText(Double.toString(value));
                                if (temperaturgraphanzeigen)
                                {
                                    //Falls Temperatugraph aktiv Senden des Wertes via Broadcast
                                    Intent in = new Intent("neuerWert");
                                    in.putExtra("TEMPERATUR", erg);
                                    sendBroadcast(in);
                                }
                            }
                        });
                        //Eintragen des Wertes in die Datenbank
                        try 
                        {
                            dbManager.wertEintragen(DBNAME, sensorwert);
                        } catch (Exception e) 
                        {
                            e.printStackTrace();
                        }
                    } catch (Exception e) 
                    {
                        e.printStackTrace();
                    }
                    try 
                    {
                        //Pause für 3 Sekunden bevor neuer Wert abgerufen wird
                        Thread.sleep(100);
                        //Thread.sleep(6);
                    } catch (InterruptedException e) 
                    {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }
    public void abfrageStoppen(View v)
    {
        Log.i("WERT_AUSLESEN_WIFI","abfrageStoppen()");
        abfrage = false;
    }
    public void temperaturkurveLaden(View v)
    {
        Log.i("WERT_AUSLESEN_WIFI","temperaturkurveLaden()");
        Intent in = new Intent(this, CombinedChartActivity.class);
        in.putExtra("DBNAME", (String)datenbankenSpinner.getSelectedItem());
        startActivity(in);
        /*abfrage = false;
        //Laden der Werte der im Spinner gewählten Datenbank
        temperaturgraphanzeigen = true;
        Temperaturkurve line = new Temperaturkurve();
        line.DBNAME = (String) datenbankenSpinner.getSelectedItem();
        Intent lineIntent = line.getIntent(this);
        lineIntent.putExtra("DATENBANKNAME", (String)datenbankenSpinner.getSelectedItem());
        startActivity(lineIntent);*/
    }
    public void statistikAnzeigen(View V)
    {
        Log.i("WERT_AUSLESEN_WIFI","statistikAnzeigen()");
        abfrage = false;
        String dbname = (String) datenbankenSpinner.getSelectedItem(); 
        Intent intent = new Intent(this, Statistik.class);
        intent.putExtra("DBNAME", dbname);
        startActivity(intent);
    }
    public void temperaturgraphAnzeigen(View v)
    {
        Log.i("WERT_AUSLESEN_WIFI","temperaturgraphAnzeigen()");
        //Anzeigen der aktuell abgefragten Werte(Real Time)
        if(abfrage)
        {
            temperaturgraphintent.putExtra("TEMPERATUR", -100.0);
            startActivity(temperaturgraphintent);
            temperaturgraphanzeigen = true;
        }        
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        Log.i("WertAuslesen","onKeyDown()");
        if (keyCode == KeyEvent.KEYCODE_BACK) 
        {
            this.finish();
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
   [B] public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
    {
        switch (item.getItemId()) 
        {
 
        case R.id.menu_settings:
            Intent i = new Intent(this, Einstellungen.class);
            startActivityForResult(i, RESULT_SETTINGS);
            break;
 
        }
 
        return true;
    }[/B]
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        super.onActivityResult(requestCode, resultCode, data);
 
        switch (requestCode) 
        {
        case RESULT_SETTINGS:
            refreshUserSettings();
            break;
 
        }
 
    }
 
    private void refreshUserSettings() 
    {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(this);
        if(sharedPrefs.getString("dbip", "192.168.137.1").equals(""))
        {
            dbManager.HOST = "Http://192.168.137.1:5984/";
        }else
        {
            dbManager.HOST = "Http://" + sharedPrefs.getString("dbip", "192.168.137.1") + ":5984/";
        }
        if(sharedPrefs.getString("arduinoip", "192.168.137.3").equals(""))
        {
            arduinoIP = "192.168.137.3";
        }else
        {
            arduinoIP = sharedPrefs.getString("arduinoip", "192.168.137.3");
        }
        verbindungstest();
    }
    public boolean verbindungstest()
    {
        ping = false;
        wait = false;
        //Toast.makeText(getApplicationContext(), "Verbindung zur Datenbank wird geprüft", Toast.LENGTH_LONG).show();
        final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
        new Thread()
        {
            public void run()
            {
                try 
                {
                    URL url = new URL(dbManager.HOST);
                       HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                       urlc.setRequestProperty("User-Agent", "Android Application:");
                       urlc.setRequestProperty("Connection", "close");
                       urlc.setConnectTimeout(2000); // mTimeout is in seconds
                       urlc.connect();
                       if (urlc.getResponseCode() == 200) 
                       {
                           //MainActivity.Log("getResponseCode == 200");
                           ping = true;
                       }
                   } catch (MalformedURLException e1) 
                   {
                       e1.printStackTrace();
                   } catch (IOException e) 
                   {
                       e.printStackTrace();
                   }
                   wait = true;
               }
        }.start();
        while(!wait)
        {                
           }
           if(!ping)
           {
               Toast.makeText(getApplicationContext(), "keine Verbindung zur Datenbank", Toast.LENGTH_LONG).show();
        }
        return ping;
    }
}
 

Anhänge

U

u.k-f

Gast
Versuche mal, statt der Methode 'onCreateOptionsMenu'

Code:
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
die Methode 'onPrepareOptionsMenu'

Code:
@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
zu überschreiben.

MfG Uwe
 
J

JustinTime

Fortgeschrittenes Mitglied
Eventuell liegt es auch an der falschen TargetSDK Version im Manifest. Kannst du das mal posten?
 
M

MandraKobold

Ambitioniertes Mitglied
Ein ähnliches Problem hatte ich auch schon, es liegt mit hoher Wahrscheinlichkeit und wie mein vorredner bereits vermutete an der unterstützen SDK Version.
Um das Menü (auf Tablets mit OS < 4) angezeigt zu bekommen sollten die 'android:minSdkVersion ' im Manifest kleiner 11 sein.
 
Micka

Micka

Fortgeschrittenes Mitglied
JustinTime schrieb:
Eventuell liegt es auch an der falschen TargetSDK Version im Manifest. Kannst du das mal posten?
Ich hatte
minsdkversion 10
Targetsdkversion 12

Getestet habe ich auf meinem Galaxy Note 10.1 mit Androidversion 4.1.2

Wenn ich targetsdkversion auf 10 setze ist alles wie gewollt.
Aber fürs Verständnis würde mich schon interessieren wieso das das Problem war.
Wie kriegt man ein menubutton wenn man für API 12 entwickeln würde?

In meinem Fall reicht Api 10 völlig aus. Daher lasse ich es bei 10, dann läuft die App im Zweifelsfall auch auf älteren Geräten.

Gesendet von meinem GT-N8010 mit der Android-Hilfe.de App