AsyncTask Android exemplu

Am citit despre AsyncTask, și am încercat program simplu de mai jos. Dar aceasta nu pare să funcționeze. Cum pot face să funcționeze?

public class AsyncTaskActivity extends Activity {

    Button btn;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener((OnClickListener) this);
    }

    public void onClick(View view){
        new LongOperation().execute("");
    }

    private class LongOperation extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            for(int i=0;i<5;i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("Executed");
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
        }

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }
}

Eu sunt doar încercarea de a schimba eticheta după 5 secunde în procesul de fond.

Acest lucru este meu main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical" >
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminate="false"
        android:max="10"
        android:padding="10dip">
    </ProgressBar>
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Progress" >
    </Button>
    <TextView android:id="@+id/output"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Replace"/>
</LinearLayout>
Comentarii la întrebare (8)

Meu răspuns complet este aici, dar aici este o imagine de motive pentru a suplimenta alte răspunsuri pe această pagină. Pentru mine, înțelegerea în cazul în care toate variabilele au fost partea cea mai confuz la început.

Comentarii (1)
Soluția

Ok sunteți încercarea de a accesa GUI printr-un alt fir. Aceasta, în principal, nu este o bună practică.

La AsyncTask execută tot în doInBackground() în interiorul unui alt fir, care nu au acces la GUI în cazul în care opiniile dumneavoastră sunt.

preExecute () " și " postExecute() vă oferă acces la GUI înainte și după ridicarea grele apare în acest nou fir, puteți trece chiar și rezultatul din operațiuni de lungă pentru a postExecute() apoi afișa rezultate din prelucrare.

A se vedea aceste linii în cazul în care sunteți mai târziu actualizarea TextView:

TextView txt = findViewById(R.id.output);
txt.setText("Executed");

le-a pus într onPostExecute()

Veți vedea apoi TextView text actualizat după doInBackground completeaza.

EDIT: am observat că onClick ascultător nu a verifica pentru a vedea ce punct de Vedere a fost selectat. Am găsit cel mai simplu mod de a face acest lucru este prin intermediul unui comutator declarații. Am o completați clasa editate de mai jos cu toate sugestiile pentru a salva confuzie.

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings.System;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class AsyncTaskActivity extends Activity implements OnClickListener {

    Button btn;
    AsyncTask<?, ?, ?> runningTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = findViewById(R.id.button1);
        // because we implement OnClickListener we only have to pass "this"
        // (much easier)
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        // detect the view that was "clicked"
        switch (view.getId()) {
        case R.id.button1:
            if (runningTask != null) runningTask.cancel(true);
            runningTask = new LongOperation();
            runningTask.execute();
            break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // cancel running task(s) to avoid memory leaks
        if (runningTask != null) runningTask.cancel(true);
    }

    private final class LongOperation extends AsyncTask {

        @Override
        protected String doInBackground(Void... params) {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // we were cancelled, stop sleeping!
                }
            }
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("Executed"); // txt.setText(result);
            // might want to change "executed" for the returned string passed
            // into onPostExecute() but that is upto you
        }
    }
}
Comentarii (11)

Am'sunt sigur că acesta este de executare în mod corespunzător, dar're încercarea de a schimba elemente de UI în fir de fundal și că a câștigat't face.

Revizuirea apel și AsyncTask, după cum urmează:

De Asteptare Clasa

Notă: personal, am sugerăm să utilizați onPostExecute() oriunde te executa AsyncTask fir și nu în clasa care extinde AsyncTask în sine. Cred că asta face codul mai ușor de citit, mai ales dacă ai nevoie de AsyncTask în mai multe locuri de manipulare cele rezultate ușor diferite.

new LongThread() {
    @Override public void onPostExecute(String result) {
        TextView txt = (TextView) findViewById(R.id.output);
        txt.setText(result);
    }
}.execute("");

LongThread clasa (se extinde AsyncTask):

@Override
protected String doInBackground(String... params) {
    for (int i = 0; i < 5; i++) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    return "Executed";
}      
Comentarii (2)

[Noțiunea și codul de aici][1]

