kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: Eigene Werbung auf eigener Website

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich wurde leider aus dem Google Adsense Programm geworfen und nun überlege ich, ob ich nun mit Referral Programmen Geld verdienen soll. Als Beispiel ist mir da die G2A.com Goldmine eingefallen. Auf G2A.com kann man Computerspiele günstig kaufen und auch selbst verkaufen. Dort gibt es also ein Programm, mit dem man Geld verdienen kann. Man kann sich Links zu bestimmten Spielen erstellen und wenn jemand über diesen Link das Spiel kauft bekommt man einen kleinen Anteil dafür. Außerdem kann man andere Leute zu diesem Programm einladen und verdient an denen mit. Meine Idee war es jetzt erstmal verschiedene Links für Spiele zu erstellen und für jedes Spiel ein Banner zu erstellen. Diese Banner sollen dann mit dem jeweiligen hinterlegten Link an die Stelle auf meiner Website, wo vorher die Adsense Werbung war. Zusätzlich möchte ich dann ein Banner mit dem Referral Link zu dem Programm erstellen, sodass ich dadurch vielleicht Leute in mein "Team" bekomme und an denen ich mit verdiene.

    Was haltet ihr erstmal generell von der Idee? Meint ihr das könnte sich lohnen? Da meine Seite über Pokémon GO handelt, ist das Thema mit den Comuputerspielen ja vermutlich Interessant für meine Besucher. Habe circa 1000-2000 Sitzungen pro Tag. Oder würdet ihr mir was anderes empfehlen?

    Was muss man beachten wenn man quasi eigene Werbung auf der eigenen Website platziert, zum Beispiel bezogen auf Suchmaschinenoptimierung? Ist es dann richtig den Banner ganz normal in einem <img> Tag, welcher innerhalb eines <a> Tags ist, zum Beispiel als jpg Datei einzubinden? Oder sollte man das anders machen?

    Danke schon mal für eure Meinungen!

    Viele Grüße
  • in: URL prüfen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe ein Formular, bei dem man einen Link angeben kann. Gibt es einen einfachen weg zu prüfen, ob der Link zu einer bestimmten Seite gehört, wie z.B. Youtube? Wenn man mit strpos prüft ob der String "Youtube" in dem Link vorhanden ist, ist das ja zu ungenau, da das Wort "Youtube" ja auch ein Parameter sein kann und aber eigentlich auf eine andere Seite weitergeleitet wird.

    Man könnte ja den Link String in verschiedene Teile aufteilen, aber da müsste man ja ziemlich viele Fälle beachten. Manche geben zum Beispiel das "http://" nicht an oder manche lassen das "www." weg usw. Gibt es also einen einfacheren Weg um das zu prüfen?

    Viele Grüße
  • in: Simples Memory Spiel - Sleep in Mausklick Event

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte ein Memory Spiel mit Java programmieren. Ich habe eine Klasse "GameFrame" die von der JComponent Klasse erbt und die MouseListener Klasse implementiert. Diese Klasse wird in der Main Klasse in ein JFrame geladen. Dann habe ich noch eine Klasse "Karte" für die Memory Karten. Dort werden folgende Informationen gespeichert:

    x & y Position, höhe, breite, Farbe der Vorderseite, Farbe der Rückseite, aktive Seite

    In der GameFrame Klasse werden alle Karten in einer ArrayList gespeichert und in der paintComponent Methode wird dann jede Karte aus der Liste mit der Farbe der aktiven Seite gezeichnet.

    Folgenden Code habe ich jetzt für ein Mausklick Event:

    public void mouseClicked(MouseEvent e) {
    	// Für jede Karte überprüfen ob auf sie geklickt wurde, falls ja wird die aktive Farbe geändert
    	for(Karte karte : karten){
    		// Es wird überprüft ob die Position des Mausklicks innerhalb der entsprechenden Karte liegt. 
    		// Bei x wird + 8 und bei y + 30 gerechnet, da man den Rand des Fensters dazu zählen muss 
    		if(e.getX() > karte.getX() + 8 && e.getX() < karte.getX()+karte.getWidth() + 8 && e.getY() > karte.getY() + 30 && e.getY() < karte.getY()+karte.getHeight() + 30){
    			karte.setAktiv(karte.getVorderseite());
    			
    			repaint();
    
    			if(!klicks.contains(karte)){
    				klicks.add(karte);
    			}
    				
    			// Aufgedeckte Karten überprüfen
    			if(klicks.size() == 2){
    				if(klicks.get(0).getAktiv() != klicks.get(1).getAktiv()){
    					klicks.get(0).setAktiv(klicks.get(0).getRueckseite());
    					klicks.get(1).setAktiv(klicks.get(1).getRueckseite());
    					try {
    						Thread.sleep(1000);
    					} catch (InterruptedException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    					repaint();
    				}
    				klicks.clear();	
    			}
    		}
    	}
    }


    Also zuerst wird halt überprüft auf welche Karte geklickt wurde. Dann wird die aktive Seite der Karte geändert und dann wird neu gezeichnet. Dann gibt es noch eine ArrayList wo jeweils immer zwei Klicks drin gespeichert werden. Wenn also auf zwei verschiedene Karten geklickt wurde, also wenn zwei Karten in der Liste sind, dann soll überprüft werden, ob sie die gleiche Farbe haben. Wenn nicht, dann soll die aktive Seite der beiden Karten wieder geändert werden und dann soll eine Sekunde gewartet werden, damit man eine Sekunde Zeit hat um zu sehen welche Farbe die zweite Karte hat, auf die man geklickt hat, und dann soll neu gezeichnet werden. Wenn sie aber gleich sind bleiben sie so liegen. Dann wird die "klicks" liste wieder geleert.

    Jetzt läuft es aber so ab:

    Beim ersten Klick wird alles normal ausgeführt, die Karte verändert die Farbe. Beim zweiten Klick auf eine andere Karte passiert dann erstmal eine Sekunde lang nichts und dann wird die erste Karte auf die geklickt wurde wieder umgedreht. Also die Karte auf die als zweites geklickt wird, wird erst gar nicht verändert. Und ich verstehe nicht warum das so ist. Weil eigentlich wird ja nach jedem Klick die aktive Farbe verändert und dann neu gezeichnet. Aber beim zweiten Klick wird komischerweise erst nach dieser einen Sekunde neu gezeichnet und somit sieht man ja nicht welche Farbe die zweite Karte hatte.

    Kann jemand erkennen woran das liegt?

    Hier noch der Code aus der paint Methode:

    public void paintComponent(Graphics g){
    	super.paintComponent(g);
    		
    	// Jede Karte aus der Liste wird gezeichnet
    	for(Karte karte : karten){
    		// Die aktive Farbe wird gezeichnet, also am Anfang die Farbe der Rückseite und nach einem Klick die Farbe der Vorderseite
    		g.setColor(karte.getAktiv());
    		g.fillRect(karte.getX(), karte.getY(), karte.getWidth(), karte.getHeight());
    	}
    }




    Viele Grüße
  • in: Sichere Javascript Anwendung

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte eine Anwendung machen, bei der ein Benutzer Punkte bekommt, je länger er auf der Seite bleibt. Pro Minute soll er dann zum Beispiel 1 Punkt bekommen.

    Ich habe mir das bis jetzt so gedacht, dass man mit Javascript einen Timer einbaut und dann zum Beispiel mit JQuery und PHP jede Minute einen Punkt bei dem Benutzer in der Datenbank dazu schreibt.

    Allerdings weiß ich nicht wie sicher diese Methode ist. Ich kann mir vorstellen, dass man das manipulieren könnte. Ich habe gesehen, dass man seinen Javascript Quellcode zum Beispiel hier verschlüsseln lassen kann. Würde das etwas nützen? Oder wie soll ich das ganze am besten angehen, damit es möglichst sicher ist?

    Viele Grüße
  • in: OpenGL - Maus Position im Koordinatensystem

    geschrieben von ultimate-bravery

    Alles klar, danke! Die Richtung stimmt jetzt schonmal mit meinem Koordinatensystem überein. Also wenn ich die Maus nach links bewege, wird der x Wert höher und nach rechts kleiner. Und wenn ich die Maus nach oben bewege wird der y Wert höher und nach unten kleiner. Allerdings stimmen die Werte jetzt noch nicht überein. Hier erstmal der Code den ich jetzt habe:

    public void showMousePosition(float mx, float my){
    	Matrix4f projectionMatrix = camera.getProjectionMatrix();
    	Matrix4f viewMatrix = camera.getViewMatrix();
    	Matrix4f projMulView = viewMatrix.mul(projectionMatrix);
    	projMulView.invert();
    	float px = ((2*mx)/650)-1;
    	float py = ((2*my)/650)-1;
    	Vector4f vec4 = new Vector4f(px, py*(-1), 0.0f, 1.0f);
    	vec4.mul(projMulView);
    	vec4.w = 1.0f / vec4.w;
    	vec4.x *= vec4.w;
    	vec4.y *= vec4.w;
    	vec4.z *= vec4.w;
    	
    	System.out.println(vec4.x + ", " + vec4.y);
    }


    Ich habe jetzt ein Objekt wie folgt platziert:

    Matrix4f mat = new Matrix4f();
    mat.translate(0.0f, -11.0f, 0.1f);
    mat.scale(player.getBreite(), player.getHoehe(), player.getTiefe());
    player.getObjectModel().setModelMatrix(mat);


    Es befindet sich also bei der Koordinate (0/-11). Wenn ich jetzt mit der Maus auf diese Stelle gehe werden folgende Koordinaten ausgegeben: (0 / 2,17)

    Wenn ich mit der Maus zum linken Rand gehe erhöht sich der x Wert auf maximal 0,13. Also der Ursprung ist schonmal richtig, aber wenn ich die Maus weiter nach links bewege stimmts nicht mehr ganz. Der Wert erhöht sich halt nur minimal. Und bei dem y Wert stimmt der Ursprung nicht, also da wo normalerweise -11 sein müsste steht dann 2,17 und auch da erhöht sich der Wert nur minimal.

    Wenn ich die Reihenfolge der Multiplikation bei Schritt 2 änder erhöhen sich die Werte weiter, aber passen immer noch nicht.

    Hast du ne Idee was noch falsch sein könnte?
  • in: OpenGL - Maus Position im Koordinatensystem

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Eine halbwegs brauchbare Anleitung dazu gibt es hier: *klick*.


    Ok danke für die Antwort, ich versuche mal die Anleitung Schritt für Schritt durchzugehen:

    1. Projection und View Matrix bekommen:

    Matrix4f projectionMatrix = camera.getProjectionMatrix();
    Matrix4f viewMatrix = camera.getViewMatrix();

    2. Diese multiplizieren:

    Matrix4f projMulView = projectionMatrix.mul(viewMatrix);

    3. Diese Matrix umkehren:

    projMulView.invert();

    4.

    Bis hier sollte ja alles stimmen, aber bei dem 4. Punkt weiß ich jetzt nicht mehr weiter. Wie soll ich zum Beispiel den x und y Wert auf einen Wert zwischen -1 und +1 transformieren? Und was genau kommt dann bei z hin?

    5. Vektor mit Matrix multiplizieren:

    vec4.mul(projMulView);

    6. w Komponent:

    Hab das so gemacht wie er in seinem Code:

    vec4.w = 1.0f / vec4.w;
    vec4.x *= vec4.w;
    vec4.y *= vec4.w;
    vec4.z *= vec4.w;

    ----------------

    Könntest du mal bitte über die einzelnen Punkte drüber gucken und sagen was richtig und was falsch ist und dann noch was ich bei Punkt 4 hinschreiben muss? Würde mich freuen :) Danke für die Hilfe!
  • in: OpenGL - Maus Position im Koordinatensystem

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe ein OpenGL Projekt, bei dem ich mir jetzt erstmal die Mausposition anzeigen lassen möchte. Dafür habe ich in der DisplayManager Klasse erstmal folgenden Callback angelegt:

    glfwSetCursorPosCallback(window, cursorPosCallback = new GLFWCursorPosCallback(){
    	@Override
    	public void invoke(long window, double mx, double my) {
    		mouseX = (float)mx;
    		mouseY = (float)my;
    		data.showMousePosition(mouseX, mouseY);
    	}
    });


    Die Mausposition lasse ich mir dann mit dieser Funktion ausgeben:

    public void showMousePosition(float mx, float my){
    	System.out.println(mx + ", " + my);
    }


    Das klappt auch alles. Allerdings gibt mir das ja die Position der Maus im Fenster an. Also links oben in der Ecke ist (0,0) usw. Wie kann ich jetzt die Mausposition in meinem Koordinatensystem ermitteln? Ich habe nämlich eine Kugel die am Anfang eine feste Position im Koordinatensystem hat. Und diese Kugel soll sich dann später bei einem Mausklick in Richtung der angeklickten Stelle bewegen. Also brauche ich ja die Koordinaten der angeklickten Stelle.

    Ich würde mich über Hilfe freuen.
    Viele Grüße :)
  • in: OpenGL - Objekt mit konstanter Geschwindigkeit bewegen

    geschrieben von ultimate-bravery

    davidlw schrieb:
    Angenommen speed ist der Geschwindigkeitsvektor und v Geschwindigkeit, die Du haben willst (Pseudocode)
    speed = speed * (v / speed.length())

    speed.length() sollte dabei der Betrag des Vektors, also seine Länge sein.
    Idee: Du skalierst den Vektor, so dass er eine Länge von 1 hat (normalisierst ihn) und multiplizierst ihn dann mit der gewollten Länge.


    Danke für eure Antworten. Das mit den Frames lasse ich erstmal außen vor. Jetzt erstmal zu der konstanten Geschwindigkeit. Ich habe es mal so versucht wie davidlw es vorgeschlagen hat. Das sieht bei mir so aus:

    public void startGame(){
    	if(!isStarted){
    		// Zufällige x Richtung am Anfang (zwischen -0.001 und +0.001)
    		float xSpeed = getRandomFloat(-0.002f, 0.002f);
    		float ySpeed = 0.008f;
    		setSpeed(xSpeed, ySpeed);
    		isStarted = true;
    	}
    }
    	
    private void setSpeed(float xSpeed, float ySpeed){
    	Vector3f speed = new Vector3f(xSpeed, ySpeed, 0.0f);
    	speed.normalize();
    	ball.setxSpeed(speed.x*0.02f);
    	ball.setySpeed(speed.y*0.02f);
    }


    Es werden also erstmal die ermittelten Werte an die setSpeed Funktion übergeben. Diese packt die Werte in ein Vektor und normalisiert diesen. Dann werden die neuen Werte des Vekors mit einer festen Zahl multipliziert. Wenn ich das Spiel jetzt starte scheint es auch zu funktionieren. Die Kugel scheint sich immer gleich schnell zu bewegen. Wenn jetzt allerdings eine Kollision stattfindet wird die Kugel auf einmal viel schneller. Das wird ausgeführt wenn eine Kollision mit einem Stein im rechten Drittel des Steins stattfindet und die Kugel somit weiter nach rechts abprallen soll:

    // Ball soll weiter nach rechts abprallen (Koordinatensystem geht in meinem Fall nach rechts ins negative)
    float xSpeed = ball.getxSpeed()-getRandomFloat(0.001f, 0.0025f);
    // Die y Geschwindigkeit wird umgekehrt
    float ySpeed = -ball.getySpeed();
    setSpeed(xSpeed, ySpeed);
    // Objekt verschwinden lassen...


    Die vorhandenen x und y Geschwindigkeiten werden also verändert und an die selbe Funktion wie oben übergeben. Aber wie gesagt, dann wird die Kugel auf einmal um einiges schneller. Weiß jemand woran es liegt bzw was ich falsch gemacht habe?

    EDIT:

    Ich habe es jetzt hinbekommen, indem ich die Rechnung mit dem Normalvektor erst kurz vor der Bewegung ausführe und die errechneten Werte für die x und y Geschwindigkeit auf die jeweilige Position addiere.
  • in: OpenGL - Objekt mit konstanter Geschwindigkeit bewegen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    das ist zwar eher eine mathematische Frage aber da ich sie mit Java umsetze pack ich es mal hier rein. Also ich programmiere ein kleines 2D Breakout Spiel mit OpenGL (die Z-Achse wird einfach ignoriert).

    Die Kugel bekommt am Anfang eine y Geschwindigkeit von 0.008. Das heißt in jedem Frame wird auf die y Position der Kugel 0.008 drauf gerechnet. Sie fliegt also am Anfang nach oben. Normalerweise ist es bei Breakout ja so, dass man am Anfang an eine Stelle klicken kann, wo die Kugel hin fliegen soll. Vielleicht mach ich es später auch noch so, aber momentan habe ich es so, dass die x Geschwindigkeit zufällig aus einem Bereich von -0.002 und +0.002 ermittelt wird. Wenn die Kugel auf einen der äußeren Drittel der Spielfigur unten oder auf einen Stein trifft, dann wird die x Geschwindigkeit ebenfalls um einen Zufallswert zwischen 0.001 und 0.0025 geändert. Wenn die Kugel in die Mitte der Spielfigur oder einem Stein abprallt wird nur der y Wert geändert.

    Da die x Geschwindigkeit also zufällig ist, fliegt die Kugel auch unterschiedlich schnell. Wie kann ich es jetzt machen, dass die Kugel immer gleich schnell fliegt und der Winkel trotzdem gleich bleibt?

    Kann man das mithilfe der x und y Geschwindigkeiten und einem konstanten Wert welcher die tatsächliche Geschwindigkeit ausdrückt ausrechnen?

    Danke schonmal für die Hilfe, viele Grüße :)
  • in: Float Zufallszahl

    geschrieben von ultimate-bravery

    Hallo zusammen,

    wie bekomme ich in Java eine Zufallszahl zum Beispiel zwischen -0.002 und +0.002? Ich habe es so mit Math.random versucht:

    (float)((Math.random() * 0.002) + -0.002)


    Ich habe gelesen, dass die erste Zahl die maximale Zahl ist und die zweite Zahl die mindeste Zahl. Das klappt bei mir aber nicht. Bei mir kommen da jetzt irgendwie nur negative Zahlen raus, nie eine positive. Weiß jemand was falsch ist bzw wie es richtig heißen muss?

    Danke schonmal, viele Grüße :)
  • in: OpenGL - Zwei Objekte rotieren lassen

    geschrieben von ultimate-bravery

    Ok danke schonmal!

    Also zur Zeit:

    Ich hab jetzt am Anfang eine globale Variable für die zuletzt gespeicherte Systemzeit erstellt die am Anfang 0 ist, also:

    private long letzteSystemzeit = 0;

    Dann am Anfang der animate() Methode hab ich folgendes:

    if(letzteSystemzeit == 0){
        	letzteSystemzeit = System.currentTimeMillis();
    }
    long vergangeneZeit = System.currentTimeMillis() - letzteSystemzeit;

    Also beim ersten mal wird es dann auf die aktuelle Systemzeit gesetzt. In der Variable vergangeneZeit wird dann halt die Differenz gespeichert. Und der der rotate Aufruf sieht dann so aus:

    entities.get(0).setModelMatrix(entities.get(0).getModelMatrix().rotateY((float)Math.toRadians((0.3/1000)*vergangeneZeit)));

    Also er soll sich 0,0003 mal pro Millisekunde drehen und das wird dann halt mit der vergangenen Zeit multipliziert. Am Ende der Methode wird die letzteSystemzeit dann wieder auf System.currentTimeMillis() gesetzt. Das ganze klappt aber irgendwie nicht. Die drehen sich jetzt nicht mehr.


    Dann zur Drehung:

    Muss ich dann also nachdem der Matrix erstellt wurde diese mit der Globalen Rotationsmatrix multiplizieren, also so:

    Matrix4f m1 = new Matrix4f();
    m1.mul(...);
    m1.rotate((float)Math.toRadians(90),0,1,0);
    m1.translate(0,0,1);
    entities.get(0).setModelMatrix(m1);


    Und wie komme ich an die Globale Rotationsmatrix? :)

    EDIT zur Drehung:

    Das was ich da gepostet hab war ja die einmalige Ausrichtung am Anfang. Also da hat das multiplizieren dann ja nichts zu suchen. Also nehme ich an soll vor dem rotateY Aufruf die globale Rotationsmatrix multipliziert werden. Aber wie schon gesagt, ich weiß leider nicht wie ich das machen könnte. Hab auch noch nichts dazu gefunden. Wäre also nett wenn du nochmal genauer helfen könntest :)
  • in: OpenGL - Zwei Objekte rotieren lassen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich übe gerade ein bisschen mit OpenGL und habe eine Frage. Und zwar habe ich zwei Figuren die sich am Anfang angucken. Diese Figuren sollen sich dann um deren gemeinsamen Mittelpunkt drehen, also quasi als würden sie sich an den Händen anfassen und dann im Kreis drehen. Ich habe es bis jetzt so in der animate() Methode gemacht:

    public void animate(ArrayList<Entity> entities) {
        	// Am Anfang werden die Figuren einmal ausgerichtet, sodass sie sich angucken
        	if(!istGedreht){
        		Matrix4f m1 = new Matrix4f();
        		m1.rotate((float)Math.toRadians(90),0,1,0);
        		m1.translate(0,0,1);
        		entities.get(0).setModelMatrix(m1);
        		
        		Matrix4f m2 = new Matrix4f();
        		m2.rotate((float)Math.toRadians(-90),0,1,0);
        		m2.translate(0,0,1);
        		entities.get(1).setModelMatrix(m2);
        		
        		istGedreht = true;
        	}
    
            // Dann sollen sich die Figuren 0,3 mal pro Sekunde drehen
        	long systemzeit = System.currentTimeMillis();
        	while(System.currentTimeMillis() < systemzeit+(1000/(360/(1/0.3)))){
        		// 0,3 Umdrehungen pro Sekunde
        		// 108° pro 1 Sekunde
        		// 108° pro 1000 Millisekunden
        		// 1° pro 9,259 Millisekunden
        		// Also 9,259 Millisekunden schlafen, dann um 1° drehen
        	}
        	entities.get(0).setModelMatrix(entities.get(0).getModelMatrix().rotateY((float)Math.toRadians(1)));
        	entities.get(1).setModelMatrix(entities.get(1).getModelMatrix().rotateY((float)Math.toRadians(1)));
    }


    So jetzt drehen sich die beiden Figuren aber jeweils nur um ihre eigene Achse, und nicht um die Achse die in der Mitte von beiden ist. Wie bekomme ich das jetzt hin? Und das mit den 0,3 Umdrehungen pro Sekunde ist nur eine Notlösung, ich wusste nicht wie man das sonst machen könnte. Also falls ihr da auch noch was zu wisst würde ich mich da auch über Hilfe freuen.

    Viele Grüße :)
  • in: Android - z-index von gezeichneten Objekten

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich erzeuge in meiner App ein SurfaceView, auf das was gezeichnet wird. So steht es erstmal in der OnDraw Methode:

    protected void onDraw(Canvas canvas) {
    		canvas.drawColor(Color.GRAY);
    		spielfeld.drawMe(canvas);
    		spielfigur.drawMe(canvas);
    		
    		
    		// Header
    		paint.setStyle(Paint.Style.FILL);
            	paint.setColor(Color.DKGRAY);
    		canvas.drawRect(0, 0, getWidth(), 100, paint);
    	}


    In der untersten Ebene ist also der graue Hintergrund, dann kommt das Spielfeld, dann die Spielfigur und ganz oben soll dann noch so ein Header sein, der über allem steht.

    Bei einem bestimmten Ereignis soll sich allerdings die Spielfigur sozusagen zu einem Punkt auf dem Header bewegen. Da die Spielfigur aber zuerst gezeichnet wurde, liegt sie dann unter dem Header, nachdem sie sich zu dem Punkt bewegt hat. Wie kann ich dann sozusagen die Spielfigur über den Header bekommen? Kann man irgendwie einen z-index ändern? Kenne das mit dem z-index von HTML und CSS. Gibts das für java bzw speziell für meinen Fall auch in irgendeiner Form?

    Danke schonmal für eure Hilfe :)

    Viele Grüße
  • in: Android - Objekt bewegen mit Hilfe des Bewegungssensors

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich versuche gerade einen Kreis, der am Anfang in der Mitte des Bildschirms ist, durch Bewegen des Smartphones nach links oder nach rechts zu bewegen.

    Ich präsentiere euch einfach mal meinen Code und fange mit der Activity Klasse an:

    import android.app.Activity;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.view.WindowManager;
    
    public class GameActivity extends Activity {
    
    	SensorManager sm;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    		sm = (SensorManager) getSystemService(SENSOR_SERVICE);
    		setContentView(new GameView(this, sm));
    	}
    
    }

    Dort wird ein SensorManager erstellt, der an die GameView Klasse, welche als Layout genutzt wird, weitergegeben wird. Das habe ich so gemacht, da ich es nicht hinbekommen habe, den SensorManager in der GameView Klasse zu erstellen. Hier ist die GameView Klasse:

    import java.util.ArrayList;
    import java.util.Random;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Point;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    
    public class GameView extends SurfaceView implements SensorEventListener {
    
    	private SurfaceHolder surfaceHolder;
    	private GameLoopThread theGameLoopThread;
    	private Figur spielfigur;
    	
    	private Sensor accelerometer;
    
    	@SuppressLint("WrongCall")
    	public GameView(Context context, SensorManager sm) {
    		super(context);
    		
    		accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            	sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
            
    		theGameLoopThread = new GameLoopThread(this);
    		surfaceHolder = getHolder();
    		surfaceHolder.addCallback(new SurfaceHolder.Callback() {
    
    			public void surfaceDestroyed(SurfaceHolder holder) {
    				boolean retry = true;
    				theGameLoopThread.setRunning(false);
    				while (retry) {
    					try {
    						theGameLoopThread.join();
    						retry = false;
    					} catch (InterruptedException e) {
    
    					}
    				}
    
    			}
    
    			public void surfaceCreated(SurfaceHolder holder) {
    				theGameLoopThread.setRunning(true);
    				theGameLoopThread.start();
    			}
    
    			public void surfaceChanged(SurfaceHolder holder, int format,
    					int width, int height) {
    
    			}
    		});
    		spielfigur = new Figur(this);
    	}
    
    	@SuppressLint("WrongCall")
    	@Override
    	protected void onDraw(Canvas canvas) {
    		canvas.drawColor(Color.DKGRAY);
    		spielfigur.drawMe(canvas);
    	}
    
    	@Override
    	public void onSensorChanged(SensorEvent event) {
    		try {
    			Thread.sleep(16);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		int moveX =(int) -event.values[0];
    		spielfigur.setXSpeed(moveX*20);
    	}
    
    	@Override
    	public void onAccuracyChanged(Sensor sensor, int accuracy) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }

    Die Klasse erbt von der Klasse SurfaceView und implementiert das Interface SensorEventListener. Dort werden halt die Bewegungen wahr genommen und dementsprechend die Bewegungsgeschwindigkeit angepasst. Außerdem sorgt sie für das Zeichnen. Damit der Kreis sich schneller bewegt, multipliziere ich den x Wert des Sensors noch mit 20. Hier ist jetzt meine Klasse für den Kreis bzw für die Figur:

    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Point;
    
    public class Figur implements Drawable {
    	
    	private float x;
    	private float y;
    	private float radius = 20;
    	private int xSpeed = 0;
    	private Paint paint;
    	private GameView gameView;
    	private boolean oneTime = false;
    	
    	public Figur(GameView gameView){
    		this.gameView = gameView;
    		
    		paint = new Paint();
            	paint.setStyle(Paint.Style.FILL);
            	paint.setColor(Color.RED);
    	}
    
    	@Override
    	public void drawMe(Canvas canvas) {
    		if(!oneTime){
    			oneTime = true;
    			x = canvas.getWidth()/2;
    			y = canvas.getHeight()/2;
    		}
    		moveAndCheckCollision();
    		canvas.drawCircle(x, y, radius, paint);
    	}
    	
    	public void moveAndCheckCollision() {
    		// Kollision mit Rand
    		if(x > gameView.getWidth() - radius - xSpeed || x - radius + xSpeed < 0){
    			xSpeed = 0;
    		}
    		x += xSpeed;
    	}
    	
    	public void setXSpeed(int xSpeed){
    		this.xSpeed = xSpeed;
    	}
    
    }

    Dann hier noch die Thread Klasse:

    import android.annotation.SuppressLint;
    import android.graphics.Canvas;
    
    public class GameLoopThread extends Thread {
    	static final long FPS = 20;
        private GameView theView;
        private boolean isRunning = false;
     
        public GameLoopThread(GameView theView) {
            this.theView = theView;
        }
     
        public void setRunning(boolean run) {
            isRunning = run;
        }
        
        @SuppressLint("WrongCall") 
        @Override
        public void run() {
        	long TPS = 1000 / FPS;
        	long startTime, sleepTime;
        	
            while (isRunning) {
                Canvas theCanvas = null;
                startTime = System.currentTimeMillis();
                try {
                    theCanvas = theView.getHolder().lockCanvas();
                    synchronized (theView.getHolder()) {
                        theView.onDraw(theCanvas);
                    }
                } finally {
                    if (theCanvas != null) {
                        theView.getHolder().unlockCanvasAndPost(theCanvas);
                    }
                }
                sleepTime = TPS - (System.currentTimeMillis() - startTime);
                try{
                	if(sleepTime > 0){
                		sleep(sleepTime);
                	}
                	else{
                		sleep(10);
                	}
                }
                catch (Exception e){
                	
                }
            }
        }
     
    }

    Den größten Teil davon, zum Beispiel die Thread Klasse oder die GameView Klasse habe ich aus einem Tutorial. Das mit dem Sensor und der Figur habe ich dann dazu gepackt. Ich bin jetzt noch nicht ganz zufrieden damit^^ Der Kreis bewegt sich zwar schon recht flüssig, aber es könnte noch besser gehen. Und wenn man das Handy sehr stark neigt, dann bleibt der Kreis schon etwas vor dem Bildschirmrand stehen, da die Geschwindigkeit ja dann ziemlich hoch ist und somit die if Abfrage in der moveAndCheckCollision() Methode eintrifft und die Geschwindigkeit auf 0 gesetzt wird. Was mich noch stört ist, das der Spielraum, in der die Geschwindigkeit 0 ist, sehr groß ist. Das heißt, ich kann das Handy in beide Richtungen um ca 10°-20° drehen, ohne dass sich der Kreis bewegt. Das sollte feiner werden, also er sollte sich schon früher bewegen.

    Ich würde mir also gerne Verbesserungsvorschläge von euch anhören, wie ich diese Bewegung optimieren könnte. Wäre cool wenn sich der ein oder andere mal Zeit nimmt und drüber guckt.

    Viele Grüße
  • in: Android - Standby verhindern

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte bei meiner App verhindern, dass sich der Standby einschaltet, während die App geöffnet ist. Ich habe bereits gegooglet und zum Beispiel dies hier gefunden:

    http://stackoverflow.com/questions/4633725/disable-screen-timeout-android-phone-tablet

    Dort steht eine Variante mit XML, die ich allerdings nicht benutzen kann, da mein Layout mit Java erstellt wird und nich mit XML. Dann steht da noch dieser Code:

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


    Aber wo genau müsste das denn hin? Oder gibts noch ne andere Möglichkeit die besser ist?

    Ich hoffe ihr könnt mir helfen.

    Viele Grüße
  • in: BoxLayout linksbündig

    geschrieben von ultimate-bravery

    sfhdd schrieb:
    Du musst das FlowLayout links ausrichten, also
    new FlowLayout(FlowLayout.LEFT))
    .


    Sehr gut danke, das hat das Problem behoben :) Hab recht lange gesucht und nirgendwo diese Antwort gefunden, also danke :) Und danke auch an die anderen :)
  • in: BoxLayout linksbündig

    geschrieben von ultimate-bravery

    Hallo zusammen,

    mein gesamter Content ist ein BorderLayout. Im Westen des BorderLayouts habe ich ein BoxLayout, welches wiederum vier FlowLayouts untereinander hat, welche jeweils eine Checkbox und einen Text nebeneinander haben. Diese FlowLayouts sollen linksbündig sein. Das ist mein Code, welcher den Westen des BorderLayouts füllt:

    JPanel pAntworten = new JPanel();
    pAntworten.setLayout(new BoxLayout(pAntworten, BoxLayout.Y_AXIS));
    JPanel pAntwort[] = new JPanel[anzAntworten];
    
    for(int i = 0; i < anzAntworten; i++){
    	lAntwort[i] = new JLabel(antworten[i].getSymbol() + ": " + antworten[i].getText());
    	cbAntwort[i] = new JCheckBox();
    	
    	pAntwort[i] = new JPanel(new FlowLayout());
    	pAntwort[i].setAlignmentX(Component.LEFT_ALIGNMENT);
    			
    	pAntwort[i].add(cbAntwort[i]);
    	pAntwort[i].add(lAntwort[i]);
    			
    	pAntworten.add(pAntwort[i]);
    }
    content.add(pAntworten, BorderLayout.WEST);


    Wie ihr seht habe ich schon versucht die einzelnen FlowLayouts linksbündig zu machen, das klappt aber nicht. Es sieht bei mir so aus:

    http://img5.fotos-hochladen.net/uploads/quiz7yxvhstr5l.png

    Weiß jemand was ich ändern muss?

    Viele Grüße :)
  • in: Hintergund soll für verschiedene Geräte anders sein

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte bei meiner Website für PCs und Laptops ein Video als Hintergrund haben, welches in einer Dauerschleife abgespielt wird, und für Smartphones und Tablets soll einfach ein Ausschnitt aus diesem Video als Hintergrundbild gesetzt werden.

    Momentan habe ich erstmal nur das Video als Hintergrund, das habe ich so gemacht:

    HTML:
    <div id="background_video" class="background">
        <video src="videos/background.mp4" autoplay loop></video>
    </div>


    CSS:
    .background {
      position: fixed;
      width: 100%;
      height: 100%;
      overflow: hidden;
      top: 0;
      left: 0;
      z-index: -1;
    }
    .background video {
      min-width: 100%;
      min-height: 100%;
    }


    Ich weiß man kann mit @media in der CSS Datei zum Beispiel eine Bedingung für die mindest Breite machen, aber die Breite ist ja nicht zwangsläufig eine Definition dafür, obs ein Smartphone ist oder nicht. Also wie sollte ich am besten vorgehen, um zu ermitteln ob es ein Smartphone oder ein Tablet ist?

    Danke schon mal für die Hilfe.

    Viele Grüße :)
  • in: JFrame zeichnen - Ablauf wiederholt sich unerwünscht

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Der Vector ist hier allerdings wohl die elegantere und einfachere Lösung.


    Ok danke! Ich hab jetzt einen Vector, wo alle Spielsteine am Anfang drin sind (spielsteine) und einen Vector wo die Spielsteine aus dem ersten Vector hinzugefügt werden (spielfeld). Jetzt möchte ich es so machen, dass ein Spielstein wieder vom Spielfeld entfernt wird, wenn die linke Seite des neu hinzugefügten Spielsteins nicht die gleiche Farbe hat wie die rechte Seite des zuvor gesetzten Spielsteins. Hier ist mein Code der Thread Klasse:

    public class MultiThread extends Thread {
        	public void run(){
        		// Spielfeld füllen
        		int durchgang = 1;
        		for(int i = 0; i < spielsteine.size(); i++){
        			spielfeld.add(spielsteine.get(i));
        			repaint();
            		sleeep(700);
            		if(durchgang > 1){
            			if(spielsteine.get(i).getLinks() != spielfeld.get(spielfeld.size()-2).getRechts()){
            				System.out.println("Fehler bei Durchgang: " + durchgang);
            				spielfeld.remove(spielfeld.size()-1);
            				repaint();
            			}
            		}
            		durchgang++;
        		}
        	}
        	
        	public void sleeep(int dauer){
        		try {
    				Thread.sleep(dauer);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
        	}
        }


    Also er vergleicht halt den aktuell hinzugefügten Spielstein mit dem davor hinzugefügtem Spielstein. Und wenn die Farben nicht gleich sind wird der letzte Stein aus dem Spielfeld wieder gelöscht und dann wird neu gezeichnet. Allerdings funktioniert das bei mir nicht. Die Steine werden trotzdem noch gezeichnet.

    Bei einem Durchgang kam auch gerade folgender Fehler:

    Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
    at java.util.Vector$Itr.checkForComodification(Unknown Source)
    at java.util.Vector$Itr.next(Unknown Source)
    at klassen.AppFrame2.paint(AppFrame2.java:31)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.access$1300(Unknown Source)
    at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    Und hier noch die Paint Methode:

    public void paint(Graphics g){
        	for(Spielstein each: spielfeld){
        		zeichneSpielstein(g, each);
        	}
        }


    Zeile 31 ist das wo das for in der paint Methode anfängt. Die Fehler kamen grad aber nur bei einem Durchlauf. Wenn ich es jetzt nochmal starte zeichnet er einfach alle Spielsteine und löscht die betroffenen halt nicht wieder.

    Weißt du was falsch ist?

    EDIT:

    Es funktioniert jetzt. Lag wohl daran, dass jedem Spielstein am Anfang schon feste Koordinaten zugeteilt wurde. Das mit den Koordinaten zuteilen mache ich jetzt in der paint Methode. Jetzt klappt es.
  • in: JFrame zeichnen - Ablauf wiederholt sich unerwünscht

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Du brauchst Multi-Threading....


    Super danke :) Ich habs soweit hinbekommen. Hier ist mein Code:

    public class AppFrame2 extends JFrame { 
    
        private static final long serialVersionUID = 1L;
        private ArrayList<Spielstein> spielsteine = new ArrayList<Spielstein>();
    
        public AppFrame2() {
        	super();
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		MultiThread t1 = new MultiThread();
    		t1.start();
        }
        
        public void paint(Graphics g){
        	for(Spielstein each: spielsteine){
        		zeichneSpielstein(g, each);
        	}
        }
        
        public void zeichneSpielstein(Graphics stift, Spielstein s) {
        	int x = s.getX();
        	int y = s.getY();
        	int width = s.getWidth();
        	int heigth = s.getHeigth();
        	Color farbe1 = s.getOben();
        	Color farbe2 = s.getRechts();
        	Color farbe3 = s.getUnten();
        	Color farbe4 = s.getLinks();
    		stift.drawRect(x, y, width, heigth);
    		// Oberes Dreieck
    		int[] xcoords = { x + (width - 1), x + 1, x + (width / 2) };
    		int[] ycoords = { y + 1, y + 1, y + (heigth / 2) };
    		stift.setColor(farbe1);
    		stift.fillPolygon(xcoords, ycoords, xcoords.length);
    		// Rechtes Dreieck
    		int[] xcoords2 = { x + (width - 1), x + (width - 1), x + (width / 2) };
    		int[] ycoords2 = { y + (heigth - 1), y + 1, y + (heigth / 2) };
    		stift.setColor(farbe2);
    		stift.fillPolygon(xcoords2, ycoords2, xcoords2.length);
    		// Unteres Dreieck
    		int[] xcoords3 = { x + 1, x + width, x + (width / 2) };
    		int[] ycoords3 = { y + heigth, y + heigth, y + (heigth / 2) };
    		stift.setColor(farbe3);
    		stift.fillPolygon(xcoords3, ycoords3, xcoords3.length);
    		// Linkes Dreieck
    		int[] xcoords4 = { x + 1, x + 1, x + (width / 2) };
    		int[] ycoords4 = { y + 1, y + (heigth - 1), y + (heigth / 2) };
    		stift.setColor(farbe4);
    		stift.fillPolygon(xcoords4, ycoords4, xcoords4.length);
    		stift.setColor(Color.BLACK);
    	}
        
        public class MultiThread extends Thread {
        	public void run(){
        		spielsteine.add(new Spielstein(100, 100, 100, 100, Color.RED, Color.YELLOW, Color.ORANGE, Color.BLUE));
        		repaint();
        		try {
    				Thread.sleep(700);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
        		spielsteine.add(new Spielstein(200, 100, 100, 100, Color.RED, Color.YELLOW, Color.ORANGE, Color.BLUE));
        		repaint();
        	}
        }
    }


    Allerdings habe ich jetzt noch keine Synchronisation eingebaut. Ist das nötig? Und wenn ja, muss das dann einfach um den ganzen Teil in der Run Methode oder wie muss ich das machen?
  • in: JFrame zeichnen - Ablauf wiederholt sich unerwünscht

    geschrieben von ultimate-bravery

    Ich habs jetzt erstmal so realisiert:

    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Font; 
    import java.awt.Graphics; 
    import java.awt.image.BufferedImage;
    import javax.swing.ImageIcon; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.border.LineBorder; 
    
    public class AppFrame2 extends JFrame { 
    
        private static final long serialVersionUID = 1L; 
    
        private BufferedImage image; 
    
        public AppFrame2() {
             
            this.image = new BufferedImage(980, 700, BufferedImage.TYPE_INT_RGB);
             
            int x = 100;
    		int y = 100;
    		int width = 100;
    		int heigth = 100;
    		for(int i = 0; i < 4; i++){
    			zeichneSpielstein(x, y, width, heigth, Color.RED, Color.yellow, Color.GREEN, Color.blue);
    			x += 100;
    			try {
    				Thread.sleep(700);
    			} catch (InterruptedException ex) {
    				Thread.currentThread().interrupt();
    			}
    		}
        }
        
        public void paint(Graphics g){
        	g.drawImage(image, 0, 0, null);
        }
        
        public void zeichneSpielstein(int x, int y, int width,
    			int heigth, Color farbe1, Color farbe2, Color farbe3, Color farbe4) {
        	Graphics stift = image.getGraphics();
    		stift.drawRect(x, y, width, heigth);
    		// Oberes Dreieck
    		int[] xcoords = { x + (width - 1), x + 1, x + (width / 2) };
    		int[] ycoords = { y + 1, y + 1, y + (heigth / 2) };
    		stift.setColor(farbe1);
    		stift.fillPolygon(xcoords, ycoords, xcoords.length);
    		// Rechtes Dreieck
    		int[] xcoords2 = { x + (width - 1), x + (width - 1), x + (width / 2) };
    		int[] ycoords2 = { y + (heigth - 1), y + 1, y + (heigth / 2) };
    		stift.setColor(farbe2);
    		stift.fillPolygon(xcoords2, ycoords2, xcoords2.length);
    		// Unteres Dreieck
    		int[] xcoords3 = { x + 1, x + width, x + (width / 2) };
    		int[] ycoords3 = { y + heigth, y + heigth, y + (heigth / 2) };
    		stift.setColor(farbe3);
    		stift.fillPolygon(xcoords3, ycoords3, xcoords3.length);
    		// Linkes Dreieck
    		int[] xcoords4 = { x + 1, x + 1, x + (width / 2) };
    		int[] ycoords4 = { y + 1, y + (heigth - 1), y + (heigth / 2) };
    		stift.setColor(farbe4);
    		stift.fillPolygon(xcoords4, ycoords4, xcoords4.length);
    		stift.setColor(Color.BLACK);
    	}
    }


    Allerdings wartet er jetzt so lange bis alle Spielsteine gezeichnet wurden und dann öffnet er erst das Fenster. Aber man soll ja sehen wie die Spielsteine gezeichnet werden. Jemand ne Idee was ich ändern sollte?
  • in: JFrame zeichnen - Ablauf wiederholt sich unerwünscht

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Was du tun kannst: in ein BufferedImage zeichnen und dieses dann innerhalb von paint auf das JFrame zeichnen. Damit kannst du dir auch beim Zeichnen des BufferedImages Zeit lassen ? du musst dann nur auf Synchronisation aufpassen.


    Ok ich denke ich werde mal das mit dem BufferedImage versuchen. Ich habe dazu hier mal eine Anleitung gefunden:

    http://javabeginners.de/Grafik/Auf_ein_Bild_zeichnen.php

    Aber in dem Beispiel zeichnet er in ein bestehendes Bild. Wie kann ich denn jetzt sozusagen ein leeres BufferedImage erstellen?

    Ich habs so probiert:

    this.image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);


    Also ich hab erstmal zum Testen alles aus dem Beispiel kopiert, nur die Zuweisung der image Variable in die obrige geändert.

    Jetzt öffnet sich bei mir ein Fenster mit einem schwarzen Quadrat in der mitte. Das sollte ja nicht so sein oder?

    EDIT:

    Klappt doch, ich musste das BufferedImage nur größer machen.

    Jetzt ist es also schwarz, wie kann ich das jetzt in Weiß machen?
  • in: JFrame zeichnen - Ablauf wiederholt sich unerwünscht

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte ein Programm schreiben, welches erstmal eine beliebige Anzahl an Spielsteinen nebeneinander zeichnet. Dafür habe ich zwei Klassen geschrieben, einmal eine Klasse für das Frame und dann die App Klasse:

    App:

    public class App {
    
    	public static void main(String[] args) {
    		AppFrame frame = new AppFrame();
    		frame.setSize(980, 700);
    		frame.setVisible(true);
    	}
    
    }


    AppFrame:

    import java.awt.Color;
    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    
    public class AppFrame extends JFrame {
    
    	public AppFrame() {
    		super();
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    	}
    
    	public void paint(Graphics stift) {
    		int x = 100;
    		int y = 100;
    		int width = 100;
    		int heigth = 100;
    		for(int i = 0; i < 4; i++){
    			zeichneSpielstein(stift, x, y, width, heigth, Color.RED, Color.yellow, Color.GREEN, Color.blue);
    			x += 100;
    			try {
    				Thread.sleep(700);
    			} catch (InterruptedException ex) {
    				Thread.currentThread().interrupt();
    			}
    		}
    	}
    	
    	public void zeichneSpielstein(Graphics stift, int x, int y, int width,
    			int heigth, Color farbe1, Color farbe2, Color farbe3, Color farbe4) {
    		stift.drawRect(x, y, width, heigth);
    		// Oberes Dreieck
    		int[] xcoords = { x + (width - 1), x + 1, x + (width / 2) };
    		int[] ycoords = { y + 1, y + 1, y + (heigth / 2) };
    		stift.setColor(farbe1);
    		stift.fillPolygon(xcoords, ycoords, xcoords.length);
    		// Rechtes Dreieck
    		int[] xcoords2 = { x + (width - 1), x + (width - 1), x + (width / 2) };
    		int[] ycoords2 = { y + (heigth - 1), y + 1, y + (heigth / 2) };
    		stift.setColor(farbe2);
    		stift.fillPolygon(xcoords2, ycoords2, xcoords2.length);
    		// Unteres Dreieck
    		int[] xcoords3 = { x + 1, x + width, x + (width / 2) };
    		int[] ycoords3 = { y + heigth, y + heigth, y + (heigth / 2) };
    		stift.setColor(farbe3);
    		stift.fillPolygon(xcoords3, ycoords3, xcoords3.length);
    		// Linkes Dreieck
    		int[] xcoords4 = { x + 1, x + 1, x + (width / 2) };
    		int[] ycoords4 = { y + 1, y + (heigth - 1), y + (heigth / 2) };
    		stift.setColor(farbe4);
    		stift.fillPolygon(xcoords4, ycoords4, xcoords4.length);
    		stift.setColor(Color.BLACK);
    	}
    
    }


    In der Frame Klasse habe ich eine Mehtode definiert, die so einen Spielstein zeichnet. In der Methode "paint" habe ich dann eine Schleife die diesen Spielstein zum testen 4 mal nebeneinander zeichnen soll, mit einer kleinen Verzögerung dazwischen.

    Das klappt auch alles soweit, außer das sich der Ablauf wiederholt, sobald einmal die 4 Spielsteine gezeichnet wurden. Das heißt er zeichnet die 4 Spielsteine, dann gehen auf einmal alle wieder weg und danach zeichnet er die Steine erneut. Und erst danach kann man das Programm beenden. Ich hab keine Idee woran das liegen könnte.

    Ich hoffe mir kann jemand hier helfen.
    Viele Grüße
  • in: Android - Zeitleiste - 10 Sekunden Rhythmus

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe eine Art Spiel, bei dem man 10 Sekunden pro Runde Zeit hat, um etwas zu machen. Nach den 10 Sekunden startet direkt eine neue Runde. Während einer Runde füllt sich eine ProgressBar, so dass sie nach den 10 Sekunden voll ist. Dazu habe ich mir folgendes zusammen gebastelt:

    public void starteRunde() {
    	progressStatus = 0;
    	
    	// hier passiert was
    
    	new Thread(new Runnable() {
    		public void run() {
    			while (progressStatus < 100) {
    				progressStatus += 1;
    				// Update the progress bar and display the
    				// current value in the text view
    				pbHandler.post(new Runnable() {
    					public void run() {
    						pbTimeline.setProgress(progressStatus);
    					}
    				});
    				try {
    					// Sleep for 100 milliseconds.
    					Thread.sleep(100);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}).start();
    	
    	Handler handler = new Handler();
    	Runnable runnable = new Runnable() {
    		@Override
    		public void run() {
    			if(rundenNr++ < 9){
    				starteRunde();
    			}
    		}
    	};
    	handler.postDelayed(runnable, 10000);
    }


    Wie gesagt, ist nur zusammen gebastelt und vermutlich nicht sehr gut umgesetzt^^ Wer eine bessere Lösung kennt darf sie mir gerne verraten :)

    Auf jeden Fall ist es jetzt so, dass die erste Runde normal läuft. In der zweiten Runde füllt sich die ProgressBar schon in 5 Sekunden und nach weiteren 5 Sekunden geht die neue Runde los. In der füllt sich die ProgressBar wieder normal in 10 Sekunden usw. Also jede zweite Runde füllt sich der Balken in 5 Sekunden. Und ich verstehe nicht warum. Weiß jemand woran das liegen könnte?
  • in: Android: Bild per URL einfügen

    geschrieben von ultimate-bravery

    Ich habe jetzt eine funktionierende Lösung gefunden:

    public class LoadImageTask extends AsyncTask<String, Void, Bitmap> {
    
    	@Override
    	protected Bitmap doInBackground(String... params) {
            // TODO Auto-generated method stub
            String urlStr = params[0];
            Bitmap img = null;
    
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(urlStr);
            HttpResponse response;
            try {
                response = (HttpResponse)client.execute(request);           
                HttpEntity entity = response.getEntity();
                BufferedHttpEntity bufferedEntity = new BufferedHttpEntity(entity);
                InputStream inputStream = bufferedEntity.getContent();
                img = BitmapFactory.decodeStream(inputStream);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return img;
        }
    	
    	@Override
    	protected void onPostExecute(Bitmap result) {
    		image.setImageBitmap(result);
    	}
    }
  • in: Android: Bild per URL einfügen

    geschrieben von ultimate-bravery

    davidlw schrieb:
    https://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute%28Result%29

    Die Docs zu lesen hilft meistens ;) Eine Möglichkeit wäre einfach das Image als Result zurückzugeben und dann in der oben verlinkten Methode zu setzen.


    Das hast du Recht, das wäre hilfreich gewesen :) Also ich habs jetzt so umgesetzt:

    public class LoadImageTask extends AsyncTask<String, Void, InputStream> {
    
    	@Override
    	protected InputStream doInBackground(String... urls) {
    
    		URL url = null;
    		try {
    			url = new URL(urls[0]);
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    		}
    		Object content = null;
    		try {
    			content = url.getContent();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		InputStream is = (InputStream)content;
    		return is;
    	}
    		
    	@Override
    	protected void onPostExecute(InputStream result) {
    		image.setImageDrawable(Drawable.createFromStream(result,"src"));
    	}
    }


    Jetzt kommt zumindest schonmal keine Fehlermeldung mehr, allerdings wird mir auch kein Bild angezeigt. Die Stelle bleibt einfach Weiß. Weiß jemand was jetzt noch falsch ist?

    EDIT:

    Das steht im LogCat:


    D/skia(2606): ---- read threw an exception
    D/skia(2606): --- SkImageDecoder::Factory returned null


  • in: Android: Bild per URL einfügen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte ein Bild anhand einer URL in meiner App anzeigen lassen. Dafür habe ich folgenden Code gefunden:


    private ImageView image = (ImageView) findViewById(R.id.image);


    public void starteSpiel(){
    	String bildurl = "http://upload.wikimedia.org/wikipedia/commons/e/ee/Crested_Tern_Tasmania_(edit).jpg"; // Zum Test ein Random Bild von Wikipedia
    	bildLaden(bildurl);
    }


    private void bildLaden(String urlString) {
    	URL url = null;
    	try {
    		url = new URL(urlString);
    	} catch (MalformedURLException e) {
    		e.printStackTrace();
    	}
    	Object content = null;
    	try {
    		content = url.getContent();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    	InputStream is = (InputStream)content;
    	image.setImageDrawable(Drawable.createFromStream(is,"src"));
    }


    Mit dem Code kommt dann folgende Fehlermeldung:

    E/AndroidRuntime(1352): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.example.app/de.example.app.SpielActivity}: android.os.NetworkOnMainThreadException


    Ich habe mich darüber informiert. Anscheinend darf man den Code nicht im UI Thread ausführen, sondern mit einer AsyncTask Klasse. Also habe ich den Code aus der bildLaden Funktion in eine eigene AsyncTask Klasse gepackt, die innerhalb der Activity Klasse ist:

    public class LoadImageTask extends AsyncTask<String, Void, String> {
    
    	@Override
    	protected String doInBackground(String... urls) {
    
    		String result = "";
    		URL url = null;
    		try {
    			url = new URL(urls[0]);
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    		}
    		Object content = null;
    		try {
    			content = url.getContent();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		InputStream is = (InputStream)content;
    		image.setImageDrawable(Drawable.createFromStream(is,"src"));
    		return result;
    	}
    }


    Und so wird sie aufgerufen:

    LoadImageTask asyncTask = new LoadImageTask();
    asyncTask.execute(new String[] { bildurl });


    Dann bekomme ich aber folgende Meldung:

    E/AndroidRuntime(2269): java.lang.RuntimeException: An error occured while executing doInBackground()


    Darüber habe ich mich auch informiert, das liegt vermutlich daran, dass man in der doinbackground Methode auf keine Element aus dem UI Thread zugreifen darf, was in diesem Fall das image ist. Ich habe jetzt aber keine Idee mehr, wie ich mein Vorhaben passend umsetzen könnte. Und im Internet finde ich auch nichts passendes mehr. Also ich würde mich sehr über Hilfe freuen.

    Viele Grüße
  • in: Spiel für Browser programmieren

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe vor ein kleines Spiel zu programmieren und ich bin mir nicht sicher wie ich das am besten mache. Um das Grundprinzip am besten erklären zu können, mache ich das jetzt hier mal als Beispiel mit einem TicTacToe Spiel.

    Also wenn man ein neues Spiel startet soll ein Gegner gesucht werden. Wenn ein Gegner gefunden wurde soll das Spiel starten. Dann fängt zum Beispiel Spieler 1 an und setzt sein Symbol auf ein Feld. Dann kommt Spieler 2 usw. Das Spiel soll im Browser zu spielen sein und das ganze soll am besten passieren, ohne das die Seite ständig neu laden muss. Mir geht es als erstes darum, wie man das macht, dass sich zwei Spieler zu einem Spiel zusammen finden. Wie realisiert man sowas? Geht sowas überhaupt mit PHP?

    Kennt vielleicht sogar jemand ein gutes Tutorial, was mein Anliegen gut erklärt?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: .htaccess richtig gemacht?

    geschrieben von ultimate-bravery

    Ok danke schonmal dafür ;) Das Problem tritt allerdings immernoch auf. Sonst keiner eine Idee?
  • in: .htaccess richtig gemacht?

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Wenn ich bei meiner Seite zum Beispiel auf eine Unterseite wechseln möchte, hängt sich manchmal die Seite auf und man kann keinen weiteren Link mehr anklicken. Außerdem kommt dann irgendwann die Meldung "Die Seite reagiert nicht mehr". Ein Neuladen der Seite bringt dann auch nichts. Nur wenn ich den Tab schließe und die URL manuell eingebe geht es dann in der Regel.

    Ich benutze eine .htaccess Datei in der die URLs "verbessert" werden. Ich vermute, dass das daran liegt, da ich das damals beim Testen der Datei schon hatte, als noch Fehler drin waren. Jetzt tritt das allerdings nur hin und wieder auf. Könnt ihr mal drüber gucken? Vielleicht ist ja was falsch bzw vielleicht kann man was besser machen:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^champion/(.*)/Guide/(.*)/$ champion.php?champ=$1&tab=Guide&lane=$2
    RewriteRule ^champion/(.*)/Guide/(.*)$ champion.php?champ=$1&tab=Guide&lane=$2
    RewriteRule ^champion/(.*)/(.*)/$ champion.php?champ=$1&tab=$2
    RewriteRule ^champion/(.*)/(.*)$ champion.php?champ=$1&tab=$2
    RewriteRule ^champion/(.*)$ champion.php?champ=$1&tab=Overview
    RewriteRule ^tierlist/(.*)/$ tierlist.php?mode=$1
    RewriteRule ^tierlist/(.*)$ tierlist.php?mode=$1
    RewriteRule ^tierlist/$ tierlist.php
    RewriteRule ^tierlist$ tierlist.php
    RewriteRule ^home/$ index.php
    RewriteRule ^home$ index.php
    RewriteRule ^champions/$ champions.php
    RewriteRule ^champions$ champions.php
    RewriteRule ^contact/$ contact.php
    RewriteRule ^contact$ contact.php
    RewriteRule ^partner/$ partner.php
    RewriteRule ^partner$ partner.php
    RewriteRule ^tournament/$ tournament.php
    RewriteRule ^tournament$ tournament.php
    RewriteRule ^summoner/(.*)/(.*)/Champions/(.*)/$ summoner.php?server=$1&name=$2&tab=Champions&season=$3
    RewriteRule ^summoner/(.*)/(.*)/Champions/(.*)$ summoner.php?server=$1&name=$2&tab=Champions&season=$3
    RewriteRule ^summoner/(.*)/(.*)/Statistics/(.*)/$ summoner.php?server=$1&name=$2&tab=Statistics&champion=$3
    RewriteRule ^summoner/(.*)/(.*)/Statistics/(.*)$ summoner.php?server=$1&name=$2&tab=Statistics&champion=$3
    RewriteRule ^summoner/(.*)/(.*)/Overview/$ summoner.php?server=$1&name=$2&tab=Overview
    RewriteRule ^summoner/(.*)/(.*)/Overview$ summoner.php?server=$1&name=$2&tab=Overview
    RewriteRule ^summoner/(.*)/(.*)/Games/$ summoner.php?server=$1&name=$2&tab=Games
    RewriteRule ^summoner/(.*)/(.*)/Games$ summoner.php?server=$1&name=$2&tab=Games
    RewriteRule ^summoner/(.*)/(.*)/Runes/(.*)/$ summoner.php?server=$1&name=$2&tab=Runes&page=$3
    RewriteRule ^summoner/(.*)/(.*)/Runes/(.*)$ summoner.php?server=$1&name=$2&tab=Runes&page=$3
    RewriteRule ^summoner/(.*)/(.*)/Runes/$ summoner.php?server=$1&name=$2&tab=Runes
    RewriteRule ^summoner/(.*)/(.*)/Runes$ summoner.php?server=$1&name=$2&tab=Runes
    RewriteRule ^summoner/(.*)/(.*)/Masteries/(.*)/$ summoner.php?server=$1&name=$2&tab=Masteries&page=$3
    RewriteRule ^summoner/(.*)/(.*)/Masteries/(.*)$ summoner.php?server=$1&name=$2&tab=Masteries&page=$3
    RewriteRule ^summoner/(.*)/(.*)/Masteries/$ summoner.php?server=$1&name=$2&tab=Masteries
    RewriteRule ^summoner/(.*)/(.*)/Masteries$ summoner.php?server=$1&name=$2&tab=Masteries
    RewriteRule ^summoner/(.*)/(.*)$ summoner.php?server=$1&name=$2&tab=Overview
    RewriteRule ^game/(.*)/(.*)/$ game.php?server=$1&id=$2
    RewriteRule ^game/(.*)/(.*)$ game.php?server=$1&id=$2


    Ich habe jede Variante zwei mal, einmal ohne und einmal mit Schrägstrich am Ende. Es geht um meine Seite championpool.net. Ihr könnt ja mal gucken ob es bei euch auch passiert. Bei mir passiert es zum Beispiel wenn ich rechts oben in der Leiste einen Namen eingebe und dann auf die entsprechende Seite wechsel. Gerade geht es aber zum Beispiel.

    Oder könnte es eventuell auch an folgendem Javascript Code liegen? Das ist der Code der ausgeführt wird, wenn man bei der Suche auf einen entsprechenden Namen klickt:

    function goToChampion (name) {
    	window.location.href = "champion/"+name+"/";	
    }


    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: Code Verständnisfrage | Wert von Variable mit Methode ändern

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich habe einen C Code, welcher ein String einließt und alle Kleinbuchstaben zu Großbuchstaben umwandelt und dabei zählt, wie oft das der Fall war. Da der Code nicht von mir ist habe ich eine Frage zum Verständnis des Codes.
    Hier erstmal der Code:

    #include <stdio.h>
    
    void einlesen(char s[]) {
    	printf("\nBitte String eingeben:");
    	scanf("%s", s);
    }
    
    int stringLaenge(const char s[]) {
    	int i = 0;
    	while (s[i++]);
    	return (i -1);
    }
    
    int grossSchreiben (char s[]) {
    	int i = 0, anztausch=0;
    	while (s[i]) {
    		if (islower(s[i])) {
    			s[i]=toupper(s[i]);
    			anztausch++;
    		}
    		i++;
    	}
    	return anztausch;
    	}
    
    void main() {
    	const int laenge = 10;
    	int anzahlDreher = 0;
    	char mein[laenge];
    	einlesen(mein);
    	printf("\nDer String %s hat die Laenge %i.", mein,
    	stringLaenge(mein));
    	anzahlDreher = grossSchreiben(mein);
    	printf("\n%s wurde mit %i Drehern erzeugt.\n", mein, anzahlDreher);
    }


    Also im main Teil wird ja sozusagen ein String der Länge 10 erstellt. Wenn man jetzt die Funktion grossSchreiben aufruft, muss man ja diesen String übergeben. In der Funktion heißt dieser String dann ja s. Mit s[...] = toupper(s[...]) wird ja dann das entsprechende Zeichen umgewandelt. Aber das ist doch jetzt erstmal nur innerhalb der Methode so. Ich verstehe nicht, wie diese Änderung jetzt nach außen auf die Variable "mein" übertragen wird. Denn der Rückgabewert ist ja nur die Anzahl der Änderungen. Wie man im letzten Print Befehl sieht, wird dort die Variable "mein" ausgegeben. Und zwar nur mit Großbuchstaben. Aber ich sehe einfach nicht, wie die Drehung auf das "mein" übertragen wird. Für mich ist es nur logisch, dass es nur innerhalb der Methode bei dem "s" umgewandelt wird.

    Ich hoffe ihr versteht was ich meine und könnt mir helfen.
    Viele Grüße
  • in: Drucker druckt kein Schwarz in Dokumenten mehr

    geschrieben von ultimate-bravery

    Hallo,

    wenn ich ein Dokument aus Word oder ein PDF Dokument drucken möchte, druckt mein Drucker nicht mehr die Farbe Schwarz. Wenn ich einen schwarzen Text ausdrucken möchte, macht der Drucker zwar die normalen Druckgeräusche, allerdings kommt nur ein weißes Blatt aus dem Drucker. Wenn ich die Farbe des Textes zum Beispiel zu Rot oder Blau änder, wird der Text normal gedruckt. Zum Test habe ich auch über die Drucker Eigenschaften -> Maintenance -> Nozzle Check ein Testblatt ausdrucken lassen. Dort werden alle Farben normal dargestellt, auch schwarz. Mein Drucker ist der Canon Pixma IP4200.

    Bevor ich mich an Canon wende, wollte ich hier mal nachfragen, ob das Problem evtl an irgendwelchen Einstellungen liegt. Denn schwarz drucken tut er ja noch, wie ich mit dem Testblatt feststellen konnte.

    Mein Betriebssystem ist Windows 7 64 Bit.

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: Android - Dialog "weiter" -> neue Klasse starten

    geschrieben von ultimate-bravery

    Hallo zusammen,

    man kann ja mit startActivity eine neue Klasse starten. Bei meinem onClick hab ich das so gemacht:

    @Override
    public void onClick(View v) {
    	startActivity(new Intent(this,Login.class));
    }

    Was muss denn der erste Parameter bei new Intent sein, wenn ich den gleichen Code nach einem Klick auf "Weiter" bei einem Dialog Fenster ausführen will?

    Also hier mein Code:

    builder.setPositiveButton("Zum Login", new DialogInterface.OnClickListener() {
    	@Override
    	public void onClick(DialogInterface dialog, int which) {
    		startActivity(new Intent(this,Login.class));
    	}
    });


    Da habe ich halt den selben Code aus dem onClick eingefügt. Aber da wird mir jetzt der Fehler "The constructor Intent(new DialogInterface.OnClickListener(){}, Class<Login>) is undefined" angezeigt. Anscheinend muss bei "new Intent(...)" für das "this" etwas anderes dahin, aber was?

    Ich hoffe mir kann jemand helfen.
    Viele Grüße

    EDIT:

    Habs gefunden. Man muss "getApplicationContext()" für das "this" einsetzen.
  • in: Android - PHP Script mit AsyncTask aufrufen

    geschrieben von ultimate-bravery

    Ok ich denke ich habe das Problem gelöst. Bei dem base64 encoden hatte ich ja vorher als zweiten Parameter eine 0. Das habe ich jetzt zu "Base64.NO_WRAP" geändert. Jetzt klappts. Vorher hat er anscheinend irgendwo ein "\n" eingefügt.

    muellerlukas schrieb:
    Für JSon Encoding würde ich eh lieber eine Klasse einsetzten statt händisch basteln. Hier macht dir ein " schon alles kaputt.


    Ok, hab da jetzt folgenden Code:

    JSONObject json = new JSONObject();
    json.put("username", username);
    json.put("password", password);


    Das ist ja jetzt ein Objekt. Um das in ein String zu wandeln habe ich folgendes gefunden:

    StringWriter out = new StringWriter();
    obj.writeJSONString(out);
    String jsonText = out.toString();


    Allerdings sagt mir Eclipse jetzt bei "writeJSONString":

    The method writeJSONString(StringWriter) is undefined for the type JSONObject

    Weißt du woran das liegt?

    EDIT:

    So klappts jetzt:

    String jsonText = json.toString();
  • in: Android - PHP Script mit AsyncTask aufrufen

    geschrieben von ultimate-bravery

    muellerlukas schrieb:
    Ich kann hier aufm Handy leider weder den gesammten Quelltext sehen geschweigedenn testen, aber es sollte gesagt sein: Base64 ist keine Verschlüsselung und bringt dir in Sachen Zugangsdaten genau ein Null an zusätzlicher Sicherheit.

    Also ich hab bei der Sicherheit eher daran gedacht, dass man somit nicht die URL manipulieren kann, indem man irgendeinen Code oder sowas in die Textfelder eingibt. Kenne mich da auch nicht so gut aus aber hab mir gedacht es wäre besser so.

    muellerlukas schrieb:
    Ein MD5 wäre nicht blöd, somit fließt zumindest das PW nicht in Klartext über die Leitung, sollte das PW bei mehreren Seiten genutzt werden.


    Aber MD5 ist ja keine Verschlüsselung sondern ein Hash, also könnte ich es nicht in der PHP Datei entschlüsseln um die einzelnen Sachen in die DB einzutragen. Und das Passwort wird dann in der PHP Datei mit MD5 gehashed.

    fuerderer schrieb:
    Lass den base64 String mal ausgeben, vielleicht siehst du dann schon, woran es liegen könnte. Sonst einfach mal ausprobieren, ab wann der Fehler auftritt. Ist die Länge des übergebenen Strings entscheidend? Oder ist vielleicht eines der Zeichen Plus (+) oder Schrägstrich (/) schuld? (Die sollen in einer URL angeblich kritisch sein und werden dann durch Bindestrich (-) und Unterstrich (_) ersetzt.)


    Ich habe jetzt mal den base64 Code ausgeben lassen und ihn dann dahin geschrieben wo vorher die Variable stand. So funktioniert es. Und ich habe auch noch die Sonderzeichen hinzugefügt, damit klappts auch.

    Vielleicht liegts an der doInBackground Methode in der AsyncTask Klasse? Habe die Klasse aus einem Tutorial kopiert und das ist mein erstes Projekt, deswegen kenn ich mich da noch nicht so aus und wüsste nicht was da falsch sein könnte.
  • in: Android - PHP Script mit AsyncTask aufrufen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich bin gerade dabei eine Android App zu entwickeln. Man muss sich in der App einloggen und dafür rufe ich ein PHP Script auf, welches auf eine MySQL Datenbank zugreift.

    Ich benutze folgende AsyncTask Klasse:

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    	@Override
    	protected String doInBackground(String... urls) {
    		String response = "";
    		for (String url : urls) {
    			DefaultHttpClient client = new DefaultHttpClient();
    			HttpGet httpGet = new HttpGet(url);
    			try {
    				HttpResponse execute = client.execute(httpGet);
    				InputStream content = execute.getEntity().getContent();
    
    				BufferedReader buffer = new BufferedReader(
    						new InputStreamReader(content));
    				String s = "";
    				while ((s = buffer.readLine()) != null) {
    					response += s;
    				}
    
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return response;
    	}
    
    	@Override
    	protected void onPostExecute(String result) {
    		if(result.equals("login_error")){
    			tvPlaceholder.setText("Benutzername oder Passwort falsch!");
    		}
    		if(result.equals("login_finished")){
    			// Muss noch programmiert werden
    		}
    	}
    }


    Man gibt also einen Namen und das Passwort ein und dann klickt man auf Login. Wenn man auf Login klickt soll folgender Code ausgeführt werden:

    public void onClickLogin(View view) {
    	tvPlaceholder.setText("Loading...");
    	String username = etLoginUsername.getText().toString();
    	String password = etLoginPassword.getText().toString();
    		
    	String json = "{\"username\": \"" + username + "\", \"password\": \"" + password + "\"}";
    		
    	String base64 = Base64.encodeToString(json.getBytes(), 0);
    		
    	DownloadWebPageTask task = new DownloadWebPageTask();
    	task.execute(new String[] { "http://meineseite.net/login.php?data=" + base64 });
    }


    Um das ganze etwas sicherer zu machen bringe ich die Daten erst in ein Json Format als String und danach wird der String mit Base64 verschlüsselt. Dieser String soll dann in der URL als GET Variable übergeben werden und im PHP Script wieder entschlüsselt werden. Allerdings kommt jetzt immer beim Klick auf Login folgende Meldung:

    Unfortunately, {appname} has stopped.

    Dann wird die App beendet. Zum testen hab ich dann an die URL anstatt den String base64 einfach "Hallo" angehangen und dann kommt die Meldung nicht. Also hat er anscheinend ein Problem damit, dass dieser base64 string in der URL vorkommt. Aber warum? Woran liegt das? Normal im Browser könnte ich ja auch so einen Code an die URL dranpacken.

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: PC nur noch mit Starthilfe startbar

    geschrieben von ultimate-bravery

    cuf-world schrieb:
    Dann würde ich mir an Deiner Stelle schon mal ernsthafte Gedanken über eine Datensicherung der SSD (PlattenImage), und Kauf einer neuen solchen machen. Schaut so aus, als wenn die sich langsam verabschiedet...

    Alles Gute und Viel Erfolg


    Ok danke dann werde ich mal gucken. Ist es denn normal, dass die nur so relativ kurz halten?
  • in: PC nur noch mit Starthilfe startbar

    geschrieben von ultimate-bravery

    Hallo zusammen,

    seit ein paar Tagen fährt mein PC nicht mehr normal hoch. Manchmal hängt er sich einfach auf und manchmal kommt dann halt die Meldung ob ich den PC normal starten möchte oder ob ich ihn mit der Starthilfe starten möchte. Wenn ich das dann mit der Starthilfe mache sucht er nach Fehlern und schlägt vor, Windows auf einen früheren Zeitpunkt zurückzusetzen. Wenn ich das dann gemacht habe startet er neu und dann klappt alles normal. Aber am nächsten morgen wenn ich den PC wieder an mache geht alles wieder von vorne los. Und heute kam auch mal kurz eine Meldung mit irgendwas von wegen Disc Error. Ich habe eine SSD als Hauptfestplatte (seit ca. einem halben Jahr) und eine normale Festplatte als zweite (bisschen älter). Das Betriebsystem ist Windows 7 Ultimate.

    Also jetzt meine Frage, ist das ein Hardware Fehler oder kanns auch an der Software liegen? Denn nach dem Starten mit der Starthilfe gehts ja dann. Deswegen bin ich mir unsicher. Oder woran könnte es sonst liegen?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: JSON von anderer Website einlesen - Rechtslage

    geschrieben von ultimate-bravery

    Und was meinst du ist, wenn die Seite gar nicht Urheber der Daten ist? Also es geht um Daten aus einem Online Spiel. Diese werden mit einer Methode von beispiel.com besorgt die ich nicht kenne. Deswegen überlege ich halt ob es möglich wäre die Daten von der einen Seite zu bekommen, die die Daten wiederum von dem Onlinespiel hat.
  • in: JSON von anderer Website einlesen - Rechtslage

    geschrieben von ultimate-bravery

    Hallo zusammen,

    angenommen ich habe auf der Seite beispiel.com eine JSON Datei unter dem Pfad beispiel.com/jsons/bla.json gefunden, welche die Seite selber benutzt. Dürfte ich jetzt diese Datei auf meiner Seite einlesen und selber Daten daraus auf meiner Seite ausgeben? Weiß jemand wie das rechtlich geregelt ist?

    Viele Grüße
  • in: Sekunden hochzählen

    geschrieben von ultimate-bravery

    Vielen dank :) Funktioniert! :)
  • in: Sekunden hochzählen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe eine feste Sekundenanzahl gegeben, zum Beispiel 203 Sekunden. Wenn jemand die Seite aufruft sollen die Sekunden hochgezählt werden, solange er sich auf der Seite befindet. Und das im Minuten Format, also Minuten:Sekunden. Mehr muss nicht passieren.

    Hat jemand ein passendes Script dafür?

    Danke schonmal :)
  • in: Div abhängig von der Bildschirmbreite

    geschrieben von ultimate-bravery

    Cool danke, das kannte ich noch nicht. Klappt jetzt :)
  • in: Div abhängig von der Bildschirmbreite

    geschrieben von ultimate-bravery

    Hallo,

    ich möchte rechts neben meinem Hauptbereich ein Div machen wo Werbung drin ist, aber nur wenn der Bildschirm auch breit genug ist. Ansonsten soll die Werbung woanders angezeigt werden. Ich habe das jetzt so gemacht:

    Javascript:

    function ads(){
    	if(screen.availWidth < 1500){
    		document.getElementById("add_right").style.display = "none";	
    	}
    	else{
    		document.getElementById("add_right").style.display = "block";
    	}
    }


    Und dann im Body Tag onload="ads();". Gibt es noch eine Möglichkeit, die die Funktion ads ausführt, bevor die Seite angezeigt wird? Also noch etwas vor onload? Oder gibts noch ne ganz andere Möglichkeit? Weil jetzt sieht man zum Beispiel bei einem kleinen Bildschirm, wenn voreingestellt ist, dass add_right angezeigt wird, ganz kurz wie der Block da ist und dann schnell verschwindet. Wenn man einstellt das add_right am Anfang nicht angezeigt wird ist das Problem natürlich bei großen Bildschirmen, nur halt andersrum, also das es erst nicht angezeigt wird und dann auftaucht. Also wie mache ich das am besten?
  • in: Bild aus Sprite größer anzeigen als es ist

    geschrieben von ultimate-bravery

    Hallo,

    ich habe viele einzelne Bilder zu einem Sprite gemacht. Um jetzt ein Bild aus diesem Sprite auszugeben nutze ich diesen Code:

    <div style="background:url(images/sprites/items.png) no-repeat -0px -48px; width:48px; height:48px;"></div>


    Die einzelnen Bilder im Sprite sind 48 x 48 groß.Jetzt möchte ich die Bilder aber in 64 x 64 ausgeben. Wenn ich die width und height Werte im Style veränder, sieht man auch die Bilder die im Sprite neben dem gewollten Bild sind.
    Wie kann ich also das einzelne Bild aus dem Sprite größer darstellen?
  • in: mod_rewrite - Bilder und CSS Dateien werden nicht geladen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    damit meine URL anstatt

    meineseite.de/benutzer.php?id=50

    so aussieht:

    meineseite.de/benutzer/100/

    habe ich folgenden Code in meiner .htaccess Datei stehen:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^benutzer/(.*)/$ benutzer.php?id=$1


    Das klappt auch soweit, allerdings werden auf der Seite keine Bilder und auch die CSS Datei nicht geladen, wenn ich die zweite oben genannte URL aufrufe. Der Pfad zu den Bildern ist immer korrekt, es wird aber nichts angezeigt. Woran liegt das?

    Die Bilder liegen im Ordner /images/ und die CSS Datei befindet sich im Stammordner.

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: GET Variablen hinter Slash

    geschrieben von ultimate-bravery

    Ja doch, das Prinzip habe ich verstanden. Ich weiß nur nicht wie genau meine .htaccess Datei jetzt aussehen muss. Aber danke für den Link, ich werde es mir mal angucken.
  • in: GET Variablen hinter Slash

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Nutz mod_rewrite und schreibe Aufrufe von
    ^/thread/(.*)$
    auf
    thread.php?$1
    um. Dann hast du im Query String jeweils den Namen des Thread, mit dem du dann arbeiten kannst.


    Ok, also angenommen ich möchte

    meineseite.de/benutzer.php?id=100

    zu

    meineseite.de/benutzer/100

    machen, was muss dann genau in die .htaccess? Habe folgenden Code gefunden, aber ich weiß nicht wie ich den jetzt richtig anpassen muss, da es bis jetzt noch nicht funktioniert:

    RewriteEngine On
    RewriteRule /(.*)/$ benutzer.php?id=$1


    Würde mich über Hilfe freuen.
  • in: GET Variablen hinter Slash

    geschrieben von ultimate-bravery

    Hallo zusammen,

    wie bekommt man es am besten hin, GET Variablen in der URL hinter einem Schrägstrich zu übergeben, anstatt normal mit "?bla=1"? Zum Beispiel hier im Forum ist die URL .../thread/themenname.

    In dem Fall ist der Themenname ja eine Variable. Und sie steht hinter einem Schrägstrich. Wie macht man das am besten?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: PHP Array an Javascript Funktion übergeben

    geschrieben von ultimate-bravery

    Ok danke für eure Antworten. Also ich wollte in der Javascript Funktion dann jeden Wert aus dem Array mit noch bisschen HTML Code dazwischen zu einem String machen. Mir ist dann eingefallen, dass ich das genauso gut in PHP machen kann und dann den String an die Funktion übergeben kann. Danke trotzdem für eure Antworten :)
  • in: PHP Array an Javascript Funktion übergeben

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Mach es so:
    <?php
    $array = array("hackyourlife" => 18186, "ultimate-bravery" => 2288);
    $jsarray = json_encode($array);
    echo("var x = $jsarray;");
    Dann kümmert sich PHP selbst darum das richtig zu konvertieren. Das funktioniert übrigens immer und sorgt dafür, dass egal was in der Variablen auch stehen mag, es jedenfalls richtig zu JavaScript konvertiert wird, also auch bei Strings, Zahlen, Objekten usw.


    Ok danke für die schnelle Antwort. Also ich mache jetzt so den Funktionsaufruf:

    onmouseover="showInfo('<?php echo $name; ?>', '<?php echo json_encode($masteries_api->{$id}->description); ?>', '<?php echo $ranks; ?>');"


    Das Array kommt aus einer API. So steht es in der API:

    "description": [
    "+2% Cooldown Reduction and reduces the cooldown of Activated Items by 4%",
    "+3.5% Cooldown Reduction and reduces the cooldown of Activated Items by 7%",
    "+5% Cooldown Reduction and reduces the cooldown of Activated Items by 10%"
    ]

    So steht es dann allerdings auch im Seitenquellcode, beim Funktionsaufruf:

    onmouseover="showInfo('Double-Edged Sword', '["+2% Cooldown Reduction and reduces the cooldown of Activated Items by 4%", "+3.5% Cooldown Reduction and reduces the cooldown of Activated Items by 7%", "+5% Cooldown Reduction and reduces the cooldown of Activated Items by 10%"]', '1');"

    Da in der Variable/Array ein Anführungszeichen drin vor kommt, wird das onmouseover Event damit beendet und somit wird meine Seite gerade verbuggt dargestellt. Hast du da eine Lösung für?
  • in: PHP Array an Javascript Funktion übergeben

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich rufe in meinem Code bei einem onmouseover Event eine Javascript Funktion auf und möchte zwei PHP Variablen und ein PHP Array an die Funktion übergeben. Mit den Variablen mach ich das so:

    onmouseover="showInfo('<?php echo name; ?>', '<?php echo $ranks; ?>');"


    Aber wie kann ich nun zum Beispiel das PHP Array mit dem Namen $array an die Funktion übergeben? Ich kann da ja nicht einfach "echo $array" hinschreiben.

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: Div einblenden wenn man zu einem bestimmten Punkt scrollt

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe oben auf meiner Seite ein Menü. Wenn man auf der Seite runter scrollt und man das Menü nicht mehr sieht, soll an der Seite ein neues Menü erscheinen, welches sozusagen mit nach unten scrollt.

    Man müsste es also so machen, dass ein div eingeblendet wird, sobald man eine bestimmte Stelle auf der Seite beim scrollen erreicht hat. Ist sowas möglich? Wenn ja, wie?

    Viele Grüße
    Moritz Müller
  • in: Wert bei Klick einmalig erhöhen

    geschrieben von ultimate-bravery

    Nein der Benutzer ist nicht eingeloggt. Ich habe es jetzt erstmal so gelöst, dass bei einem Klick die IP Adresse, ID1 und ID2 in einer Datenbank gespeichert werden. Dann wird bei einem Klick halt überprüft ob die IP Adresse schon zu den beiden IDs existiert.

    Ist jetzt zwar doch die Datenbank Lösung aber hat ja sonst niemand geantwortet. Weiß meinst du denn mit Datenschutz? Darf man keine IP Adressen in einer DB speichern oder was?
  • in: Wert bei Klick einmalig erhöhen

    geschrieben von ultimate-bravery

    Hallo zusammen,

    bin mir nicht sicher ob das jetzt ins PHP oder ins Javascript Forum gehört, aber ich versuche es mal hier.

    Also ich habe ein paar Zahlen in einer Datenbank stehen und diese werden auf einer Seite ausgegeben. Beim Klick auf eine Zahl soll diese Zahl um eins erhöht werden. Sowohl auf der Seite als auch in der Datenbank. Dafür habe ich folgenden Code:

    Onclick Event:

    function voten(index, id1, id2) {
    	$.get('vote.php?id1='+id1+'&id2='+id2, function(data) {
    		$('#vote_'+index).html(data);
    	})
    }


    vote.php:

    <?php
    include"verbindung.php";
    if(isset($_GET['id1']) && isset($_GET['id2'])){
    	$id1 = htmlspecialchars($_GET['id1']);
    	$id2 = htmlspecialchars($_GET['id2']);
    	$page = $mysqli->query("SELECT a".$id1." FROM data WHERE id='$id2';");
    	if ($zeile = $page->fetch_array()) {
    		$anzahl = $zeile['a'.$id1];
    		$anzahl++;
    		$aendern = $mysqli->query("UPDATE data SET a".$id1."='$anzahl' WHERE id='$id2'");
    		echo"<center>".$anzahl."</center>";
    	}	
    }
    ?>


    Jetzt möchte ich es aber so haben, dass jeder Besucher diesen Wert maximal 1 mal erhöhen darf. Also er soll nicht ständig auf die Zahl klicken können. Wie macht man das am besten? Gibt es eine Möglichkeit ohne die IP Adressen in einer extra Tabelle zu speichern?

    Danke schonmal für die Hilfe.
    Viele Grüße
  • in: Blue Screen - Grafikkarte defekt?

    geschrieben von ultimate-bravery

    Hallo nochmal,

    ich hatte damals nachdem ich das Problem hatte die Grafikkarte zurück geschickt und jetzt wurde sie mir wieder zurück geschickt, weil die kein Problem feststellen konnten. Jetzt habe ich mal mein Netzteil ausgebaut, um es mir genauer anzugucken.

    Es ist ein 750 W Netzteil von Thermaltake. Bei dem Netzteil kann man die Kabel ab machen. Und es sind auch noch Plätze für Kabel frei.

    Würde es einen Unterschied machen, wenn ich jetzt ein neues Kabel kaufen würde, wo 6-Pin Stecker dran sind, und dieses in einen freien Anschluss stecken würde und die Stecker dann in die Grafikkarte? Oder würde das kein Unterschied sein als wenn ich aus den zwei 4-Pin mit einem Adapter ein 6-Pin machen würde?

    Hoffe mir kann nochmal jemand helfen.
    Viele Grüße
  • in: Textfeld mit Auswahlmöglichkeiten

    geschrieben von ultimate-bravery

    Vielen Dank :) Das was du da geschickt hast ist perfekt. Nicht zu viel Code, leicht anzupassen und funktioniert super! Danke!
  • in: Textfeld mit Auswahlmöglichkeiten

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich möchte ein Textfeld programmieren, bei dem nach der ersten Eingabe eines Zeichens eine Auswahl erscheint, wie man es zum Beispiel von Google kennt.

    Also man soll in das Textfeld einen Namen eingeben. Ich habe eine Liste von Namen. Sobald der Benutzer zum Beispiel ein "A" eingibt, sollen dem Benutzer alle Namen aus meiner Liste angezeigt werden, die mit einem "A" anfangen. Dann soll der Benutzer entweder auf einen vorgeschlagenen Namen klicken oder weiter in das Textfeld schreiben. Wenn er auf einen Namen klickt, soll der Name in das Textfeld geschrieben werden. Außerdem soll der Benutzer das Formular auch nur absenden können, wenn im Textfeld ein Name steht, der auch in meiner Liste ist.

    Wie realisiert man sowas am besten? Gibt es da schon fertige Scripts?

    Ich würde mich über Hilfe freuen.

    Viele Grüße
  • in: Blue Screen - Grafikkarte defekt?

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe seit einem Monat eine neue Grafikkarte und zwar die Palit GeForce GTX 770. Bis vor kurzem hab ich meinen PC nur selten benutzt, da ich noch kein Internet in meiner neuen Wohnung hatte. Jetzt hab ich Internet und jetzt hab ich angefangen Spiele zu spielen (League of Legends). Nun bekomme ich während dem Spielen ständig Blue Screens und regelmäßig einen kurzen Lagg, der von so einem komischen Brummen begleitet wird. Während ich einen Blue Screen habe, ist das gleiche Brummen da, nur dann durchgehend. Ich habe bereits im sicheren Modus den Grafikkarten Treiber deinstalliert. Das hat aber nichts gebracht. Hab noch das gleiche Problem. Hier sind mal die Problemdetails, die nach einem Blue Screen auftauchen:

    Problemsignatur:
    Problemereignisname: BlueScreen
    Betriebsystemversion: 6.1.7601.2.1.0.256.1
    Gebietsschema-ID: 1031
    Zusatzinformationen zum Problem:
    BCCode: 116
    BCP1: FFFFFA800B9224E0
    BCP2: FFFFF8800FBB67A0
    BCP3: FFFFFFFFC000009A
    BCP4: 0000000000000004
    OS Version: 6_1_7601
    Service Pack: 1_0
    Product: 256_1
    Dateien, die bei der Beschreibung des Problems hilfreich sind:
    C:\Windows\Minidump\100514-12906-01.dmp
    C:\Users\Moritz\AppData\Local\Temp\WER-58843-0.sysdata.xml

    Die Dateien kann ich allerdings nicht öffnen. Es kommt die Meldung "Zugriff verweigert".

    Kann man anhand dieser Daten feststellen, ob die Grafikkarte defekt ist? Oder liegt es an etwas anderem? Mein Betriebssystem ist Windows 7 Ultimate 64 Bit.

    Was ich noch erwähnen könnte ist, dass ich bis vor kurzem nicht alle Stromanschlüsse der Grafikkarte belegt hatte. Die Grafikkarte hat einen 6-Pin und einen 8-Pin Anschluss. Dabei war ein Adapter, bei dem zwei 6-Pin zu einem 8-Pin werden. Da ich nur zwei 6-Pin zur Verfügung hatte, hab ich ein 6-Pin in den 6-Pin Anschluss gesteckt und einen 6-Pin in den Adapter für den 8-Pin. Das hat so geklappt und ich hatte angenommen, dass das der Grund für den Blue Screen war. Jetzt hab ich mir so einen Adapter gekauft (http://www.amazon.de/dp/B002CX4TNM/ref=pe_386171_37038021_TE_3p_M3T1_dp_1) und somit den letzten 6-Pin Anschluss besetzt. Das Problem tritt allerdings immernoch auf.

    Oder könnte es somit auch am Netzteil liegen?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: max_user_connections trotz persistenter Verbindung

    geschrieben von ultimate-bravery

    hackyourlife schrieb:
    Mit den persistenten Verbindungen umgehst du übrigens nur eine einzige Einschränkungen: die maximale Anzahl an Verbindungen pro Stunde.


    Gibt es denn eine Möglichkeit, mein Problem zu lösen, ohne das Limit anheben zu lassen? Weil wenn ich das richtig verstanden habe könnten ja sonst nicht mehr als 20 Leute gleichzeitig auf meine Website oder?
  • in: max_user_connections trotz persistenter Verbindung

    geschrieben von ultimate-bravery

    Hallo zusammen,

    da ich damals manchmal die Fehlermeldung "User '...' has exceeded the 'max_user_connections' resource (current value: 20)" erhalten habe, habe ich meine Verbindung zur MySQL Datenbank auf eine persistente Verbindung umgestellt, da dabei ja angeblich nur eine Verbindung erstellt wird, auf die alle zugreifen. So sieht also jetzt meine Verbindung aus:

    try{
    	$handler = new PDO('mysql:host=localhost;dbname=...', '...', '...', array(PDO::ATTR_PERSISTENT => true));
    	$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e){
    	echo $e->getMessage();
    	die();	
    }


    Trotzdem kommt hin und wieder noch die oben genannte Fehlermeldung. So wird sie dann im Catch Teil ausgegeben:

    SQLSTATE[HY000] [1226] User '...' has exceeded the 'max_user_connections' resource (current value: 20)


    Ist an meinem Code was falsch oder fehlt da was? Oder habe ich einfach nur was falsch verstanden bei den persistenten Verbindungen?

    Ich hoffe mir kann jemand helfen.

    Viele Grüße
  • in: Fehlermeldung 0xc000007b

    geschrieben von ultimate-bravery

    cannadesign schrieb:
    Nicht direkt wichtig, aber schön zu wissen um dir bei deiner Fehlersuche zu helfen. Merke: Bei Hardware/Software-Fragen immer die Komponenten mit rein schreiben.
    CPU ? RAM ? Sonst noch iwelche Hardware drin ? Vllt noch - allerdings nicht so wichtig - dein Netzteil.


    Also der Prozessor ist Intel Core i5 760 @ 2.80 GHz, dann 8GB Arbeitsspeicher und das Netzteil hat glaube ich 650w (Steht nichts dran am Netzteil). Achja und Windows 7 ist die 64 Bit Version. Und dann habe ich noch eine SSD von Crucial mit 256 GB und eine Festplatte von Hitachi mit 1 TB.

    Das sollte es gewesen sein.
  • in: Fehlermeldung 0xc000007b

    geschrieben von ultimate-bravery

    cannadesign schrieb:
    Schön wäre es wenn du uns noch deine System Hardware + OS Version nennst, damit könnten wir dich schneller weiterhelfen.


    Also das Betriebssystem ist Windows 7 Ultimate. Grafikkarte ist NVIDIA GeForce GTX 770 und was genau die andere Hardware ist weiß ich grad nicht genau. Ist das denn für mein Problem wichtig?
  • in: Blue Screen wegen Grafikkarte?

    geschrieben von ultimate-bravery

    Ok, und meinst du das reicht, wenn ich mir diesen Adapter holen würde der aus den anderen ein 6-Pin macht?
  • in: Blue Screen wegen Grafikkarte?

    geschrieben von ultimate-bravery

    Ich meine das Netzteil hat 650w. Steht nicht dran aber ich bin mir recht sicher, dass es so ist. Hab den Treiber im sicheren Modus deinstalliert und nach dem Neustart wurde dann halt automatisch ein neuer VGA Treiber installiert. Wenn ich jetzt GeForce Experience öffnen will, um den neusten NVIDIA Treiber zu installieren, kommt folgende Meldung:

    Unable to start NVIDIA Update Service due to "Dieser Vorgang wurde wegen Zeitüberschreitung zurückgegeben. (Ausnahme von HRESULT: 0x800705B4)" GeForce Experience must close.

    Woran liegt das jetzt? Das kam vorher auch noch nie.
  • in: Blue Screen wegen Grafikkarte?

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe mir vor kurzem eine neue Grafikkarte und eine SSD in meinen PC gebaut und dort Windows neu aufgespielt. Ich habe den PC jetzt schon ein paar Tage ohne Probleme benutzt, aber heute habe ich einen Blue Screen mit folgender Nummer bekommen: 0x00000116

    Meine Grafikkarte ist die NVIDIA GeForce GTX 770. Sie hat einen 6-Pin und einen 8-Pin Stromanschluss. Für den 8-Pin Anschluss war ein Adapter dabei, wo zwei 6-Pin rein müssen. Da ich aber nur noch zwei 6-Pin zur Verfügung hatte hab ich einen 6-Pin in den 6-Pin Anschluss getan und ein 6-Pin in den Adapter für den 8-Pin Anschluss. Ein Bekannter von mir meinte, dass würde so in Ordnung sein. Und es hat ja bis jetzt auch geklappt. Könnte das aber der Grund für den Blue Screen sein?

    Oder woran könnte das sonst liegen? Ich kann den PC noch normal starten, aber irgendwann kommt halt wieder der Blue Screen. Und dabei dann noch so ein Brummen als Ton.

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: Fehlermeldung 0xc000007b

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe vor kurzem Windows neu auf eine SSD aufgespielt. Wenn ich jetzt zum Beispiel EasyPHP oder Need for Speed MW starte, kommt folgende Fehlermeldung:

    Die Anwendung konnte nicht korrekt gestartet werden (0xc000007b). Klicken Sie auf "Ok", um die Anwednung zu schließen.


    Bis jetzt ist es nur bei den oben genannten Programmen aufgetaucht. Die anderen Programme funktionieren. Ich habe gegoogelt und gelesen, dass anscheinend so ein AIO Programm helfen soll, welches verschiedene Komponenten installiert. Das habe ich ausgeführt. Die Fehlermeldung kommt allerdings immernoch.

    Weiß jemand wie ich das Problem noch lösen könnte?

    Viele Grüße
  • in: Persistente Verbindung

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe mich mal schlau gemacht, was persistente Verbindungen sind und weiß auch wie man eine solche Verbindung aufbaut. Ich weiß aber nicht wie genau man damit jetzt umgeht.

    Also ich habe diesen Code zum Verbinden mit der Datenbank:

    $handler = new PDO('mysql:host=...;dbname=...', '...', '...', array(PDO::ATTR_PERSISTENT => true));


    Wo muss diese Verbindung denn jetzt aufgebaut werden? Muss der Code auf jede Seite, wo Daten aus der DB ausgelesen werden? Oder nur auf eine Seite? Oder als Cronjob zum Beispiel jeden Tag einmal diese Verbindung aufrufen? Es soll ja verhindern, dass viele Verbindungen auf einmal gestartet werden.

    Also was ist die richtige Variante?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: Einzelne Programme klonen

    geschrieben von ultimate-bravery

    Hallo,

    gibt es eine Möglichkeit einzelne Programme zum Beispiel auf eine externe Festplatte zu klonen, um sie nachher wieder auf diese Festplatte zu spielen, nachdem sie formatiert wurde? Ich habe bei google gesucht und dort nur Programme gefunden, die die ganze Festplatte 1 zu 1 klonen.

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: MySQL max_user_connections

    geschrieben von ultimate-bravery

    Ja das mit dem beenden hab ich auch schon überlegt. Aber ich weiß nicht ob das was bringt, da die Verbindung ja normalerweise am Ende sowieso beendet wird.

    Also ich denke es geht jetzt erstmal darum: Persistente Verbindung benutzen oder nicht? Ich hab mich jetzt schlau gemacht was das ist. Aber ich bin mir noch nicht sicher ob ich es machen soll und ich weiß auch noch nicht wie^^

    Also ich hab halt 10 Cronjobs am laufen die Daten aus verschiedenen APIs suchen und in einer Datenbank speichern. Diese Daten kann man sich dann halt auf meiner Seite anzeigen lassen. Also es gibt auf jeden Fall sehr viele Verbindungen zur Datenbank.

    Was meinen jetzt die Experten? Soll ich das mit der persistenten Verbindung machen?

    EDIT: Falls ja, kann mir jemand erklären wie man persistente Verbindungen aufbaut? Hab bis jetzt noch nichts gefunden.
  • in: MySQL max_user_connections

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe meine Seite bei uberspace gehostet und habe gestern folgende Fehlermeldung beim ausführen eines Cronjobs bekommen:

    PHP Warning: mysqli::mysqli(): (HY000/1226): User '...' has exceeded the 'max_user_connections' resource (current value: 20) in ... on line 8
    Fehler bei der Verbindung: User '...' has exceeded the 'max_user_connections' resource (current value: 20)


    Die gleiche Fehlermeldung hatte ich vor 2 Monaten schon mal, als ich auf meiner Seite ein Event hatte und somit viele Leute gleichzeitig auf der Seite waren.

    Ich habe den Support von uberspace angeschrieben und gefragt, was die Meldung genau zu bedeuten hat. Ich habe folgende Antwort bekommen:

    Die Programme die für Deinen Account laufen haben insgesamt schon 20 Verbindungen zu MySQL-Dienst geöffnet und damit ist das Limit für Dich erreicht...

    ... Schau Dir am besten mal an was Deine Software da treibt und ob sie die MySQL-Verbindungen wieder sauber schließt.


    Darauf habe ich gefragt, was genau er mit "20 Verbindungen" meint, also ob eine Verbindung ein Besucher ist. Dann hat er geantwortet:

    Das heisst, dass die Applikation 20 parallele Datenbankverbindungen aufbauen kann, bevor das Limit an neuen Verbindungen erreicht ist. Wenn die Applikation tatsächlich für jeden Besucher eine eigene Verbindung herstellt, dann kannst du in der Tat davon ausgehen, dass 20 Besucher tatsächlich ausreichen, um weitere Besucher am Besuch der Seite zu hindern - vorausgesetzt, diese 20 Besucher führen zeitgleich Interaktionen aus, die einen Datenbankzugriff erzeugen. Im besten Fall sollte die Applikation mit persistenten Zugriffen arbeiten um über eine Verbindung möglichst viele Queries nacheinander abzusetzen.


    Jetzt bin ich verwirrt, da ich vorher noch nie Probleme mit meiner Vorgehensweise hatte. Deswegen möchte ich hier fragen, was an meiner Vorgehensweise falsch ist bzw wie man es richtig macht.

    Also bis jetzt hab ich es immer so gemacht, dass ich am Anfang von jeder Seite eine Verbindung zur Datenbank aufbaue. Also am Anfang von jeder Seite steht bei mir folgender Code:

    $mysqli = new MySQLi("$host", "$benutzer", "$passwort", "$dbname");
    if ($mysqli->connect_error) {
    	echo "Fehler bei der Verbindung: " . mysqli_connect_error();
    	exit();
    }


    Im weiteren Verlauf werden dann normal die Abfragen durchgeführt. Wie es aussieht wird also wirklich für jeden Besucher eine Verbindung zur Datenbank aufgebaut. Also wäre das Limit bei 20 Besuchern schon erreicht. Aber wie macht man das denn anders? Ich habe es noch nie anders gemacht, geschweige denn von einer anderen Variante gehört^^ Und was meint der Support mit persistenten Zugriffen und wie genau setzt man das in PHP um?

    Ich würde mich sehr über Hilfe freuen. Danke auf jeden Fall schonmal an alle die sich zeit genommen haben um das zu lesen ;)
    Viele Grüße
  • in: Daten werden nicht in richtiger Reihenfolge ausgegeben

    geschrieben von ultimate-bravery

    sebulon schrieb:
    der Fehler liegt offensichtlich in
    ORDER BY (createDate+timePlayed)


    der sortiert das createDate absteigend... anscheinend versucht er timePlayed als 2. Sortierparameter zu nehmen bei gleichen createDate, oder er ignoriert den syntax-Fehler... auf jeden Fall da unten keine berechnungen

    ungeprüft würde ich dir folgenden Änderungsvorschlag empfehlen... musst du prüfen...

    SELECT createDate+timePlayed as endTime, *
    FROM spiele
    ORDER BY endTime DESC;


    Nachdem ich das getestet habe und es nicht funktioniert hat bin ich selber auf den Fehler gekommen. Wie w3j gesagt hat, steht in der Datenbank der Millitimestamp und auf diesen Millitimestamp rechne ich die Sekunden aus timePlayed drauf. Da ich Sekunden auf Millisekunden rechne entsteht ein Fehler. Wenn ich timePlayed mal 1000 rechne klappt es. Also so:

    ORDER BY (createDate+(timePlayed*1000)) DESC


    Danke an euch ;)
  • in: Daten werden nicht in richtiger Reihenfolge ausgegeben

    geschrieben von ultimate-bravery

    Hallo,

    ich habe verschiedene Daten von einem Spiel in einer Datenbank stehen. Dazu gehört unter anderem ein Unix Timestamp der angibt, wann das Spiel gestartet wurde. Dann gibt es noch einen Wert in Sekunden wie lange das Spiel gedauert hat.

    Der Unix Timestamp steht unter dem Namen "createDate" in der DB und die Dauer des Spiels heißt "timePlayed". Der Unix Timestamp ist allerdings 13 Zeichen lang. Da der normale Unix Timestamp aber meines Wissens 10 Zeichen hat, schneide ich die letzten 3 Ziffern vom Timestamp ab.

    Ich möchte jetzt die Spiele ausgeben und zwar so, dass die Spiele, die zuletzt beendet wurden, ganz oben stehen. Das Ende des Spiels rechne ich also mit createDate+timePlayed aus. Dann möchte ich halt ausgeben vor wie vielen Minuten das Spiel beendet wurde. Also hier mal der Code:

    $query = "SELECT * FROM spiele ORDER BY (createDate+timePlayed) DESC;";
    $result = $mysqli->query($query);
    while ($zeile = $result->fetch_array()) {
    	$timePlayed = $zeile['timePlayed'];
    	$createDate = $zeile['createDate'];
    	$createDate = substr($createDate, 0, 10);
    	$differenz = time()-($createDate+$timePlayed);
    	echo sec2min($differenz).' minutes ago<br>';
    }


    Also die Spiele sollen sortiert nach dem Zeitpunkt des Spielendes ausgegeben werden. Die Funktion sec2min wandelt halt die Sekunden in Minuten um.

    Das Problem ist jetzt halt, dass die Spiele nicht in der richtigen Reihenfolge ausgegeben werden. So ist zum Beispiel gerade die Reihenfolge:

    25 minutes ago (createDate: 1409076048, timePlayed: 1713, createDate+timePlayed: 1409077761, Differenz zur aktuellen Zeit: 1539)
    23 minutes ago (createDate: 1409075982, timePlayed: 1883, createDate+timePlayed: 1409077865, Differenz zur aktuellen Zeit: 1435
    24 minutes ago (createDate: 1409075934, timePlayed: 1915, createDate+timePlayed: 1409077849, Differenz zur aktuellen Zeit: 1451
    35 minutes ago (createDate: 1409075421, timePlayed: 1765, createDate+timePlayed: 1409077186, Differenz zur aktuellen Zeit: 2114
    ...

    Was habe ich falsch gemacht? Wieso ist die Reihenfolge falsch?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: Foreach Schleife wird nicht komplett ausgeführt

    geschrieben von ultimate-bravery

    Hat sich erledigt, ich konnte den Fehler beheben. Hab die Seite als Cronjob laufen lassen und dann wurde mir die Fehlermeldung per E-Mail geschickt^^ Es war folgende:

    PHP Catchable fatal error: Object of class stdClass could not be converted to string in ... on line 104


    War also etwas falsch beim API Request.

    Warum mir die Fehlermeldung aber nicht direkt auf der Seite angezeigt wurde bleibt mit ein Rätsel.
  • in: Foreach Schleife wird nicht komplett ausgeführt

    geschrieben von ultimate-bravery

    Genau so habe ich es gemacht und die Schleife bricht beim vierten Durchlauf zwischen zwei normalen If Anweisungen ab. Siehe hier:

    if(isset($teams[0]->bans)){
    	echo "+<br>"; // Wird angezeigt
    	$team1_bans = $teams[0]->bans;
    	$team1_ban1 = $teams[0]->$team1_bans[0]->championId;
    	$team1_ban2 = $teams[0]->$team1_bans[1]->championId;
    	$team1_ban3 = $teams[0]->$team1_bans[2]->championId;
    }
    else{
    	echo "+<br>"; // Wird angezeigt
    	$team1_ban1 = "";
    	$team1_ban2 = "";
    	$team1_ban3 = "";
    }
    echo "+<br>"; // Wird nicht mehr angezeigt !! -----------------------------
    if($teams[0]->winner == true){
    	$sieger = $team1_id;	
    }


    Also bewusst habe ich die PHP Fehlermeldungen auf jeden Fall nicht ausgestellt. Wie kann man denn nachgucken ob sie an bzw aus sind?

    EDIT:

    Also in der phhp.ini stehen folgende Zeilen:

    error_reporting = E_ALL
    display_errors = On

    Also müsste es doch an sein oder?
  • in: Foreach Schleife wird nicht komplett ausgeführt

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich habe ein PHP Code welcher zuerst 100 IDs aus einer Datenbank ausliest und in ein Array speichert. Das habe ich so gemacht:

    $ids = array();
    $durchlauf = 0;
    $page = $mysqli->query("SELECT * FROM identities WHERE aktiviert='0' ORDER BY id LIMIT $durchlauf,100;");
    while ($zeile = $page->fetch_array()) {
    	$ids[] = $zeile['id'];
    }


    Da in der Datenbank zur Zeit 70 IDs drin sind, für die aktiviert = 0 gilt, werden 70 IDs in das Array gespeichert. Das habe ich mit var_dump getestet, also das funktioniert.

    Jetzt möchte ich für jede ID ein weiteren Code ausführen, der unter anderem einen API Aufruf durchführt. Das mache ich mit foreach:

    foreach($ids as $key => $id){
     echo $id."<br>"; // Zum testen
     ...
     ...
    }


    Um zu testen wie oft foreach durchlaufen wird, gebe ich am Anfang von jedem Durchlauf die ID aus. Es werden jetzt nur die ersten 4 IDs ausgegeben. Die foreach Schleife scheint also abgebrochen zu werden. Aber ich bekomme keine Fehlermeldung.

    Ich möchte jetzt ungerne den ganzen Code aus der foreach Schleife hier posten, da er ziemlich lang ist. Auf jeden Fall gibts wie gesagt in der Schleife für jede ID einen API Aufruf und am Ende noch einen Eintrag in eine Datenbank. Ich glaub nicht, dass die Bearbeitung des Codes zu lange dauert, um 70 mal die Schleife zu durchlaufen, da die Seite nicht länger als 5 Sekunden lädt und da auch keine Fehlermeldung kommt.

    Also kann mir irgendwer sagen woran das liegen könnte, dass die Schleife nicht komplett durchlaufen wird, ohne den ganzen Code zu sehen?

    Ich hoffe mir kann jemand helfen.
    Viele Grüße
  • in: Google Chrome "Keine Rückmeldung"

    geschrieben von ultimate-bravery

    Also an aufwendigen Flash Anwendungen kann es nicht liegen. Grad kam es direkt nach dem Starten des PCs vor. Also ich hab den PC angemacht, Chrome geöffnet und bevor ich was machen konnte kam schon die Meldung.

    Und Addons hab ich eigentlich kaum. Hab seit kurzem ein Addon von Avira, das könnte ich mal testweise deaktivieren.
  • in: Google Chrome "Keine Rückmeldung"

    geschrieben von ultimate-bravery

    Hallo zusammen,

    seit ein paar Tagen habe ich das Problem, dass nach einiger Zeit Google Chrome einfriert und die Meldung "Keine Rückmeldung" kommt. Wenn ich Chrome dann neu starte passiert das direkt wieder. Und bei manchen anderen Programmen kommt dann der gleiche Fehler. Aber anfangen tut es eigentlich immer bei Chrome. Und das Problem wird erst behoben, wenn ich den PC neu starte.

    Ich habe schon mit TuneUp alles mögliche gemacht: Registry gereinigt und defragmentiert, Browser bereinigt, Festplatte überprüft...

    Ich benutze Windows 7. Hat jemand eine Idee woran das liegt und was ich machen kann?

    Viele Grüße



  • in: Verschiedene nicht aufeinander folgende Zufallszahlen

    geschrieben von ultimate-bravery

    Ich habe jetzt die Bedingung eingebaut, dass eine Zahl nur ins Array gespeichert werden soll, wenn die Zahl davor und die Zahl danach nicht existiert. Allerdings scheint es eine Endlosschleife zu geben, da die Seite nicht zuende lädt. Allerdings weiß ich auch nicht woran das jetzt liegt. Hier der Code:

    function getRandom($quant=1, $min=0, $max=1){
      $randary = array();
      while(!(count($randary) >= $quant || count($randary) > $max-$min)){
      	$rand = mt_rand($min,$max);
    	if(!isset($randary[$rand+1]) && !isset($randary[$rand-1])){
        	$randary[$rand] = true; // Zufallszahl in Key speichern
    	}
      }
      return array_keys($randary);
    }


    Weiß jemand weiter?

    EDIT: Klappt doch so. In meinem Fall wollte ich 31 Zahlen von 1 bis 64 haben und das hat dann nicht gepasst. Habe jetzt andere Werte verwendet und mit denen klappt es
  • in: Verschiedene nicht aufeinander folgende Zufallszahlen

    geschrieben von ultimate-bravery

    Hallo.

    Ich brauche eine Funktion, die mir eine bestimmte Anzahl an Zahlen in einem Array zurück gibt. Die Zahlen sollen alle unterschiedlich sein und die Zahlen sollen nicht aufeinander folgen. Also sollen die Zahlen 1 und 2 zum Beispiel nicht zusammen vorkommen. Ich habe bereits eine Funktion, die mir die bestimmte Anzahl an unterschiedlichen Zufallszahlen zurück gibt:

    function getRandoms($quant, $min, $max){
      $randary = array();
      while(!(count($randary) >= $quant || count($randary) > $max-$min))
        $randary[mt_rand($min,$max)] = true; // Zufallszahl in Key speichern
      return array_keys($randary);
    }


    Jetzt fehlt nur noch der Teil, der dafür sorgt, dass die Zahlen nicht aufeinander folgen dürfen. Ich komme leider nicht drauf, wie ich das umsetzen kann. Hat vielleicht jemand eine Idee, wie ich es machen kann?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: Google Adsense alternative

    geschrieben von ultimate-bravery

    Hallo zusammen,

    da ich Probleme mit meinem Adsense Konto habe, wollte ich mal fragen, was ihr so für Alternativen kennt und auch benutzt und welche ihr mir empfehlen könnt. Bitte mit Begründung ;)

    Vielen Dank und viele Grüße
  • in: Sonderzeichen richtig anzeigen lassen

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich habe in einer MySQL Datenbank Daten stehen, die Sonderzeichen wie z.B. ein â enthalten können. Dieses Zeichen wird bei mir so angezeigt: â

    Als Zeichensatz im meta Tag habe ich ISO-8859-1 angegeben. Wenn ich UTF-8 angebe dann wird es richtig angezeigt, allerdings werden dann andere Zeichen auf meiner Seite falsch angezeigt. Deswegen möchte ich ISO-8859-1 lassen und nur diesen Wert aus der Datenbank als UTF-8 angeben. Dazu habe ich folgenden Code gefunden:

    mb_convert_encoding($daten, "UTF-8")


    Wenn ich das allerdings anwende, wird da oben genannte Zeichen so dargestellt: â

    Obwohl es ja vorher mit UTF-8 als Zeichencode für die gesamt Seite geklappt hat. Also wie kann ich diese Sonderzeichen jetzt richtig Darstellen?
  • in: Sonderzeichen bei API requests

    geschrieben von ultimate-bravery

    Ok vielen Dank.
    Ich habe es jetzt so gelöst:

    $post_lolname = $_POST['lolname'];
    $post_lolname2 = urlencode(mb_convert_encoding(str_replace(' ','',$post_lolname), "UTF-8"));


    So funktioniert es jetzt.


    Du hast aber noch einen Fehler in deinem Skript:
    1
    $post_server = htmlspecialchars($_POST['server']);
    sollte wohl eher
    1
    $post_server = urlencode($_POST['server']);
    heißen.


    Das htmlspecialchars sollte eher dafür sein, dass niemand etwas von meiner Seite aus ungewolltes an die Verarbeitung der Daten weiter gibt. Sonderzeichen kommen bei den Servern nämlich eh nicht vor.
  • in: Sonderzeichen bei API requests

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich benutze für meine Seite die Riot Games API. Wenn ich nun Daten anhand eines bestimmten Namens, welcher ein Sonderzeichen enthält, von meiner Seite aus in der API suchen will, kommt ein Fehler.

    Beispiel: Ich möchte Daten von dem Spieler "iMS Phântom" haben. Über dem a ist ja so ein Dach. Wenn ich den Namen ohne Leerzeichen direkt auf der Seite der API eingebe, bekomme ich auch die nötigen Daten. Also so gebe ich ihn da ein: "iMSPhântom" der Link dazu wäre:

    https://prod.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/iMSPhântom?api_key=...

    Wenn ich allerdings den Name auf meiner Seite eingebe, bekomme ich die Meldung, dass der Spieler nicht gefunden wurde. So sieht mein Code aus:

    $post_server = htmlspecialchars($_POST['server']);
    $post_lolname = $_POST['lolname'];
    $post_lolname2 = str_replace(' ','',$post_lolname); // Leerzeichen entfernen
    $url = 'http://prod.api.pvp.net/api/lol/'.$post_server.'/v1.4/summoner/by-name/'.$post_lolname2.'?api_key=...';
    $out = get_headers($url);
    list ($http, $zahl, $status) = explode(' ', $out[0], 3); // beim Leerzeichen aufteilen
    if($zahl == 200){
         // Weiter im Code
    }
    elseif($zahl == 404){
    	echo"Der Beschwörer wurde auf diesem Server nicht gefunden!";	
            var_dump($post_lolname2);
    }
    else{
    	echo"Die Verbindung zur League of Legends API ist zur Zeit nicht möglich. Versuche es später nochmal!";	
    }

    In dem var_dump bei der Fehlermeldung wird mir folgendes angezeigt:
    string(10) "iMSPhântom"

    Also genau das was ich auch auf der API Seite eingebe und da funktioniert es. Warum klappt nicht über meine Seite? Woran könnte das liegen?

    Viele Grüße und danke schonmal für die Hilfe :)

    EDIT: Ich habe herausgefunden, dass wenn ich den Namen so auf meiner Seite eingebe "iMSPh%C3%A2ntom", dass die Meldung dann nicht mehr kommt. Jetzt habe ich eine Funktion gesucht, die Sonderzeichen in diese speziellen Zeichen für URLs umwandelt. Ich habe urlencode() gefunden. Wenn ich es allerdings auf den oben genannten Namen anwende, gibt die var_dump Funktion folgendes aus:

    string(12) "iMSPh%E2ntom"


    Und nicht so, wie es richtig wäre: iMSPh%C3%A2ntom

    Wie bekomme ich das also jetzt richtig hin?
  • in: Domain mit Webspace verbinden

    geschrieben von ultimate-bravery

    Mit den A-Records habe ich es auch schon gemacht, allerdings kommt jetzt die Fehlermeldung "404 Not Found". Dauert es einfach nur etwas oder habe ich wohl was falsch gemacht?
  • in: Domain mit Webspace verbinden

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich habe eine Website von mir bei uberspace gehostet und ich habe eine Domain bei www.inwx.de registriert. Ich habe es bis jetzt so hinbekommen, dass ich meine Seite über die neue Domain aufrufen kann. Allerdings bleibt die Domain in der Adresszeile bei jeder Unterseite gleich. Wenn ich z.B. auf der Startseite bin, steht in der Adresszeile "meinedomain.de" und wenn ich dann z.B. auf die Unterseite "impressum.php" gehe bleibt trotzdem "meinedomain.de" in der Adresszeile stehen, anstatt "meinedomain.de/impressum.php". Was muss ich machen, damit es so funktioniert, wie ich es haben will?

    Viele Grüße
  • in: Sehr viele Bilder auf einer Seite - optimieren

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Auf einer Seite von mir werden sehr viele Bilder angezeigt, um die 500 Stück. Jetzt möchte ich das Laden der Seite optimieren.

    Also erstens kommt es fast immer vor, dass mindestens ein Bild nicht geladen werden kann. Das sind dann auch bei jedem Neuladen unterschiedliche Bilder. Anstelle des Bildes wird dann immer dieses Platzhalter Bild angezeigt.
    Wenn ich unter Chrome das Developer Tool öffne und mir die Fehlermeldungen anzeigen lasse, kommen die Errors:


    GET http://.../7.png net::ERR_EMPTY_RESPONSE
    GET http://...//14.png net::ERR_CONNECTION_TIMED_OUT


    Außerdem lädt die Seite relativ lange, deshalb kommt vermutlich auch der obige Fehler.

    Wie kann ich also meine Seite optimieren, sodass die Ladezeit verkürzt wird und der obige Fehler behoben werden kann?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: Mehrdimensionales Array sortieren

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich habe 3 verschiedene mehrdimensionale Arrays.

    Es geht um Spieler, welche eine ID, Anzahl der Spiele und Anzahl der Siege in einem Array drin stehen haben. Die ID des Spielers ist der erste Index. Das erste Array sieht also so aus:

    $einzelspieler[$id][0] = {Anzahl der Spiele}
    $einzelspieler[$id][1] = {Anzahl der Siege}


    Im Zweiten Array stehen jeweils zwei Spieler als Paare mit ihren Spielen und Siegen. Dabei besteht der Index aus den IDs der beiden Spielern mit Komma getrennt, also so:

    $paare[$id1.",".$id2][0] = {Anzahl der Spiele}
    $paare[$id1.",".$id2][1] = {Anzahl der Siege}


    Und im dritten Array ist das gleiche wie im zweiten Array, nur das noch ein 3. Spieler dazu kommt.

    Jetzt möchte ich diese Spieler bzw die Spieler Paare nach der Anzahl ihrer gespielten Spiele sortieren. Dazu habe ich folgenden Code benutzt;

    $sortArray = array(); 
    foreach($einzelspieler as $key => $array) { 
          $sortArray[$key] = $array[0]; 
    } 
    array_multisort($sortArray, SORT_DESC, SORT_NUMERIC, $einzelspieler);


    Das klappt auch soweit. Allerdings wird bei den Einzelspielern der Index ersetzt. Der Index besteht also nicht mehr aus den jeweiligen IDs, sondern aus neuen Zahlen, also 0,1,2,3... Obwohl ich bei den Paaren den gleichen Code benutze, bleibt der Index da aber erhalten. Und ich weiß nicht wodran das liegt und wie ich es beheben kann. Hier nochmal ein Beispiel:

    $einzelspieler[55][0] = 15;
    $einzelspieler[55][1] = 10;
    $einzelspieler[38][0] = 22;
    $einzelspieler[38][1] = 16;
    
    // Hier kommt das Sortierverfahren
    
    var_dump($einzelspieler);

    Ausgabe:


    array(2) { [0]=> array(2) { [0]=> int(22) [1]=> int(16) } [1]=> array(2) { [0]=> int(15) [1]=> int(10) } }


    $paare[20,9][0] = 34;
    $paare[20,9][1] = 19;
    $paare[41,67][0] = 12;
    $paare[41,67][1] = 8;
    
    // Hier kommt das Sortierverfahren
    
    var_dump($paare);

    Ausgabe:


    array(2) { [20,9]=> array(2) { [0]=> int(34) [1]=> int(19) } [41,67]=> array(2) { [0]=> int(12) [1]=> int(8) } }


    Ich würde mich über Lösungen bzw Verbesserungs-/Änderungsvorschläge freuen.
    Viele Grüße
  • in: Javascript Seite aufrufen

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich habe mit HTML eine Tabelle erstellt. Diese besteht aus einer Spalte und mehreren Zeilen. In den Zeilen stehen unterschiedliche Sachen und man kann auf die Zeilen drauf klicken. Wenn man auf eine Zeile klickt kommt man entsprechend auf eine andere Seite. Das habe ich bis jetzt so mit Jacascript gelöst:

    Javascript:
    <script type="text/javascript">
    function switchTo (id) {
    	window.location.href = "neueSeite.php?id="+id;
    }
    </script>


    Html bzw PHP:
    echo "<tr style='background-color:".$bgcolor."; cursor:pointer;' onclick=\"switchTo('".$id."');\">


    Allerdings stehen in den Zeilen Daten, die da stehen, damit man sie markiert und in die Zwischenablage kopiert. Wenn man also ein Wort aus dieser Zeile markieren will, klickt man ja schon auf die Zeile und dann wird die Seite gewechselt, obwohl man nur etwas kopieren wollte und nicht auf die andere Seite wechseln wollte.

    Wie kann ich es also lösen, dass man etwas markieren kann, ohne dass dabei die Seite wechselt. Die Seite soll nur geändert werden, wenn jemand mit einem normalen Mausklick drauf klickt.

    Ich würde mich über Hilfe und Tipps freuen.
    Viele Grüße
  • in: Input Type File - Sprache

    geschrieben von ultimate-bravery

    Hallo zusammen,

    wenn man in HTML den Input mit dem Typ file benutzt, also so:

    <input type="file" name="datei">

    dann steht auf dem Button "Datei auswählen" und falls noch nichts ausgewählt wurde steht daneben "Keine ausgewählt".

    Da ich meine Seite aber auf Englisch habe, suche ich einen Weg, dass der oben genannte Text auch auf Englisch erscheint. Kann man das überhaupt beeinflussen oder hängt das von der Browser Sprache ab?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: Teilstring aus String entfernen

    geschrieben von ultimate-bravery

    Super danke dir! Es funktioniert genau so wie ich es brauche :)
  • in: Teilstring aus String entfernen

    geschrieben von ultimate-bravery

    Hallo zusammen,
    ich habe einen String in dem Namen durch Kommas getrennt stehen, also z.B. so:
    $string = "Thomas,Felix,Stefan,Andre";

    Nun soll man beliebige Namen aus diesem String entfernen können. Dabei soll der Name und falls vorhanden das davor stehende Komma entfernt werden.

    Wie löse ich das am besten?

    Ich würde mich über Hilfe freuen.
    Viele Grüße
  • in: PHP Script in Konsole ausführen

    geschrieben von ultimate-bravery

    Danke für die Hilfe aber es hat geklappt, indem ich um den Pfad Anführungszeichen gesetzt habe. Im anderen Fall hat die Konsole die Leerzeichen nicht akzeptiert.
  • in: PHP Script in Konsole ausführen

    geschrieben von ultimate-bravery

    Natürlich deine zweite Variante. Also mit dem php tag. Hab den Beitrag davor nochmal editiert. Hab ja gesagt ich komme einfach nur in die nächste Zeile, allerdings kommt die Fehlermeldung:

    Could not open input file: C:\Program

    Habs so eingegeben:

    php C:\Program Files (x86)\EasyPHP...
  • in: PHP Script in Konsole ausführen

    geschrieben von ultimate-bravery

    Also bei mir passiert da nichts. Ich komme einfach nur in die nächste Zeile.

    In der test.php steht nur "echo 'test';". Also müsste doch dann "test" in der Konsole ausgegeben werden oder?

    EDIT: Es kommt der Fehler: Could not open input file: C:\Program
  • in: PHP Script in Konsole ausführen

    geschrieben von ultimate-bravery

    Klappt nicht.

    Meldung: Could not open input file: test.php

    Und wenn ich erst php eingebe, dann ENTER und dann test.php passiert gar nichts, dann komme ich einfach nur in die nächste Zeile.
  • in: PHP Script in Konsole ausführen

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Wie kann man ein PHP Script über die Konsole ausführen?

    Ich benutze Windows 8 und als lokalen Server habe ich EasyPHP. Die php.exe liegt im Ordner

    C: ...binaries/php/php_runningversion/

    Und die PHP Datei die ich ausführen möchte liegt im Ordner

    C: ...data/localweb/test/test.php

    Wenn ich also die php.exe starte, öffnet sich die Konsole. Was muss ich da jetzt genau eingeben, um die Datei test.php auszuführen?

    Wenn ich einfach nur test.php oder data/localweb/test/test.php eingebe passiert nichts.

    Ich hoffe jemand kann mir helfen.
    Viele Grüße
  • in: Host für Cronjob mit langer Ladezeit

    geschrieben von ultimate-bravery

    Hallo zusammen,

    ich brauche für meine Seite einen Cronjob, der eine Ladezeit von deutlich mehr als 30 Sekunden hat. Deswegen kann ich ihn hier bei lima-city nicht benutzen. Kennt jemand von euch einen free host, der erlaubt, die max_execution_time in der php.ini zu erhöhen?

    Ich hoffe mir kann jemand Tipps geben.
    Viele Grüße
  • in: Daten aus API auslesen

    geschrieben von ultimate-bravery

    Ich habs hinbekommen. Hier der Code:

    $url = '...';
    $out = get_headers($url);
    list ($http, $zahl, $status) = explode(' ', $out[0], 3); 
    if($zahl == 200){
    	$json_file = @file_get_contents($url);
    	$json_array = json_decode($json_file);
    	$array = $json_array->data;
    	$anzahl = count($array);
    	foreach(get_object_vars($array) as $property => $value) {
    	  echo $property."<br>";
    	}
    }

    Der Code gibt mir untereinander die gebrauchten Zahlen aus.
  • in: Daten aus API auslesen

    geschrieben von ultimate-bravery

    Hallo zusammen.

    Ich muss auf eine API zugreifen und alle "Objekte" auslesen. Der Aufbau der API sieht so aus:


    "data": {
    "3089": {
    ...
    },
    "2009": {
    ...
    },...

    Die Zahlen sind variabel und ich will all diese Zahlen in einem Array haben. Mich Interessieren nur die Zahlen, nicht die Werte, die auf die Zahl folgen. Normal benutze ich folgenden Code, um auf eine API zuzgreifen:

    $url = '...';
    $out = get_headers($url);
    list ($http, $zahl, $status) = explode(' ', $out[0], 3); // 
    if($zahl == 200){
    	$json_file = @file_get_contents($url);
    	$json_array = json_decode($json_file);
    	$array = $json_array->data;
    	$anzahl = count($array);
    	for($i = 0; $i < $anzahl; $i++){
    		echo $array[$i]->name;
            }
    }

    Aber sonst war "data" in der API auch immer ein Array, sodass ich diesen Code benutzen konnte. Aber jetzt steht hinter dem Data ja eine geschweifte Klammer und keine eckige. Wie muss ich den Code also umwandeln, damit ich alle benötigten Zahlen in ein Array bekomme, also: (3089, 2009, ...)

    Ich würde mich über Hilfe freuen.
    Viele Grüße

Login zum Webhosting ohne Werbung!