Android asynctask不接受上下文

时间:2016-09-27 15:12:16

标签: android android-asynctask android-context

我有一个奇怪的问题。我正在尝试更改TextView但不能findViewById,它表示findViewById无法解析。我有一个主要活动,我打电话给AsyncTask(Context context)。在构造函数中,我从main活动传递了这个,我已经尝试过使用Main Activity.getContext(),但它仍然不起作用。

欢迎任何帮助。

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>();

}

3 个答案:

答案 0 :(得分:0)

这是片段还是活动?你试过getApplicationContext()吗?

答案 1 :(得分:0)

findViewById不是Context的一个功能,它是Activity的一个功能。通常你应该直接传入视图而不是Activity,并在其上调用findViewById。

答案 2 :(得分: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