S
Sascha_K1994
Stamm-User
- 83
Guten Abend allerseits,
ich bin noch nicht ganz so erfahren auf dem Android - Programmiergebiet, meine Künste liegen eher in PHP & Co.
Ich verwende folgendes um einen GET Request zu senden:
und dazu in einer eigenen Class:
Generell klappt dieser Code auch nur das Problem ist, das sich das Handy wärend des Ladens (wenn es zB 5 Sekunden dauert) aufhängt, das heißt klickt man irgendwo auf dem Bildschirm kommt die bekannte "... reagiert nicht" - Meldung!
Dann habe ich dieses schöne hier gefunden (klappt wunderbar und der Ladebalken ist ebenfalls richtig toll
)
dazu in der gleichen Class:
nur das Problem ist das er die Serverantwort direkt ausgibt (in ein TextView), was ich aber gar nicht will (sondern in eine Variable). Kann man das irgendwie abändern? Herzlichen Dank.
ich bin noch nicht ganz so erfahren auf dem Android - Programmiergebiet, meine Künste liegen eher in PHP & Co.
Ich verwende folgendes um einen GET Request zu senden:
Code:
final getDaten userd = new getDaten();
String serveranswer = userd.getDatenvonURL("URL.de/url.php?url=1");
if(serveranswer.equals("OK")){
<mache weiter>
}
Code:
String url = "";
String params = "";
getJSON context = this;
String jsonResponse;
int wartedurchlauf = 0;
int antwortbekommen = 0;
public String getJSONforURL(String urlparams){
params = urlparams;
Log.v("[APP] ", "Starte Anfrage an Server ...");
checkUpdate.start();
while(checkUpdate.isAlive()){
try {
synchronized(this) {
if(wartedurchlauf > 500) {
Log.v("[APP] ", "Keine Antwort vom Server erhalten.");
return "ERROR";
}else{
wait(100);
if (antwortbekommen == 0){
Log.v("[APP] ", "Warte auf Antwort vom Server ...");
wartedurchlauf++;
}
}
}
} catch (InterruptedException e) {
}
}
return Response;
}
private Thread checkUpdate = new Thread() {
public void run() {
try {
URL updateURL = new URL(params);
URLConnection conn = updateURL.openConnection();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while((current = bis.read()) != -1){
baf.append((byte)current);
}
Response = new String(new String(baf.toByteArray()));
Log.v("[APP] ", "Antwort vom Server erhalten.");
antwortbekommen = 1;
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dann habe ich dieses schöne hier gefunden (klappt wunderbar und der Ladebalken ist ebenfalls richtig toll
GetXMLTask task = new GetXMLTask();
task.execute(new String[] { URL });
dazu in der gleichen Class:
Code:
private class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String output = null;
for (String url : urls) {
output = getOutputFromUrl(url);
}
return output;
}
private String getOutputFromUrl(String url) {
StringBuffer output = new StringBuffer("");
try {
InputStream stream = getHttpConnection(url);
BufferedReader buffer = new BufferedReader(
new InputStreamReader(stream));
String s = "";
while ((s = buffer.readLine()) != null)
output.append(s);
} catch (IOException e1) {
e1.printStackTrace();
}
return output.toString();
}
// Makes HttpURLConnection and returns InputStream
private InputStream getHttpConnection(String urlString) throws IOException {
InputStream stream = null;
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
try {
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setRequestMethod("GET");
httpConnection.connect();
if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
stream = httpConnection.getInputStream();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return stream;
}
ProgressDialog mProgressDialog;
protected void onPreExecute() {
mProgressDialog = ProgressDialog.show(MainActivity.this, "Bitte warten ...", "Daten werden geladen ...");
}
protected void onPostExecute(String output) {
mProgressDialog.dismiss();
outputText.setText(output);
}
}