2016-09-27 59 views
2

我有一个奇怪的问题。我试图改变一个TextView,但不能findViewById,它说findViewById无法解决。我有一个主要活动,我打电话给AsyncTask(Context context)。在构造函数中,我将它从主要活动传递过来,我已经尝试过使用Main Activity.getContext(),但它仍然不起作用。Android asynctask不会接受上下文

任何帮助,欢迎。

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

需要一些AsyncTask的代码才能帮助 – ganlaw

+0

显示一些代码,但是将Activity上下文传递给AsyncTask并不是一个好主意。容易导致空指针异常和内存泄漏。 –

+0

我用代码 – zomlaaa95

回答

0

你应该做这样的事情,如果你有一个活动,改变onPostExecute TextView的值:

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"); 
     } 
    } 
} 

如果你需要把的AsyncTask在一个单独的文件,你可以回调添加到界面在你的Activity中实现或在实例化过程中将TextView传递给AsyncTask

+0

谢谢,这将工作 – zomlaaa95

+0

@ zomlaaa95我很高兴我帮你:) – MatPag

0

这是在一个片段还是在一个活动?你有没有尝试getApplicationContext()?

+0

可能不是一个片段......“在构造函数中,我从主要活动传递了这个” - 引用了问题。 –

+0

它是在一个普通的阶级,是的,我已经尝试过,它不起作用 – zomlaaa95

0

findViewById不是Context的函数,它是Activity的一个函数。一般来说,您应该直接传递视图而不是一个Activity,并在其上调用findViewById。

+0

我将如何通过主要活动的观点?请给我一些代码请 – zomlaaa95

+0

作为参数在构造函数 –