0

AsyncTaskクラスでレイアウトからの可視性を変更したいのですTextViewが、致命的なエラーが発生します。のテキスト値を取得したい場合は正常にTextView機能しますが、可視性を設定しようとするとクラッシュします。

// Main Activity (MainActivity.java)
Context MainContext= getApplicationContext();
new MyAsyncTask((TextView)findViewById(R.id.my_text_view)).execute();

// My Async Task (MyAsyncTask.java)
public class MyAsyncTask extends AsyncTask <String, Void, String> {
    private Context context;
private TextView my_text_view;

public MyAsyncTask (TextView my_text_view){
        this.context = MainActivity.MainContext;
    this.txt_loading = my_text_view;
}

@Override
protected String doInBackground(String... params) {
    // TODO Auto-generated method stub
    my_text_view.setVisibility(View.VISIBLE); // crashes
    Log.i("Value: ", String.valueOf(this.my_text_view.getText())); // O.K.!
    return null;
}

@Override
    protected void onPostExecute(String result) {

    }

    @Override
    protected void onPreExecute() {

    }

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

    }

}

どうすればそれを機能させることができますか?また、TextViewコンテキストからを取得できますか?コンストラクターにパラメーターとして送信したくありません。

4

1 に答える 1

5

バックグラウンドスレッドUIで操作しているため、クラッシュします。これは許可されておらず、あなたはそれを行うことができません。

my_text_view.setVisibility(View.VISIBLE);

ユーザーインターフェイスは、元の/メイン/UIからのみ更新/変更できThreadます。AsyncTaskは、UIで実際に実行されるいくつかのメソッドを提供しますThread

これらのメソッドは、UIの更新を実行するという目標を達成するために正確に指定されています。

UIから更新する場合AsyncTaskは、次を使用できます。

  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()
于 2013-03-05T20:23:52.747 に答える