1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Return wenn Thread beendet ist

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von h00ligan, 28.03.2012.

  1. h00ligan, 28.03.2012 #1
    h00ligan

    h00ligan Threadstarter Junior Mitglied

    Beiträge:
    40
    Erhaltene Danke:
    0
    Registriert seit:
    22.03.2012
    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 :(
     
  2. Tom299, 28.03.2012 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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.
     

Diese Seite empfehlen