Micka
Fortgeschrittenes Mitglied
- 1
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
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;
}
}