Created
August 12, 2013 21:58
-
-
Save MobiDevelop/6215682 to your computer and use it in GitHub Desktop.
An example of downloading a file and displaying progress with the LibGDX Net module.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.badlogic.gdx.tests.lwjgl; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.OutputStream; | |
import com.badlogic.gdx.ApplicationAdapter; | |
import com.badlogic.gdx.Gdx; | |
import com.badlogic.gdx.Net.HttpMethods; | |
import com.badlogic.gdx.Net.HttpRequest; | |
import com.badlogic.gdx.Net.HttpResponse; | |
import com.badlogic.gdx.Net.HttpResponseListener; | |
import com.badlogic.gdx.backends.lwjgl.LwjglApplication; | |
import com.badlogic.gdx.graphics.Color; | |
import com.badlogic.gdx.graphics.GL10; | |
import com.badlogic.gdx.scenes.scene2d.InputEvent; | |
import com.badlogic.gdx.scenes.scene2d.Stage; | |
import com.badlogic.gdx.scenes.scene2d.ui.Skin; | |
import com.badlogic.gdx.scenes.scene2d.ui.Table; | |
import com.badlogic.gdx.scenes.scene2d.ui.TextButton; | |
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; | |
import com.esotericsoftware.tablelayout.Value; | |
public class Snippet { | |
public static void main (String[] args) { | |
new LwjglApplication(new ApplicationAdapter() { | |
Stage stage; | |
Skin skin; | |
TextButton button; | |
@Override | |
public void create () { | |
stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); | |
skin = new Skin(Gdx.files.internal("data/uiskin.json")); | |
Gdx.input.setInputProcessor(stage); | |
Table container = new Table(); | |
container.setFillParent(true); | |
button = new TextButton("Click to download", skin); | |
button.getStyle().disabled = skin.newDrawable("default-round", Color.DARK_GRAY); | |
container.row(); | |
container.add(button).width(Value.percentWidth(0.50f)); | |
stage.addActor(container); | |
button.addListener(new ClickListener() { | |
@Override | |
public void clicked (InputEvent event, float x, float y) { | |
if (!button.isDisabled()) { | |
button.setDisabled(true); | |
// Make a GET request | |
HttpRequest request = new HttpRequest(HttpMethods.GET); | |
request.setTimeOut(2500); | |
request.setUrl("http://libgdx.badlogicgames.com/nightlies/libgdx-nightly-latest.zip"); | |
// Send the request, listen for the response | |
Gdx.net.sendHttpRequest(request, new HttpResponseListener() { | |
@Override | |
public void handleHttpResponse (HttpResponse httpResponse) { | |
// Determine how much we have to download | |
long length = Long.parseLong(httpResponse.getHeader("Content-Length")); | |
// We're going to download the file to external storage, create the streams | |
InputStream is = httpResponse.getResultAsStream(); | |
OutputStream os = Gdx.files.external("libgdx-nightly-latest.zip").write(false); | |
byte[] bytes = new byte[1024]; | |
int count = -1; | |
long read = 0; | |
try { | |
// Keep reading bytes and storing them until there are no more. | |
while ((count = is.read(bytes, 0, bytes.length)) != -1) { | |
os.write(bytes, 0, count); | |
read += count; | |
// Update the UI with the download progress | |
final int progress = ((int) (((double) read / (double) length) * 100)); | |
final String progressString = progress == 100 ? "Click to download" : progress + "%"; | |
// Since we are downloading on a background thread, post a runnable to touch ui | |
Gdx.app.postRunnable(new Runnable() { | |
@Override | |
public void run () { | |
if (progress == 100) { | |
button.setDisabled(false); | |
} | |
button.setText(progressString); | |
} | |
}); | |
} | |
} catch (IOException e) { | |
} | |
} | |
@Override | |
public void failed (Throwable t) { | |
Gdx.app.postRunnable(new Runnable() { | |
@Override | |
public void run () { | |
button.setText("Too bad. Download failed."); | |
} | |
}); | |
} | |
}); | |
} | |
} | |
}); | |
} | |
@Override | |
public void render () { | |
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); | |
stage.act(); | |
stage.draw(); | |
} | |
}, "Download Example", 480, 320, true); | |
} | |
} |
Thanks, i wrote the downloading based on your solution
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks, this was very useful. Don't you need to close the OutputStream at the end?