1

私は Android プログラミングが初めてで、次のコード スニペットを問題なく使用できるかどうか、またはスタイルの問題があるかどうかを知りたいです。コードはまったく機能します。

public class SelectTeamActivity extends Activity {

    private HashMap<String, String> keyValues;
    private MyXMLHandler xmlHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_team);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        xmlHandler = new MyXMLHandler(this);
        xmlHandler.execute(urlHandler.getUserDataURL());
    }
}

asycncron タスクのカスタム クラスは次のとおりです。

public class MyXMLHandler extends AsyncTask<String, String, String> {

    private String pin;
    SAXParser sp;
    DefaultHandler userData;
    private SelectTeamActivity selectTeamActivity;

    public MyXMLHandler(SelectTeamActivity selectTeamActivity) {
      this.selectTeamActivity = selectTeamActivity;
    }

    public String getPin() {
    return pin;
    }

    @Override
    protected String doInBackground(String... address) {
    try {
        URL url= new URL(address[0]);
        URLConnection yc = url.openConnection();
        SAXParserFactory spf = SAXParserFactory.newInstance();
        sp = spf.newSAXParser();
        userData = new DefaultHandler() {
        public void startElement(String uri, String localName, String qName, Attributes attributes)
            throws SAXException {
            if (localName.equals("entry")) {
            pin = attributes.getValue("pin");
            }
        }

        };
        sp.parse(yc.getInputStream(), userData);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }
    return pin;
    }

    protected void onPostExecute(String result) {
        TextView text = (TextView) selectTeamActivity.findViewById(R.id.textView1);
        text.setText(result);
    }
}

アクティビティ クラス「SelectTeamActivity」の「this」参照を MyXMLHandler コンストラクターに渡し、実行中のタスクの関数「doInBackground」が終了した後に UI を更新します。

これでいいですか?

「AsyncTask クラス内の UI の更新」に関連する他の質問を探していましたが、「AsyncTask」を拡張するクラスが UI アクティビティ クラスの内部クラスとしてのみ実装されているソリューションしか見つかりませんでした。そして、UI へのアクセスはまったく問題ありません。

よろしく

4

0 に答える 0