Asynctask beendet sich nicht

  • 1 Antworten
  • Neuester Beitrag
Diskutiere Asynctask beendet sich nicht im Android App Entwicklung im Bereich Betriebssysteme & Apps.
Micka

Micka

Fortgeschrittenes Mitglied
Hy,

in meiner App nutze ich einen AsyncTask und einen Messenger um permanent Netzwerkdaten zu empfangen. Wenn ich die Activity verlasse möchte ich aber den Asynctask killen da es sonst Probleme gibt wenn ich die Activity neu starte und den gleichen Asyncstask starten möchte.

Nun habe ich gedacht beim beenden der Activity rufe ich noch AsyncTask.cancel(true); auf, checke in der DoinBackground
if(isCancelled())
return null;

aber trotzdessen beendet sich der AsyncTask nicht, was mich ein wenig verwundert.

Mach ich etwas falsch um den zu beenden?

Ich poste mal den Code der Klasse noch.
P.S. Die Klasse Sende zur Definition des Asyntask steht ganz am Ende
Code:
package de.gerding.pentatonikpiano;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.Inet4Address;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.Toast;

public class Mainscreen extends Activity 
{
    private static final int RESULT_SETTINGS = 1;
    private static boolean ping;
    private static boolean wait;
    private static String arduinoIP = "192.168.137.3";
    private static int arduinoPort = 1234;
    /*private long halb = 995;
    private long viertel = 497;*/
    private long halb = 800;
    private long viertel = 400;
    /*private long halb = 650;
    private long viertel = 325;*/
    //Hopp Hopp Hopp, Pferdchen lauf galopp in G-Dur
    private int g = 0;
    private int a = 1;
    private int h = 2;
    private int c = 3;
    private int d = 4;
    private static int tastzahl;
    private int pause = 200;
    private int[] hohoho = {g, h, d, pause, d, c, h, a, g,pause, c, c, a, a, d, d, h, h,    c, c, a, a, d, d, h, g,pause,     g, a, h, c, d,pause,  d, c, h, a, g};
    private String[] noten = {"g", "h", "d", "d", "c", "h", "a", "g", "c", "c", "a", "a", "d", "d", "h", "h", "c", "c", "a", "a", "d", "d", "h", "g", "g", "a", "h", "c", "d", "d", "c", "h", "a", "g"};
    //                            g,   h,    d,    d,       c,       h,       a,     g,         c,       c,       a,       a,      d,       d,        h,      h,        c,       c,        a,       a,      d,        d,       h,      g,         g,       a,        h,       c,    d,     d,       c,       h,       a,    g
    private long[] duration = {halb, halb, halb,viertel, viertel, viertel, viertel, halb, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, halb, viertel, viertel, viertel, viertel, halb};
    //                            g,   h,    d,  pause     d,       c,       h,       a,      g, pause    c,       c,       a,        a,      d,       d,        h,      h,          c,        c,       a,       a,      d,       d,       h,       g,       pause     g,       a,       h,       c,      d,   pause      d,       c,       h,       a,    g
    private long[] duration2 = {halb, halb, halb,pause, viertel, viertel, viertel, viertel, halb,pause, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel, viertel,pause,  viertel, viertel, viertel, viertel, halb, pause,  viertel, viertel, viertel, viertel, halb};
        
    
    private SoundPool mSoundPool;
    private int[] soundID = new int[5];
    private int[] sampleID = new int[5];
    private boolean[] loaded = new boolean[6];
    private int index = 0;
    private Button btn_note_g, btn_note_a, btn_note_h, btn_note_c, btn_note_d;
    private long[][] time  = new long[5][2];
    private String[] teststring = new String[noten.length];
    private String soll = "ghddchagccaaddhhccaaddhggahcddchag";
    private String ist = "";
    private long[] testlong = new long[noten.length];
    private int z = 0;
    private int ijk;
    private int zwischenzeitnr = 0;
    private int zwischenzeitanzahl = 0;
    private long zwischenzeit[] = new long[2];
    private long zwischenzeitenbuffer[] = new long[noten.length];
    private long[] zwischenzeiten;
    private String notenlaenge = "";
    private Context thisContext;
    private String[] auswertung = new String[noten.length*2];
    private String[] auswertungcache = new String[noten.length];
    private CouchDBManager dbManager = new CouchDBManager();
    
