私は 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 へのアクセスはまったく問題ありません。
よろしく