Am creat un simplu exemplu pentru utilizarea AsyncTask de Android. Acesta începe cu onPreExecute(), doInBackground(), publishProgress() și în cele din urmă onProgressUpdate().

În acest doInBackground() funcționează ca un fir de fundal, în timp ce alte lucrări în Firul UI. Puteți't a accesa un element de UI în doInBackground(). Secvența este aceeași ca le-am menționat.

Cu toate acestea, dacă aveți nevoie pentru a actualiza orice widget din doInBackground poti publishProgress "de la" doInBackground care va suna onProgressUpdate să actualizați UI widget.


class TestAsync extends AsyncTask {
    String TAG = getClass().getSimpleName();

    protected void onPreExecute() {
        super.onPreExecute();
        Log.d(TAG + " PreExceute","On pre Exceute......");
    }

    protected String doInBackground(Void...arg0) {
        Log.d(TAG + " DoINBackGround", "On doInBackground...");

        for (int i=0; i
Comentarii (1)

Muta aceste două linii:

TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed");

din AsyncTask's doInBackground metoda și le-a pus în onPostExecute metoda. Ta AsyncTask ar trebui să arate ceva de genul asta:

private class LongOperation extends AsyncTask {

    @Override
    protected String doInBackground(String... params) {
        try {
            Thread.sleep(5000); // no need for a loop
        } catch (InterruptedException e) {
            Log.e("LongOperation", "Interrupted", e);
            return "Interrupted";
        }
        return "Executed";
    }      

    @Override
    protected void onPostExecute(String result) {               
        TextView txt = (TextView) findViewById(R.id.output);
        txt.setText(result);
    }
}
Comentarii (2)

Fundal / Teoria

AsyncTask vă permite să rulați o sarcină pe un fir de fundal, în timp ce publicarea rezultatelor la firul UI.

utilizatorul ar trebui să întotdeauna capabil să interacționeze cu aplicația astfel încât este important pentru a evita blocarea principal (UI) ață cu sarcini, cum ar fi descărcarea de conținut de pe web.

Acest lucru este de ce am folosi un AsyncTask.

Acesta oferă o interfață simplă de ambalaj firul UI coadă de mesaje și handler care vă permit să trimiteți și procesul runnable obiecte și mesaje de la alte fire.

Punerea în aplicare

AsyncTask este o clasă generică. (Este nevoie de tipuri parametrizate în constructor.)

Se folosește de aceste trei tipuri generice:

Params - tipul de parametrii trimis la sarcina la executare.

"Progres" - tipul de progresul unități publicate în fundal de calcul.

"Rezultat" - tipul de rezultatul de fundal de calcul.

Nu toate tipurile sunt întotdeauna folosite de o sarcină asincron. Pentru a marca un tip ca neutilizate, pur și simplu utilizați tip Void:

privat clasă MyTask se extinde AsyncTask<Gol, Gol, Gol> { ... }

Acești trei parametri corespund trei funcții principale puteți suprascrie în AsyncTask:

  • doInBackground(Params...)
  • onProgressUpdate(Progress...)
  • onPostExecute(Rezultat)

Pentru a executa AsyncTask

  • Apel execute() cu parametrii pentru a fi trimis la sarcină de fundal.

Ce Se Întâmplă

  1. Pe main/UI fir, onPreExecute() este numit.
  • Pentru a inițializa ceva in acest thread. (E. g. arată o bară de progres pe interfața-utilizator.)
  1. Pe un fir de fundal, doInBackground(Params...) este numit.
  • (Params au trecut prin "execute".)

  • Unde lungă durată, sarcina ar trebui să se întâmple.

  • Trebuie să suprascrie cel puțin doInBackground() pentru a utiliza AsyncTask.

  • Apel publishProgress(Progress...) pentru a actualiza interfața cu utilizatorul cu un display de progres (de exemplu, UI animație sau log text tipărit), în timp ce fondul de calcul este încă de executare.

  • Cauze onProgressUpdate() să fie numit.
  1. Pe fir de fundal rezultat este returnat la doInBackground()`.
  • (Aceasta declanșează următorul pas.)
  1. Pe main/UI fir, onPostExecute() este numit cu rezultatul întors.

Exemple

În ambele exemple "blocarea sarcina" este o descărcare de pe web.

  • Exemplu descărcări o imagine și îl afișează într-un ImageView, în timp ce
  • Exemplu B descărcări unele fișiere.

Un Exemplu

Anii doInBackground() metoda popularitate imaginea și o stochează într-un obiect de tip BitMap. Anii onPostExecute() metoda ia bitmap și locuri în ImageView.

class DownloadImageTask extends AsyncTask {
    ImageView bitImage;

    public DownloadImageTask(ImageView bitImage) {
        this.bitImage = bitImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mBmp = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mBmp = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mBmp;
    }

    protected void onPostExecute(Bitmap result) {
        bitImage.setImageBitmap(result);
    }
}

Exemplu B

 private class DownloadFilesTask extends AsyncTask {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

Exemplu B executie

new DownloadFilesTask().execute(url1, url2, url3);
Comentarii (2)

Atunci când o sarcină asincron este executat, sarcina trece prin 4 etape:

  1. onPreExecute()
  2. doInBackground(Params...)
  3. onProgressUpdate(Curs...)
  4. onPostExecute(Urmare)

Mai jos este un exemplu demo

private class DownloadFilesTask extends AsyncTask {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

și odată ce ai creat, o sarcină este executat foarte simplu:

 new DownloadFilesTask().execute(url1, url2, url3);

Sper acest lucru vă va ajuta...

Comentarii (1)

Mai scurt exemplu pentru a face ceva în mod asincron:

class MyAsyncTask extends android.os.AsyncTask {
    @Override
    protected Object doInBackground(Object[] objects) {
        //do something asynchronously
        return null;
    }
}

Să-l rulați:

(new MyAsyncTask()).execute();
Comentarii (0)

Cum de a memora parametrii utilizați în AsyncTask?

Nu't

Dacă sunteți nou la AsyncTask atunci este foarte frecvente pentru a obține confuz în timp ce scrieți un AsyncTask. Principalii vinovați sunt parametrii utilizați în AsyncTask ie AsyncTask<a,B,C>. Pe baza a,B,C (argumente) semnătura metodele diferă, ceea ce face treaba chiar mai confuze.

Păstrați-l simplu!

Cheia este de Don't memorează. Dacă poți să vizualizezi ce sarcina dumneavoastră într-adevăr nevoie pentru a face atunci scrie AsyncTask cu semnătura corectă la prima încercare ar fi o bucată de tort. Doar dau seama ce dvs. de Intrare, de Progres și de Ieșire și veți fi bine să plec.

Deci, ce este un AsyncTask?

AsyncTask sunt sarcină de fundal care rula în fundal fir. Este nevoie de un Introducere, efectuează Progresul și dă Ieșire.

ie AsyncTask<Input,de Progres,de Ieșire>.

De exemplu:

Ce este relația cu metode ?

Între AsyncTask " și " doInBackground()

doInBackground () " și " onPostExecute(),onProgressUpdate()` sunt, de asemenea, legate

Cum să scrie asta in codul?

DownloadTask extends AsyncTask{

  // Always same signature
  @Override
  public void onPreExecute()
  {}

  @Override
  public String doInbackGround(String... params)
  {
           // Download code
           int downloadPerc = // calculate that
           publish(downloadPerc);

           return "Download Success";
  }

  @Override
  public void onPostExecute(String result)
  {
      super.onPostExecute(result);
  }

  @Override
  public void onProgressUpdate(Integer... params)
  {
         // show in spinner, access UI elements
  }

}

Cum va executa această Sarcină?

new DownLoadTask().execute("Paradise.mp3");
Comentarii (0)

Atunci când sunt în fir de lucrător, nu se poate manipula direct de elemente de UI pe Android.

Atunci când utilizați AsyncTask vă rugăm să înțelegeți metode callback.

De exemplu:

public class MyAyncTask extends AsyncTask{

    @Override
    protected void onPreExecute() {
        // Here you can show progress bar or something on the similar lines.
        // Since you are in a UI thread here.
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        // After completing execution of given task, control will return here.
        // Hence if you want to populate UI elements with fetched data, do it here.
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
        // You can track you progress update here
    }

    @Override
    protected Void doInBackground(Void... params) {
        // Here you are in the worker thread and you are not allowed to access UI thread from here.
        // Here you can perform network operations or any heavy operations you want.
        return null;
    }
}

FYI: Pentru a accesa UI fir de la un lucrător fir, puteți utiliza fie runOnUiThread() metoda a sau metoda post pe punctul dumneavoastră de vedere.

De exemplu:

runOnUiThread(new Runnable() {
    textView.setText("something.");
});

or
    yourview.post(new Runnable() {
    yourview.setText("something");
});

Acest lucru vă va ajuta să știți lucrurile mai bine. Prin urmare, în caz, aveți nevoie pentru a seta textview în onPostExecute() metodă.

Comentarii (0)

Mi-ar recomanda de a face viața mai ușoară de a utiliza această bibliotecă pentru fundal funcționează https://github.com/Arasthel/AsyncJobLibrary

acest simplu..

AsyncJob.doInBackground(new AsyncJob.OnBackgroundJob() {

    @Override
    public void doOnBackground() {
        startRecording();
    }
});
Comentarii (0)

Proba Asincron Sarcina cu cerere POST:

List params = new ArrayList();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key1", "value2"));
new WEBSERVICEREQUESTOR(URL, params).execute();

class WEBSERVICEREQUESTOR extends AsyncTask
{
    String URL;
    List parameters;

    private ProgressDialog pDialog;

    public WEBSERVICEREQUESTOR(String url, List params)
    {
        this.URL = url;
        this.parameters = params;
    }

    @Override
    protected void onPreExecute()
    {
        pDialog = new ProgressDialog(LoginActivity.this);
        pDialog.setMessage("Processing Request...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params)
    {
        try
        {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpEntity httpEntity = null;
            HttpResponse httpResponse = null;

            HttpPost httpPost = new HttpPost(URL);

            if (parameters != null)
            {
                httpPost.setEntity(new UrlEncodedFormEntity(parameters));
            }
            httpResponse = httpClient.execute(httpPost);

            httpEntity = httpResponse.getEntity();
            return EntityUtils.toString(httpEntity);

        }  catch (Exception e)
        {

        }
        return "";
    }

    @Override
    protected void onPostExecute(String result)
    {
        pDialog.dismiss();

        try
        {

        }
        catch (Exception e)
        {

        }
        super.onPostExecute(result);
    }
}
Comentarii (0)
 private class AsyncTaskDemo extends AsyncTask {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading...");
        progressDialog.setCancelable(false);
        progressDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {

        //do code here 

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }

    }

    @Override
    protected void onCancelled() {

        super.onCancelled();
        progressDialog.dismiss();
        Toast toast = Toast.makeText(getActivity(),
                "Error is occured due to some probelm", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.TOP, 25, 400);
        toast.show();

    }

}
Comentarii (0)

Pur și simplu:

LongOperation MyTask = new LongOperation();
MyTask.execute();
Comentarii (0)

Ai nevoie de a declara butonul onclicklistener, odată ce faceți clic pe se solicită clasa AsyncTask DownloadJson ,procesul va fi prezentat mai jos:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn = (Button) findViewById(R.id.button1);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             new DownloadJson().execute();
            }
        });

    }

     // DownloadJSON AsyncTask
    private class DownloadJson extends AsyncTask {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected  Void doInBackground(Void... params) {
            newlist = new ArrayList();
             json = jsonParser.makeHttpRequest(json, "POST");
            try {
                newarray = new JSONArray(json);
                    for (int i = 0; i < countdisplay; i++) {
                        HashMap eachnew = new HashMap();
                        newobject = newarray.getJSONObject(i);
                        eachnew.put("id", newobject.getString("ID"));
                        eachnew.put("name", newobject.getString("Name"));
                        newlist.add(eachnew);
                    }
                }
            } catch (JSONException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {
            newlisttemp.addAll(newlist);
            NewAdapterpager newadapterpager = new NewAdapterpager(ProcesssActivitypager.this,newlisttemp);
            newpager.setAdapter(newadapterpager);
        }
    }
Comentarii (0)

În timp ce lucrează cu AsyncTask, este necesar să se creeze o clasă-succesor și în ea pentru a înregistra implementarea de metode necesare pentru noi. În această lecție ne vom uita la trei metode:

doInBackground - va fi executat într-un nou thread, aici vom rezolva toate sarcinile dificile. Deoarece non-fir primar - nu are acces la UI.

onPreExecute - a executat înainte de doInBackground, are acces la UI

onPostExecute - executate după doInBackground (nu funcționează dacă AsyncTask a fost anulat - despre acest lucru în următorul lecții), are acces la UI

Acest MyAsyncTask clasa

class MyAsyncTask extends AsyncTask {

@Override
protected void onPreExecute() {
  super.onPreExecute();
  tvInfo.setText("Start");
}

@Override
protected Void doInBackground(Void... params) {
  //your background method
  return null;
}

@Override
protected void onPostExecute(Void result) {
  super.onPostExecute(result);
  tvInfo.setText("Finish");
}

}

Și acest lucru este cum de a apela în Activitate sau Fragment

MyAsyncTask  myAsyncTask = new MyAsyncTask ();
myAsyncTask.execute();
Comentarii (0)

Proba AsyncTask exemplu cu progresul

import android.animation.ObjectAnimator;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class AsyncTaskActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn;
    ProgressBar progressBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(this);
        progressBar = (ProgressBar)findViewById(R.id.pbar);
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button1:
                new LongOperation().execute("");
                break;
        }
    }

    private class LongOperation extends AsyncTask {

        @Override
        protected String doInBackground(String... params) {
            Log.d("AsyncTask", "doInBackground");
            for (int i = 0; i < 5; i++) {
                try {
                    Log.d("AsyncTask", "task "+(i + 1));
                    publishProgress(i + 1);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.interrupted();
                }
            }
            return "Completed";
        }

        @Override
        protected void onPostExecute(String result) {
            Log.d("AsyncTask", "onPostExecute");
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText(result);
            progressBar.setProgress(0);
        }

        @Override
        protected void onPreExecute() {
            Log.d("AsyncTask", "onPreExecute");
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("onPreExecute");
            progressBar.setMax(500);
            progressBar.setProgress(0);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            Log.d("AsyncTask", "onProgressUpdate "+values[0]);
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("onProgressUpdate "+values[0]);

            ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 100 * values[0]);
            animation.setDuration(1000);
            animation.setInterpolator(new LinearInterpolator());
            animation.start();
        }
    }
}
Comentarii (0)

Asincron Sarcina;

public class MainActivity extends AppCompatActivity {

 private String ApiUrl="your_api";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     MyTask myTask=new MyTask();
     try {
         String result=myTask.execute(ApiUrl).get();
         Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
     } catch (ExecutionException e) {
         e.printStackTrace();
     } catch (InterruptedException e) {
        e.printStackTrace();
     }

  }

   public class MyTask extends AsyncTask{

    @Override
    protected String doInBackground(String... strings) {
        String result="";
        HttpURLConnection httpURLConnection=null;
        URL url;

        try {
            url=new URL(strings[0]);
            httpURLConnection=(HttpURLConnection) url.openConnection();
            InputStream inputStream=httpURLConnection.getInputStream();
            InputStreamReader reader=new InputStreamReader(inputStream);
            result=getData(reader);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    public String getData(InputStreamReader reader) throws IOException{
        String result="";
        int data=reader.read();
        while (data!=-1){
            char now=(char) data;
            result+=data;
            data=reader.read();
        }
        return result;
    }
  }
}
Comentarii (0)

Schimba codul de mai jos:

@Override
protected void onPostExecute(String result) {

    runOnUiThread(new Runnable() {
        public void run() {
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("Executed");
        }
    });
}
Comentarii (1)