Return wenn Thread beendet ist

H

h00ligan

Neues Mitglied
0
Hey Leute :)

Ich habe eine klasse gemacht, die einen Thread aufruft indem die rückgabe eines php-scripts abgefangen wird und in der variable data_arraylist gespeichert wird

sobald dieser thread beendet ist, soll die getData-funktion (die den thread aufruft) ein return mit der variable data_arraylist machen.

hier ein beispiel wie ich die getData funktion aufrufe (aus einer anderen activity heraus):
Scripty scripty_test = new Scripty();
scripty_test_result = scripty_test.getData("www.blablubb.de", "?parameter=lalelu");

scripty_test_result beinhaltet dann die zurückgegebene arraylist

hier der code der klasse "scripty":
Code:
public class Scripty {
	Boolean jsonStatus = false;
	JSONObject jsonResponse;
	String jsonMsg = "";
	public ArrayList<String> data_arraylist = new ArrayList<String>();
	String url = "";
	String params = "";
	Integer responseLength = 0;
	
	public ArrayList<String> getData(String targeturl, String urlparams){		
		url = targeturl;
		params = urlparams;
		
		checkUpdate.start();
		
		while(checkUpdate.isAlive()){
			try {
				synchronized(this) {
					wait(50);
					System.out.println("wait");
				}
			} catch (InterruptedException e) {

			}
		}
		System.out.println("data_array size: " + String.valueOf(data_arraylist.size()));
		return data_arraylist;
	}
	
	private Thread checkUpdate = new Thread() {
        public void run() {
            try {
                URL updateURL = new URL(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);
                }
                
                jsonResponse = new JSONObject(new String(baf.toByteArray()));
                jsonStatus = jsonResponse.getBoolean("status");
                if(jsonStatus == true){
                	responseLength = jsonResponse.length()-2;
                	if(responseLength > 0){
                                <<< hier bricht das script ab >>>
                		for(int i = 0; i < responseLength; i++){
                			data_arraylist.add(jsonResponse.getString(""+String.valueOf(i)+""));
                    		System.out.println("array add");
            			}
                	}else{
                		System.out.println("jsonStatus FALSE > 0");
                		data_arraylist.add("false");
                	}
                }else{
                	System.out.println("jsonStatus FALSE");
                	data_arraylist.add("false");
                }
                
                System.out.println("ende");
            } catch (Exception e) {
            }
        }
    };
}

Leider bricht das Script bei folgender for-schleife ab:
Code:
for(int i = 0; i < responseLength; i++){

Hoffentlich kann mir jemand helfen :(
 
Ich glaube du mußt das Hinzufügen von Elementen in die ArrayList auch synchronisieren, aber da du kein Fehler-Log zeigst kann man nur raten ;-)

Aber warum benutzt du keinen Handler, der dir signalisiert, wenn dein Thread seine Arbeit erledigt hat? Dann bräuchtest du keine while-Schleife um abzufragen, ob der Thread noch aktiv ist usw.
 

Ähnliche Themen

U
  • unerfahrenerAppEntwickler
Antworten
3
Aufrufe
700
swa00
swa00
Zurück
Oben Unten