2016-09-27 6 views
2

Ich habe ein seltsames Problem. Ich versuche, eine TextView zu ändern, aber kann nicht findViewById, heißt es, dass die findViewById nicht gelöst werden kann. Ich habe eine Hauptaktivität, von der ich anrufe AsyncTask(Context context). Im Konstruktor übergebe ich dies aus der Hauptaktivität, ich habe es bereits mit Main Activity.getContext() versucht, funktioniert aber immer noch nicht.Android asynctask akzeptiert keinen Kontext

Jede Hilfe ist willkommen.

public class UcitavanjeUpozadini extends AsyncTask<Void, Void, Void> { 

private Context context; 
private ProgressDialog progressDialog; 
private UcitavanjeHelperKlasa helperKlasa; 
private List<OglasHelper> lista; 

public UcitavanjeUpozadini(Context context){ 
    this.context = context; 
    this.progressDialog = null; 
    this.helperKlasa = new UcitavanjeHelperKlasa(); 
    this.lista = new ArrayList<OglasHelper>(); 

} 
+0

Benötigen Sie einen Code für die AsyncTask, um zu helfen – ganlaw

+0

Zeigen Sie etwas Code, jedoch ist es keine gute Idee, einen Aktivitätskontext an eine AsyncTask übergeben .. dies kann führen leicht zu Nullzeigerausnahmen und Speicherlecks. –

+0

Ich habe die Frage mit dem Code – zomlaaa95

Antwort

0

Sie sollten etwas tun, wenn Sie eine Aktivität haben, den Textview-Wert in OnPostExecute ändern:

private MyActivity extends AppCompatActivity { 

    private TextView mTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     mTextView = (TextView) findViewById(R.id.textview); 
     new MyAsyncTask().execute(); 
    } 

    private class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{ 

     @Override 
     protected void onPreExecute(){ 
      mTextView.setText("text changed before background operation"); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params){ 
      //perform your background operations changing the paramaters 
      //and return type accordingly 
      return true; 
     } 

     @Override 
     protected void onPostExecute(Boolean result){ 
      mTextView.setText("text changed after background operation"); 
     } 
    } 
} 

Wenn Sie die AsyncTask in einer separaten Datei setzen müssen, können Sie einen Rückruf an eine Schnittstelle hinzufügen könnten in Ihrer Aktivität implementiert oder die TextView an die AsyncTask während der Instanziierung übergeben

+0

Danke, das wird funktionieren – zomlaaa95

+0

@ zomlaaa95 Ich bin froh, dass ich dir geholfen habe :) – MatPag

0

Ist dies in einem Fragment oder in einer Aktivität? Hast du getApplicationContext() ausprobiert?

+0

Wahrscheinlich kein Fragment ... "Im Konstruktor übergebe ich DIESE von Hauptaktivität" - zitiert aus Frage. –

+0

es ist in einer normalen Klasse, und ja, ich habe es versucht und es funktioniert nicht – zomlaaa95

0

findViewById ist keine Funktion von Context, es ist eine Funktion von Activity. Im Allgemeinen sollten Sie die Ansicht lieber direkt als eine Aktivität übergeben und findViewById darauf aufrufen.

+0

Wie würde ich die Aussicht von der Haupttätigkeit übergeben? Gib mir bitte einen Code – zomlaaa95

+0

Als Parameter im Konstruktor –

Verwandte Themen