Hallo,
ich lade per http Post Daten auf einen Webserver hoch ... zuerst hatte ich pro CommandString einen eigenen Thread Upload.
Wenn nun der Upload scheitert, werden die Daten wieder in die Queue gelegt und beim nächsten Zyklus abgearbeitet. Da es aber bis zu 10000 Daten sein können, würden 10000 Threads erstellt.
Daher möchte ich nun alle mit einer Connection hochladen ... funktioniert zum Teil.
Der erste http Post wird beim Server übernommen ... die anderen anscheinend nicht (die Daten werden geloggt und sehe immer nur den ersten Upload.
Könnt bitte jemand über den Code blicken und eventuell auf einen Fehler hinweisen?
Mittels getStatusListener. werden die Daten wieder an die Main Klasse zurückgeben und dort in die Queue gelegt.
Danke:
ich lade per http Post Daten auf einen Webserver hoch ... zuerst hatte ich pro CommandString einen eigenen Thread Upload.
Wenn nun der Upload scheitert, werden die Daten wieder in die Queue gelegt und beim nächsten Zyklus abgearbeitet. Da es aber bis zu 10000 Daten sein können, würden 10000 Threads erstellt.
Daher möchte ich nun alle mit einer Connection hochladen ... funktioniert zum Teil.
Der erste http Post wird beim Server übernommen ... die anderen anscheinend nicht (die Daten werden geloggt und sehe immer nur den ersten Upload.
Könnt bitte jemand über den Code blicken und eventuell auf einen Fehler hinweisen?
Mittels getStatusListener. werden die Daten wieder an die Main Klasse zurückgeben und dort in die Queue gelegt.
Danke:
Java:
public class HttpPost extends Thread {
private final String USER_AGENT = "Mozilla/5.0";
public GetStatusListener getStatusListener;
public String url, apiKey, postDataString;
private LimitedQueue<String> postDataLinkList;
// public List<ChannelValue> value;
public HttpPost(String url, LimitedQueue<String> postDataString,
GetStatusListener getStatusListener, String apiKey) {
this.getStatusListener = getStatusListener;
this.url = url;
this.postDataLinkList = postDataString;
this.apiKey = apiKey;
this.start();
}
public void run() {
try {
URL obj = new URL(url);
BufferedReader in = null;
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
System.out.println("Upload data: " + postDataLinkList.size());
// For POST only - START
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
// System.out.println("lade Daten hoch: " + data.toString());
Iterator<String> iteratorPostDataString = postDataLinkList.iterator();
while (iteratorPostDataString.hasNext()) {
postDataString = iteratorPostDataString.next();
postDataString = postDataString.split("&apikey")[0];
postDataString = postDataString + "&apikey=" + apiKey;
System.out.println("Datenupload: " + postDataString);
os.write(postDataString.getBytes());
os.flush();
// For POST only - END
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
getStatusListener.getStatus(responseCode, postDataString);
iteratorPostDataString.remove();
} else if (responseCode == HttpURLConnection.HTTP_OK) { // success
in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
getStatusListener.getStatus(responseCode, postDataString);
iteratorPostDataString.remove();
} else {
getStatusListener.getStatus(responseCode, postDataString);
iteratorPostDataString.remove();
}
}
if (in != null) {
in.close();
}
if (os != null) {
os.close();
}
} catch (MalformedURLException e) {
getStatusListener.getStatus(-1, postDataLinkList);
} catch (IOException e) {
getStatusListener.getStatus(-1, postDataLinkList);
}
}
}