0

TextView をコンパイルする AsyncTask を作成しました。これは私がやったことの非常に短い要約です。たくさんの行を削除したので、何も忘れていないことを願っています。

public class MyClass extends RelativeLayout {
        private TextView messageTextView;


    public MyClass(Context context) {
        super(context);
        init(context); }
    public MyClass(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context); }
    public MyClass(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context); }


    private void init(Context context) {
        createLayoutContent();
                run();
    }

    private void createLayoutContent (Context context) {
        this.setLayoutParams(new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, 0));

        messageView = new TextView(context);
        messageView.setText("test");
        this.addView(messageView);
    }

    private void start() {
        new AsyncTask<Void, String, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    String s_message = "test2";
                    messageView.setText(s_message);    **// HERE IS WHERE THE ERROR IS //**
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute();

    }

}

この後、オブジェクトをレイアウトに直接配置します。

    <<...>MyClass
        android:id="@+id/test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
    />

問題は、一部のアプリではこれが完全に機能することです。アクティビティが実行されるとすぐに、setContentView() が ui オブジェクトを作成し、すべて問題ありません。他のアプリでは、「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできる」というエラーが継続的に表示されます。

このエラーが表示されますが、一部のアプリで正常に動作する理由がわかりません...さらに奇妙なことに、通常はエラーが発生したアプリが突然動作し始め、2回後にエラーに戻ったことがありました。正しい走り!!

これは完全に奇妙です。

エラーを検出するのに詳細が十分ではないことは承知していますので、申し訳ありませんが、考えられるすべての詳細をチェックしましたが、動作する場合と動作しない場合の顕著な違いは見つかりませんでした。より専門的な目で何かを検出したり、何かを説明したり、デバッグする場所を提案したりできるかもしれません。誰かが私を助けることができますか?

どうもありがとうございました。

4

1 に答える 1