У меня есть активность, где перед показом полей Text/EditText я хочу сделать звонок на сервер, чтобы получить информацию, а затем setText
из полей на основе данные возвращаются с сервера.Как загрузить поля EditText с данными, полученными с сервера
Ниже приведено то, что я делаю, но поля, похоже, не имеют данных, извлеченных с сервера. Я думаю, потому что я вызываю AsyncTask
, который запускается в фоновом режиме, и в то же время поля отображаются пользователю.
Вопрос
Как андроида дело с этим? Какую модель мне следует использовать?
Эта активность вызывается из MainActivity.java
так:
Intent act = new Intent(getApplicationContext(), MySecondActivity.class);
create.putExtra("theId", "138");
startActivity(create);
в MySecondActivity.java
я сделать следующее:
public class MySecondActivity extends SherlockActivity {
private EditText fieldOne;
private EditText fieldTwo;
private MyObj obj = new MyObj();
private int id;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_activity);
fieldOne = (EditText)findViewById(R.id.field_one);
fieldTwo = (EditText)findViewById(R.id.field_two);
id = Integer.parseInt(getIntent().getStringExtra("theId"));
new FetchDetail().execute();
//If I put the below two lines inside the AsyncTask then I get an error:
//"Only the original thread that created a view hierarchy can touch its views."
fieldOne.setText(obj.getOne()); //
fieldTwo.setText(obj.getTwo()); //
}
class FetchDetail extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... strings) {
final RestAdapter restAdapter = new
RestAdapter.Builder().setServer("http://10.0.2.2:8080").build();
final MyTaskService apiManager = restAdapter.create(MyTaskService.class);
final MyObj obj = apiManager.getDetails(id);
return null;
}
}
}