Использование Java (Android Studio)Как отправить данные тему UiThread с помощью обработчика и прослушивания нити для ответа
У меня есть эта нить
void obtenerDatosBackground() {
Thread EnviarCoordenadasHilo = new Thread(new Runnable() {
public void run() {
obtenerDatos();
}
});
statusSync.CheckConnection(EnviarCoordenadasHilo);
}
и у меня есть это в моем коде:
void configHandler()
{
//con esto le digo al handler que esta adjuntado a la UI
handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
}
но я не знаю, как установить этот обработчик на поток.
Наконец я использую для слушателя результат получить и обновить пользовательский интерфейс, но я получил это сообщение:
Только оригинальный поток, созданный вид иерархии может коснуться ее взглядов.
Я прочитал (немного) о handler, но как я могу установить обработчик (не UI) нить для обновления пользовательского интерфейса, когда я получил результат
У меня есть изменить код, чтобы это, но это пока не работает
void obtenerDatosBackground()
{
Thread EnviarCoordenadasHilo = new Thread(new Runnable() {
public void run() {
obtenerDatos();
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() { //do what you want to do here
int uno=1;
}
});
}
});
statusSync.CheckConnection(EnviarCoordenadasHilo);
}
ПОМНИТЕ Я использую слушатель для ответа потока
void setmListado()
{
adapter = new VehiculoAdapter(getActivity(), mListado);
lvListado.setAdapter(adapter);
lvListado.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
vehicleObject = (Vehiculo) adapter.getItem(i);
edtEconomicNumber=vehicleObject.getNumeroEconomico();
if(mListener!=null)
mListener.onDismissResult(vehicleObject,edtEconomicNumber);
else
Log.w(getTag(),"Falta implementar OnFragmentInteractionListener");
dismiss();
}
});
txtBuscar.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
//f_car_listado.this.adapter.getFilter().filter(arg0);
//boolean uno=false;
if (count < before) {
// We're deleting char so we need to reset the adapter data
adapter.resetData();
}
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
здесь я получил Отвечаю от резьбы
@Override
public void onFragmentFinished(boolean terminoBien, List<VehiculoResponseDTO> listado) {
dialogFragment.dismiss();
if(terminoBien)
{
if(listado.size()>0) {
mListado = ListadoDTOaVehiculos(listado);
//adapter = new VehiculoAdapter(getActivity(), mListado);
//lvListado.setAdapter(adapter);
setmListado();
//adapter.notifyDataSetChanged();
}
else {
this.dismiss();
f_seguimiento.DialogMensaje(getString(R.string.nohayvehiculos), getString(R.string.nohayvehiculosMensaje), true, null, getActivity());
}
}else
{
this.dismiss();
f_seguimiento.DialogMensaje(getString(R.string.ocurrioProblema),getString(R.string.errorVehiculos),true,null,getActivity());
}
}
и в этом коде, где находится нить? – angel
просто назовите приведенный выше код с того места, где вы хотите обновить свое представление. – Ashish
недействительным obtenerDatosBackground() { Thread EnviarCoordenadasHilo = новая тема (новый Runnable() { общественного недействительными запуска() { obtenerDatos(); Обработчик обработчик = новый обработчик (Looper.getMainLooper()); handler.post (новый Runnable() { @Override общественности недействительным запуска() {// делать то, что вы хотите сделать здесь } });} }); statusSync.CheckConnection (EnviarCoordenadasHilo); } – Ashish