kostenloser Webspace werbefrei: lima-city


Timer-Methode

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Ich möchte eine App schreiben die in gewissen abständen den Inhalt einer Website (PHP-Script) per SMS versendet.
    Hier mein bisheriger Code:

    package at.haufen.SMSRobot;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.telephony.SmsManager;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class Events extends Activity {
    
    	public OnClickListener StartListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Start is clicked
    	    	TText("Gestartet!");
    	    	
    	    }
    	};
    
    	public OnClickListener StopListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Stop is clicked
    	    	TText("Beendet!");
    	    	
    	    }
    	};
    	
    	public String getHTTPFile(String url)
    	{
    		//try for no errors
    		try
    		{
    			URL getInfoFile = new URL(url);
    			BufferedReader getInfoStream = new BufferedReader(new InputStreamReader(getInfoFile.openStream()));
    			
    			StringBuffer sb = new StringBuffer();
    			String tmp;
    			while ((tmp = getInfoStream.readLine()) != null)
    			{
    				sb.append(tmp + "\n");
    			}
    			
    			getInfoStream.close();
    			
    			//return String with content (Text File)
    			return sb.toString();
    		}
    		catch (Exception e)
    		{
    		}
    		//Did not work
    		return null;
    	}
    	
        public void TText (String utext) {
        	Context context = getApplicationContext();
        	Toast toast = Toast.makeText(context, utext, Toast.LENGTH_SHORT);
        	toast.show();
        }
        
        public void sendSMS(String phoneNumber, String message)
        {        
            //Sending an SMS
        	SmsManager sm = SmsManager.getDefault();
        	sm.sendTextMessage(phoneNumber, null, message, null, null);      
        } 
    	
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
                   
            // Capture our button from layout
            Button btnstart = (Button)findViewById(R.id.Start);
            Button btnstop = (Button)findViewById(R.id.Stop);
            // Register the onClick listener with the implementation above
            btnstart.setOnClickListener(StartListener);
            btnstop.setOnClickListener(StopListener);
        }
            
        
    }


    Soweit funktioniert alles. Nun muss ich nur noch einen Timer einabauen, bei dem alles ausgeführt wird.

    Ich möchte einen Timer der sich alle 3 Sekunden aufruft, und der auf die Funktionen sendSMS und get HTTPFile zugreifen kann.
    Ich habe schon Timer gefunden die ohne Inhalt funktioniert haben, aber sobald ich eine der genannten Funktionen benutzt habe, ist die App einfach abgestürtzt.

    Ich bin schon am verzweifeln... :(

    Hat jemand einen Beispielcode? Am Besten gleich an diesem Programm, denn Tutorials haben bis jetzt keine Funktioniert...

    Bin froh um jede Hilfe!

    Grüße,
    Stefan
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. a************n

    Das sollte dir helfen:
    http://www.ibm.com/developerworks/java/library/j-schedule.html

    Jetzt mal ne Frage: warum willst du alle 3 Sekunden eine SMS schicken?
  4. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Es soll ein Programm werden das mich über PHP SMS senden lässt.
    Alle 3 Sekunden überprüft die App das HTTP File. Dahinter steckt natürlich ein PHP Script das die Datenbank mit Nachrichten ausliest und für mein Java formatiert.
    Falls keine Nachrichten vorhanden sind, versteht dass die App natürlich auch.

    Wenn das Java also vom PHP zurückbekommt:
    (0043123456;Ihre Website wurde freigeschaltet)(0043654321;Wir haben Ihre Zahlung erhalten)

    Dann löst es das eben in Strings auf und kann die 2 Sms senden.

    Mit PHP muss ich eine Nachricht wiederum nur in die Datenbank schreiben, dass Sie gesendet wird.

    Für den PC-Client von Nokia Handys habe ich genau das schon geschrieben, dazu muss das Handy aber an einem Rechner hängen. Jetzt kann ich das einfach auf meinem Handy laufen lassen während ich es dabei habe... Praktisch. (Wenn es dann läuft)

    Grüße,
    Stefan

    EDIT:
    Ich hab mir dieses Turtorial angesehen, und es entspricht genau dem, was ich schon ausprobiert habe, und was nicht funktioniert hat...
    Wahrscheinlich baue ich immer den selben kleinen Fehler...
    Ich weiß man fragt nicht nach vorprogrammiertem Code, aber kann es mir jemand an meinem Code (oben) zeigen? Irgendwo hab ich da einen denkfehler...
    Die Timer class zu erstellen ist kein Problem usw... nur wenn ich dann daraus die Funktionen aufrufen will stürtzt alles ab!
    PLS!

    Beitrag zuletzt geändert: 8.3.2011 17:56:26 von aklasse
  5. a************n

    Ich muss sagen ich kenne mich nicht mit der Programmierung unter android aus, aber folgendes besagt das es gehen sollte. Und hier ist auch ein Beispiel.

    Gruß Andre
  6. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Hier nochmals mein Problem. Es hat weniger etwas mit Android zu tun, als damit das ich glaube, dass ich hier irgeneinen Fehler mit public/private oder so habe:

    Wenn ich diesen Code benutze funktioniert alles (Ohne Absturz) aber im Timer Steht eben nichts:
    public OnClickListener StartListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Start is clicked
    	    	TText("Gestartet!");
    	    	   Timer timer = new Timer();
    	    	   timer.schedule(new GetSend(), 0, 5000);
    	    }
    	};
    
    	public OnClickListener StopListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Stop is clicked
    	    	TText("Beendet!");
    	    	
    	    }
    	};
    	
    	
    	class GetSend extends TimerTask {
    		   public void run() {
    		      
    		   }
    		}


    Sobald ich aber etwas schreibe, dass der Timer ausführen soll stürtzt das Programm beim Buttonclick sofort ab:
    public OnClickListener StartListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Start is clicked
    	    	TText("Gestartet!");
    	    	   Timer timer = new Timer();
    	    	   timer.schedule(new GetSend(), 0, 5000);
    	    }
    	};
    
    	public OnClickListener StopListener = new OnClickListener() {
    	    public void onClick(View v) {
    	      // do something when the button Stop is clicked
    	    	TText("Beendet!");
    	    	
    	    }
    	};
    	
    	
    	class GetSend extends TimerTask {
    		   public void run() {
    		      TText("Timer");
    		   }
    		}


    Die Funktion TText die oben überall funktioniert verursacht hier den Fehler. Offenbar hat der Timer darauf einfach keinen Zugriff, oder so...

    Der Fehler liegt warscheinlich irgendwo in den klassen, oder ählichem?
    Danke schonmal!

    Grüße,
    Stefan
  7. Hi,
    das erinnert mich an Sache die bei SWT der Fall ist. Vielleicht trifft dies auch auf die UI Bibliotheken bei dir zu.
    Bei SWT kann man nur aus dem Haupt-Thread irgendetwas mit der UI machen, ansonsten sofort eine Fehlermeldung.
    Ist dein TimerTask etwas asynchrones?
    Passt die Fehlermeldung zu dieser Vermutung?
    Wenn ja, musst du deine Aufgabe in den Haupttask rüberschieben "synchronisieren". Bei SWT macht man das mit Display.syncExec(runner).
    Testweise vielleicht mal irgendwas anderes als einen UI-Zugriff machen.
    CU
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!