    private static Messenger messenger;
    private static Handler messageHandler;
    private static AsyncTask<String, Void, String> senden;
    private static boolean check;
    private static boolean stop;
    private static boolean cancelTask = false;
    private static Activity mainscreenActivity;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainscreen);
        refreshUserSettings();
        verbindungstest();
        mainscreenActivity = this;
        tastzahl = 0;
        check = true;
        stop = false;
        z = 0;
        messageHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg) 
            {
                super.handleMessage(msg);
                Bundle extras = msg.getData();
                String[] ergebnis = extras.getStringArray("erg");
                for(int i = 0; i< ergebnis.length; i++)
                {
                    System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ   " + z);
                    if((ergebnis[i].equals("1"))&&(check))
                    {
                        stopMeantime();
                        switch(i)
                        {
                            case 0: sampleID[0] = mSoundPool.play(soundID[0], 1f, 1f, 1, 0, 1f); starttime(0); teststring[z] = "g"; ijk = i; break;
                            case 1: sampleID[1] = mSoundPool.play(soundID[1], 1f, 1f, 1, 0, 1f); starttime(1); teststring[z] = "a"; ijk = i; break;
                            case 2: sampleID[2] = mSoundPool.play(soundID[2], 1f, 1f, 1, 0, 1f); starttime(2); teststring[z] = "h"; ijk = i; break;
                            case 3: sampleID[3] = mSoundPool.play(soundID[3], 1f, 1f, 1, 0, 1f); starttime(3); teststring[z] = "c"; ijk = i; break;
                            case 4: sampleID[4] = mSoundPool.play(soundID[4], 1f, 1f, 1, 0, 1f); starttime(4); teststring[z] = "d"; ijk = i; break;
                        }
                        System.out.println("IIIJJJJJJJJKKKKKKKKKKK   " + ijk);
                        tastzahl++;
                        check = false;
                        System.out.println("!!!!!!!!!!!!!!???????????$$$$$$$$$  " + tastzahl);
                        if(tastzahl == 34)
                        {
                            System.out.println(ist);
                            senden.cancel(true);
                            
                        }
                    }
                    if((ergebnis[ijk].equals("0"))&&(!check))
                    {
                        System.out.println("losgelassen");
                        startMeantime();
                        switch(ijk)
                        {
                            case 0: mSoundPool.stop(sampleID[0]); stoptime(0); testlong[z] = getTimeDifference(time[0][0], time[0][1]); z++; break;
                            case 1: mSoundPool.stop(sampleID[1]); stoptime(1); testlong[z] = getTimeDifference(time[1][0], time[1][1]); z++; break;
                            case 2: mSoundPool.stop(sampleID[2]); stoptime(2); testlong[z] = getTimeDifference(time[2][0], time[2][1]); z++; break;
                            case 3: mSoundPool.stop(sampleID[3]); stoptime(3); testlong[z] = getTimeDifference(time[3][0], time[3][1]); z++; break;
                            case 4: mSoundPool.stop(sampleID[4]); stoptime(4); testlong[z] = getTimeDifference(time[4][0], time[4][1]); z++; break;
                        }
                        check = true;
                        if(z == noten.length && (!stop))
                        {
                            stop = true;
                            for(int j = 0; j < noten.length; j++)
                            {
                                //auswertungcache[i] = "Sollton: " +hohohonoten[i]  + " Istton: " + teststring[i] + " Sollzeit: " + duration[i] + " Istzeit: " + testlong[i];
                                auswertungcache[j] ="    " + noten[j] + "              "  + teststring[j] + "            " + duration[j] + "           " + testlong[j] + "     ";
                                if((testlong[j]-duration[j]) < 10 && (testlong[j]-duration[j]) > -10  )
                                {
                                    notenlaenge = notenlaenge + "perfekt, ";
                                    auswertungcache[j] = auswertungcache[j] + "    perfekt (" + String.valueOf(testlong[j]-duration[j]) +")" ;
                                }else if(testlong[j] > (duration[j] + 100))
                                {
                                    notenlaenge = notenlaenge + "zu lang, ";
                                    auswertungcache[j] = auswertungcache[j] + "    zu lang (" + String.valueOf(testlong[j]-duration[j]) +")" ;
                                }else if(testlong[j] < (duration[j] - 100))
                                {
                                    notenlaenge = notenlaenge + "zu kurz, ";
                                    auswertungcache[j] = auswertungcache[j] + "    zu kurz (" + String.valueOf(testlong[j]-duration[j]) +")" ;
                                }else
                                {
                                    notenlaenge = notenlaenge + "gut, ";
                                    auswertungcache[j] = auswertungcache[j] + "    gut (" + String.valueOf(testlong[j]-duration[j]) +")" ;
                                }
                            }
                            int k = 1;
                            int l = 2;
                            int m = 0;
                            while(m < auswertungcache.length)
                            {
                                auswertung[k] = auswertungcache[m];
                                if(l<auswertung.length)
                                {
                                    auswertung[l] = "Zwischenzeit" + (m+1) + ": " + String.valueOf(zwischenzeitenbuffer[m+1]);
                                }
                                k = k + 2;
                                l = l + 2;
                                m++;
                            }
                            //Tonfolge kontrollieren
                            String soll = "";
                            String ist = "";
                            for(int j = 0; j < noten.length; j++)
                            {
                                soll = soll + noten[j];
                                ist = ist + teststring[j];
                                
                            }
                            if(ist.equals(soll))
                            {
                                Toast.makeText(getApplicationContext(), "Richtige Tonfolge!", Toast.LENGTH_SHORT).show();
                            }else
                            {
                                Toast.makeText(getApplicationContext(), "Falsche Tonfolge, nochmal üben!", Toast.LENGTH_SHORT).show();
                                //ist = "";
                            }
                            for( int j = 1; j <= zwischenzeitanzahl; j++)
                            {
                                System.out.println("Zwischenzeit " + j + " :" + zwischenzeitenbuffer[j]);
                            }
                            zwischenzeiten = new long[zwischenzeitanzahl];
                            for(int j = 0; j < zwischenzeiten.length; j++)
                            {
                                zwischenzeiten[j] = zwischenzeitenbuffer[j+1];
                            }
                            if(ping)
                            {
                                //Werte in DB eintragen
                                final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
                                new Thread()
                                {
                                    public void run()
                                    {
                                        try 
                                        {
                                            dbManager.wertEintragen("pentatoniktest", noten, teststring, duration, testlong, zwischenzeiten);
                                        } catch (Exception e) 
                                        {
                                            e.printStackTrace();
                                        }
                                        
                                    }
                                }.start();
                            }
                            Intent intent = new Intent(thisContext, Auswertungstyp.class);
                            intent.putExtra("auswertung", auswertung);
                            intent.putExtra("SOLLNOTEN", noten);
                            intent.putExtra("ISTNOTEN", teststring);
                            intent.putExtra("SOLLTASTZEITEN", duration);
                            intent.putExtra("ISTTASTZEITEN", testlong);
                            startActivity(intent);
                            /*Intent intent =  new Intent(thisContext, Auswertung.class);
                            intent.putExtra("auswertung", auswertung);
                            startActivity(intent);*/
                            z = 0;
                            //stop = false;
                            zwischenzeitnr = 0;
                            ist = "";
                            notenlaenge = "";
                            auswertung = new String[(noten.length * 2)]; //79
                            auswertungcache = new String[noten.length];
                            mainscreenActivity.finish();
                            cancelTask = true;
                            [U][B]senden.cancel(true);[/B][/U]
                        }
                    }/*else
                    {
                        if(ergebnis[0].equals("0")&&ergebnis[1].equals("0")&&ergebnis[2].equals("0")&&ergebnis[3].equals("0")&&ergebnis[4].equals("0"))
                            check = true;
                    }*/
                }
            }
        };
        
        messenger = new Messenger(messageHandler);
        
        //new sende().execute("");
        //senden.cancel(true);
        [U][B]senden = new sende().execute("");[/B][/U]
        thisContext = this.getApplicationContext();
        btn_note_g = (Button) findViewById (R.id.btn_note_g);
        btn_note_a = (Button) findViewById (R.id.btn_note_a);
        btn_note_h = (Button) findViewById (R.id.btn_note_h);
        btn_note_c = (Button) findViewById (R.id.btn_note_c);
        btn_note_d = (Button) findViewById (R.id.btn_note_d);
        
        btn_note_g.setOnTouchListener(touchListener);
        btn_note_a.setOnTouchListener(touchListener);
        btn_note_h.setOnTouchListener(touchListener);
        btn_note_c.setOnTouchListener(touchListener);
        btn_note_d.setOnTouchListener(touchListener);
        
        //SoundPool-Stuff
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        
        mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
        {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,int status) 
            {
                if(index < 5)
                {
                    loaded[index] = true;
                    sampleID[index] = sampleId;
                    index++;
                }
            }
        });
                
        for(int i=0;i<soundID.length;i++)
        {
            switch(i)
            {
                case 0: soundID[i] = mSoundPool.load(this, R.raw.g, 1); break;
                case 1: soundID[i] = mSoundPool.load(this, R.raw.a, 1); break;
                case 2: soundID[i] = mSoundPool.load(this, R.raw.h, 1); break;
                case 3: soundID[i] = mSoundPool.load(this, R.raw.c, 1); break;
                case 4: soundID[i] = mSoundPool.load(this, R.raw.d, 1); break;
            }
        }
    }
    private boolean allLoaded()
    {
        boolean result = false;
        for(int i=0;i<4;i++)
        {
            if(loaded[i])
                result = true;
            else
                result = false;
        }
        return result;
    }
    private OnTouchListener touchListener = new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            if(allLoaded())
            {
                if(event.getAction() == MotionEvent.ACTION_DOWN)
                {                    
                    stopMeantime();
                    AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
                    float actualVolume = (float) audioManager
                            .getStreamVolume(AudioManager.STREAM_MUSIC);
                    float maxVolume = (float) audioManager
                            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                    float volume = actualVolume / maxVolume;
                    
                    switch(v.getId())
                    {
                        case R.id.btn_note_g: sampleID[0] = mSoundPool.play(soundID[0], volume, volume, 1, 0, 1f); starttime(0); teststring[z] = "g"; break;
                        case R.id.btn_note_a: sampleID[1] = mSoundPool.play(soundID[1], volume, volume, 1, 0, 1f); starttime(1); teststring[z] = "a"; break;
                        case R.id.btn_note_h: sampleID[2] = mSoundPool.play(soundID[2], volume, volume, 1, 0, 1f); starttime(2); teststring[z] = "h"; break;
                        case R.id.btn_note_c: sampleID[3] = mSoundPool.play(soundID[3], volume, volume, 1, 0, 1f); starttime(3); teststring[z] = "c"; break;
                        case R.id.btn_note_d: sampleID[4] = mSoundPool.play(soundID[4], volume, volume, 1, 0, 1f); starttime(4); teststring[z] = "d"; break;
                    }
                }
                else if(event.getAction() == MotionEvent.ACTION_UP)
                {
                    startMeantime();
                    switch(v.getId())
                    {
                        case R.id.btn_note_g: mSoundPool.stop(sampleID[0]); stoptime(0); testlong[z] = getTimeDifference(time[0][0], time[0][1]); z++; break;
                        case R.id.btn_note_a: mSoundPool.stop(sampleID[1]); stoptime(1); testlong[z] = getTimeDifference(time[1][0], time[1][1]); z++; break;
                        case R.id.btn_note_h: mSoundPool.stop(sampleID[2]); stoptime(2); testlong[z] = getTimeDifference(time[2][0], time[2][1]); z++; break;
                        case R.id.btn_note_c: mSoundPool.stop(sampleID[3]); stoptime(3); testlong[z] = getTimeDifference(time[3][0], time[3][1]); z++; break;
                        case R.id.btn_note_d: mSoundPool.stop(sampleID[4]); stoptime(4); testlong[z] = getTimeDifference(time[4][0], time[4][1]); z++; break;
                    }
                    //
                    if(z == noten.length)
                    {
                        for(int i = 0; i < noten.length; i++)
                        {
                            //auswertungcache[i] = "Sollton: " +hohohonoten[i]  + " Istton: " + teststring[i] + " Sollzeit: " + duration[i] + " Istzeit: " + testlong[i];
                            auswertungcache[i] ="    " + noten[i] + "              "  + teststring[i] + "            " + duration[i] + "           " + testlong[i] + "     ";
                            if((testlong[i]-duration[i]) < 10 && (testlong[i]-duration[i]) > -10  )
                            {
                                notenlaenge = notenlaenge + "perfekt, ";
                                auswertungcache[i] = auswertungcache[i] + "    perfekt (" + String.valueOf(testlong[i]-duration[i]) +")" ;
                            }else if(testlong[i] > (duration[i] + 100))
                            {
                                notenlaenge = notenlaenge + "zu lang, ";
                                auswertungcache[i] = auswertungcache[i] + "    zu lang (" + String.valueOf(testlong[i]-duration[i]) +")" ;
                            }else if(testlong[i] < (duration[i] - 100))
                            {
                                notenlaenge = notenlaenge + "zu kurz, ";
                                auswertungcache[i] = auswertungcache[i] + "    zu kurz (" + String.valueOf(testlong[i]-duration[i]) +")" ;
                            }else
                            {
                                notenlaenge = notenlaenge + "gut, ";
                                auswertungcache[i] = auswertungcache[i] + "    gut (" + String.valueOf(testlong[i]-duration[i]) +")" ;
                            }
                        }
                        int k = 1;
                        int l = 2;
                        int m = 0;
                        while(m < auswertungcache.length)
                        {
                            auswertung[k] = auswertungcache[m];
                            if(l<auswertung.length)
                            {
                                auswertung[l] = "Zwischenzeit" + (m+1) + ": " + String.valueOf(zwischenzeitenbuffer[m+1]);
                            }
                            k = k + 2;
                            l = l + 2;
                            m++;
                        }
                        //Tonfolge kontrollieren
                        String soll = "";
                        String ist = "";
                        for(int i = 0; i < noten.length; i++)
                        {
                            soll = soll + noten[i];
                            ist = ist + teststring[i];
                            
                        }
                        if(ist.equals(soll))
                        {
                            Toast.makeText(getApplicationContext(), "Richtige Tonfolge!", Toast.LENGTH_SHORT).show();
                        }else
                        {
                            Toast.makeText(getApplicationContext(), "Falsche Tonfolge, nochmal üben!", Toast.LENGTH_SHORT).show();
                            //ist = "";
                        }
                        for( int i = 1; i <= zwischenzeitanzahl; i++)
                        {
                            System.out.println("Zwischenzeit " + i + " :" + zwischenzeitenbuffer[i]);
                        }
                        zwischenzeiten = new long[zwischenzeitanzahl];
                        for(int i = 0; i < zwischenzeiten.length; i++)
                        {
                            zwischenzeiten[i] = zwischenzeitenbuffer[i+1];
                        }
                        if(ping)
                        {
                            //Werte in DB eintragen
                            final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
                            new Thread()
                            {
                                public void run()
                                {
                                    try 
                                    {
                                        dbManager.wertEintragen("pentatoniktest", noten, teststring, duration, testlong, zwischenzeiten);
                                    } catch (Exception e) 
                                    {
                                        e.printStackTrace();
                                    }
                                    
                                }
                            }.start();
                        }
                        Intent intent = new Intent(thisContext, Auswertungstyp.class);
                        intent.putExtra("auswertung", auswertung);
                        intent.putExtra("SOLLNOTEN", noten);
                        intent.putExtra("ISTNOTEN", teststring);
                        intent.putExtra("SOLLTASTZEITEN", duration);
                        intent.putExtra("ISTTASTZEITEN", testlong);
                        startActivity(intent);
                        Intent in2 =  new Intent(thisContext, Auswertung.class);
                        intent.putExtra("auswertung", auswertung);
                        startActivity(intent);
                        z = 0;
                        zwischenzeitnr = 0;
                        ist = "";
                        notenlaenge = "";
                        auswertung = new String[(noten.length * 2)]; //79
                        auswertungcache = new String[noten.length];
                        mainscreenActivity.finish();
                        //cancelTask = true;
                    }
                }
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Tones not loaded!", Toast.LENGTH_LONG).show();
            }
            
            
            return false;
        }
    };

    private void starttime(int x)
    {
        time[x][0] = System.currentTimeMillis();
    }
    private void stoptime(int x)
    {
        time[x][1] = System.currentTimeMillis();
        //System.out.println("" + (z+1) +": " + (time[x][1]-time[x][0]));
    }
    private long getTimeDifference(long start, long end)
    {
        long erg = end-start;
        return erg;
    }
    private void startMeantime()
    {
        zwischenzeit[0] = System.currentTimeMillis();
    }
    private void stopMeantime()
    {
        zwischenzeit[1] = System.currentTimeMillis();
        zwischenzeitenbuffer[zwischenzeitnr] = zwischenzeit[1] - zwischenzeit[0];
        zwischenzeitanzahl = zwischenzeitnr;
        zwischenzeitnr++;
    }
    public void playSong(final View view)
    {
        if(allLoaded())
        {
            Toast.makeText(getApplicationContext(), "jap", Toast.LENGTH_SHORT).show();
            int playid;
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!START");
            for(int i=0;i<hohoho.length;i++)
            {
                if(hohoho[i] == pause)
                {
                    System.out.println("PAUSE!");
                    waitSound(duration2[i]);
                }else
                {
                    playid = mSoundPool.play(soundID[hohoho[i]], 0.5f, 0.5f, 1, 0, 1f);
                    switch (hohoho[i])
                    {
                        case 0: System.out.println("G"); break;
                        case 1: System.out.println("A"); break;
                        case 2: System.out.println("H"); break;
                        case 3: System.out.println("C"); break;
                        case 4: System.out.println("D"); break;
                    }
                    waitSound(duration2[i]);
                    mSoundPool.stop(playid);
                }
                
            }
        }
        else
            Toast.makeText(getApplicationContext(), "ne", Toast.LENGTH_SHORT).show();
    }
    public void auswertungStarten(View view)
    {
        Log.i("Mainscreen","auswertungStarten(view view)");
        Intent in = new Intent(this, AuswertungsChartActivity.class);
        in.putExtra("DBNAME", "pentatoniktest");
        startActivity(in);
    }
    private void waitSound(final long time)
    {
        Thread thread = new Thread(new Runnable() 
        {
            
            @Override
            public void run() 
            {
                try {
                    Thread.sleep(time);
                } catch (InterruptedException e) 
                {
                    e.printStackTrace();
                }
            }
        });
        
        thread.run();
        try {
            thread.join();
        } catch (InterruptedException e) 
        {
            e.printStackTrace();
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        Log.i("Mainscreen","onKeyDown()");
        if (keyCode == KeyEvent.KEYCODE_BACK) 
        {
            this.finish();
            senden.cancel(true);
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
    {
        switch (item.getItemId()) 
        {
 
        case R.id.menu_settings:
            Intent i = new Intent(this, Einstellungen.class);
            startActivityForResult(i, RESULT_SETTINGS);
            break;
 
        }
 
        return true;
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        switch (requestCode) {
        case RESULT_SETTINGS:
            refreshUserSettings();
            break;
 
        }
 
    }
 
    private void refreshUserSettings() 
    {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(this);
        if(sharedPrefs.getString("dbip", "192.168.137.1").equals(""))
        {
            dbManager.HOST = "Http://192.168.137.1:5984/";
            System.out.println("BLUB");
        }else
        {
            dbManager.HOST = "Http://" + sharedPrefs.getString("dbip", "192.168.137.1") + ":5984/";
            System.out.println("DBIP:  " + dbManager.HOST);
        }
        verbindungstest();
    }
    
    public boolean verbindungstest()
    {
        ping = false;
        wait = false;
        //Toast.makeText(getApplicationContext(), "Verbindung zur Datenbank wird geprüft", Toast.LENGTH_LONG).show();
        final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
        new Thread()
        {
            public void run()
            {
                try 
                {
                    URL url = new URL(dbManager.HOST);
                       HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                       urlc.setRequestProperty("User-Agent", "Android Application:");
                       urlc.setRequestProperty("Connection", "close");
                       urlc.setConnectTimeout(2000); // mTimeout is in seconds
                       urlc.connect();
                       if (urlc.getResponseCode() == 200) 
                       {
                           //MainActivity.Log("getResponseCode == 200");
                           ping = true;
                       }
                   } catch (MalformedURLException e1) 
                   {
                       e1.printStackTrace();
                   } catch (IOException e) 
                   {
                       e.printStackTrace();
                   }
                   wait = true;
               }
        }.start();
        while(!wait)
        {                
           }
           if(!ping)
           {
               Toast.makeText(getApplicationContext(), "keine Verbindung zur Datenbank", Toast.LENGTH_LONG).show();
        }
        return ping;
    }
    
    
    
   [U][B] private static class sende extends AsyncTask<String, Void, String>[/B][/U]
    {
        @Override
        protected String doInBackground(String... params) 
        {
            ArduinoCommManager manager = new ArduinoCommManager();
            try 
            {
               [U][B] if(this.isCancelled())
                {
                    return null;
                }[/B][/U]
                manager.pentatonikPiano(6, Inet4Address.getByName(arduinoIP), arduinoPort, messenger);
                Mainscreen.tastzahl = 0;
            } catch (Exception e) 
            {
                e.printStackTrace();
            }
            return null;
        }
    }
}
 
kleinerkathe

kleinerkathe

Experte
Gut, du hältst die Referenz auf den AsyncTask in "senden" (und dein AsyncTask heißt "sende" *rolleyes* ;))

1.Du brauchst diese Überprüfung in doinbackground nicht, da doinbackground nicht andauernd ausgeführt wird, sondern auch nur einmal von oben nach unten :p

2. Dein Asynctask ist in einem Handler? (dein Code ist schon etwas unübersichtlich :( )

3. Du willst den Asynctask beenden nachdem die Activity sich beendet hat... Wenn mich jetzt nicht alles täuscht, wird nach "finish()" nichts mehr aufgerufen ;) Pack das cancel in die onDestroy deiner Activity, da finish (glaub ich) noch ondestroy aufruft.


Warum ist der Handler nicht im AsyncTask?

Und die eigentlich wichtigste Frage: Warum bist du so faul und wirfst uns hier so viel für deine Fragestellung unnötigen Code zum durchschauen hin? ;)
 
Ähnliche Themen - Asynctask beendet sich nicht Antworten Datum
8