我如何使用AsyncTask使用适配器使用WebService填充ListView?

时间:2016-07-22 17:09:27

标签: android android-asynctask android-bitmap listview-adapter

我正在开发一个项目来完成Android-java的技术课程。在我的应用程序中,我有一个部分,它使用WebService一个ArrayList,它使用ArrayAdapter列出所有具有图像的数据库用户。问题是我无法使用这个ArrayAdapter并使用AsyncTask填充列表,在互联网上学习我有点麻烦,以了解它如何真正起作用这个功能。如果有可能我想帮助我进行该调用以及如何使用异步任务使用适配器填充ListView。以下是我的部分代码:

frmListarEstudios.class

public class frmListarEstudios extends AppCompatActivity {
private ListView listEstudio;
private List<Estudio> ests;
private EstudioDAO dao;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listar_estudios);

    dao = new EstudioDAO();
    ests = dao.buscarTodosEstudios();
    listEstudio = (ListView) findViewById(R.id.listEstudios);
    EstudioAdapter estAdp = new EstudioAdapter(this, ests);
    listEstudio.setAdapter(estAdp);
}

这是我的Adapter.class和一些荒谬的失败尝试:

public class EstudioAdapter extends BaseAdapter {
private List<Estudio> ests;
private Context context;

public EstudioAdapter(Context context, List<Estudio> ests){
    this.ests = ests;
    this.context = context;

}


@Override
public int getCount() {
    return ests.size();
}

@Override
public Object getItem(int arg0) {
    return ests.get(arg0);
}

@Override
public long getItemId(int arg0) {
    return ests.get(arg0).getID_ESTUDIO();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rootView = LayoutInflater.from(context).inflate(R.layout.lista_estudios, parent, false);

    ImageView imgLogoEstudio = (ImageView) rootView.findViewById(R.id.imgLogoEstudio);
    TextView txtNomeEstudio = (TextView) rootView.findViewById(R.id.txtNomeEstudio);
    TextView txtCidadeEstudio = (TextView) rootView.findViewById(R.id.txtCidadeEstudio);
    TextView txtSiteEstudio = (TextView) rootView.findViewById(R.id.txtSiteEstudio);
    TextView txtFoneEstudio = (TextView) rootView.findViewById(R.id.txtFoneEstudio);

    Estudio estudioDaVez = ests.get(position);


    txtNomeEstudio.setText(estudioDaVez.getNOME_FANTASIA_ESTUDIO());
    txtCidadeEstudio.setText(estudioDaVez.getCIDADE_ESTUDIO() + "-" + estudioDaVez.getESTADO_ESTUDIO());
    txtSiteEstudio.setText(estudioDaVez.getSITE_ESTUDIO());
    txtFoneEstudio.setText(estudioDaVez.getTELEFONE_ESTUDIO());

    Bitmap bitmap = BitmapFactory.decodeByteArray(estudioDaVez.getLOGO_ESTUDIO(), 0, estudioDaVez.getLOGO_ESTUDIO().length);
    imgLogoEstudio.setImageBitmap(bitmap);

    chamarPegarImagem(estudioDaVez);
    return rootView;
}

private void chamarPegarImagem(Estudio position){
    pegarImagem imagem = new pegarImagem();
    Log.i("AsyncTask", "AsyncTask senado chamado Thread: " + Thread.currentThread().getName());
    imagem.execute(position);
}



private class pegarImagem extends AsyncTask<Estudio, Void, Bitmap> {
    private View view;
    private Bitmap bitmap = null;

    @Override
    protected Bitmap doInBackground(Estudio... params) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(params[0].getLOGO_ESTUDIO(), 0, params[0].getLOGO_ESTUDIO().length);
        Log.d("merda", String.valueOf(bitmap));

        return bitmap;
    }

    protected void onPostExecute(Bitmap bitmap){
        if(bitmap!=null) {

            //getView(imgLogoEstudio.setImageBitmap(bitmap));
            Log.i("AsyncTask", "Exibindo Bitmap Thread: " + Thread.currentThread().getName());
        }else{
            Log.i("AsyncTask", "Erro ao baixar a imagem " + Thread.currentThread().getName());
        }
        Log.i("AsyncTask", "Tirando ProgressDialog da tela Thread: " + Thread.currentThread().getName());
    }
}

这是我的DAO对象:

public class EstudioDAO {

private static final String URL = "http://192.168.1.2:8080/photoprintws/services/EstudioDAO?wsdl";
private static final String NAMESPACE = "http://ws.photoprint.com.br";


private static final String BUSCAR_TODOS = "buscarTodosEstudios";


public List<Estudio> buscarTodosEstudios() {

    List<Estudio> listaEst = new ArrayList<Estudio>();

    SoapObject buscarEstudios = new SoapObject(NAMESPACE, BUSCAR_TODOS);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject(buscarEstudios);

    envelope.implicitTypes = true;

    HttpTransportSE http = new HttpTransportSE(URL);

    try {
        //USAR ISSO ABAIXO PARA EVITAR QUE O KSOAP NÃO FAÇA CONEXÃO E RETORNE VALOR NULO
        //ISSO VAI EVITAR CRASH NO APP!

        ArrayList<HeaderProperty> headerPropertyArrayList = new ArrayList<HeaderProperty>();
        headerPropertyArrayList.add(new HeaderProperty("Connection", "close"));

        http.call("urn:" + BUSCAR_TODOS, envelope, headerPropertyArrayList);

        if (envelope.getResponse() instanceof SoapObject) {
            SoapObject resposta = (SoapObject) envelope.getResponse();

            Estudio est = new Estudio();

            est.setID_ESTUDIO(Integer.parseInt(resposta.getProperty("ID_ESTUDIO").toString()));
            est.setRAZAO_SOCIAL_ESTUDIO(resposta.getProperty("RAZAO_SOCIAL_ESTUDIO").toString());
            est.setNOME_FANTASIA_ESTUDIO(resposta.getProperty("NOME_FANTASIA_ESTUDIO").toString());
            est.setCNPJ_ESTUDIO(resposta.getProperty("CNPJ_ESTUDIO").toString());
            est.setSENHA_ESTUDIO(resposta.getProperty("SENHA_ESTUDIO").toString());
            est.setESTADO_ESTUDIO(resposta.getProperty("ESTADO_ESTUDIO").toString());
            est.setCIDADE_ESTUDIO(resposta.getProperty("CIDADE_ESTUDIO").toString());
            est.setBAIRRO_ESTUDIO(resposta.getProperty("BAIRRO_ESTUDIO").toString());
            est.setRUA_ESTUDIO(resposta.getProperty("RUA_ESTUDIO").toString());
            est.setCEP_ESTUDIO(resposta.getProperty("CEP_ESTUDIO").toString());
            est.setCOMPLEMENTO_ESTUDIO(resposta.getProperty("COMPLEMENTO_ESTUDIO").toString());
            est.setTELEFONE_ESTUDIO(resposta.getProperty("TELEFONE_ESTUDIO").toString());
            est.setEMAIL_ESTUDIO(resposta.getProperty("EMAIL_ESTUDIO").toString());
            est.setSITE_ESTUDIO(resposta.getProperty("SITE_ESTUDIO").toString());
            est.setSALDO_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_ESTUDIO").toString()));
            est.setSALDO_PENDENTE_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_PENDENTE_ESTUDIO").toString()));
            est.setSALDO_BLOQUEADO_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_BLOQUEADO_ESTUDIO").toString()));
            est.setSTATUS_ESTUDIO(Integer.parseInt(resposta.getProperty("STATUS_ESTUDIO").toString()));

            String logoEstudio = resposta.getProperty("LOGO_ESTUDIO").toString();

            byte[] bt = Base64.decode(logoEstudio, Base64.DEFAULT);
            est.setLOGO_ESTUDIO(bt);

            listaEst.add(est);
        } else {
            Vector<SoapObject> retorno = (Vector<SoapObject>) envelope.getResponse();

            for (SoapObject resposta : retorno) {

                Estudio est = new Estudio();

                est.setID_ESTUDIO(Integer.parseInt(resposta.getProperty("ID_ESTUDIO").toString()));
                est.setRAZAO_SOCIAL_ESTUDIO(resposta.getProperty("RAZAO_SOCIAL_ESTUDIO").toString());
                est.setNOME_FANTASIA_ESTUDIO(resposta.getProperty("NOME_FANTASIA_ESTUDIO").toString());
                est.setCNPJ_ESTUDIO(resposta.getProperty("CNPJ_ESTUDIO").toString());
                est.setSENHA_ESTUDIO(resposta.getProperty("SENHA_ESTUDIO").toString());
                est.setESTADO_ESTUDIO(resposta.getProperty("ESTADO_ESTUDIO").toString());
                est.setCIDADE_ESTUDIO(resposta.getProperty("CIDADE_ESTUDIO").toString());
                est.setBAIRRO_ESTUDIO(resposta.getProperty("BAIRRO_ESTUDIO").toString());
                est.setRUA_ESTUDIO(resposta.getProperty("RUA_ESTUDIO").toString());
                est.setCEP_ESTUDIO(resposta.getProperty("CEP_ESTUDIO").toString());
                est.setCOMPLEMENTO_ESTUDIO(resposta.getProperty("COMPLEMENTO_ESTUDIO").toString());
                est.setTELEFONE_ESTUDIO(resposta.getProperty("TELEFONE_ESTUDIO").toString());
                est.setEMAIL_ESTUDIO(resposta.getProperty("EMAIL_ESTUDIO").toString());
                est.setSITE_ESTUDIO(resposta.getProperty("SITE_ESTUDIO").toString());
                est.setSALDO_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_ESTUDIO").toString()));
                est.setSALDO_PENDENTE_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_PENDENTE_ESTUDIO").toString()));
                est.setSALDO_BLOQUEADO_ESTUDIO(Float.parseFloat(resposta.getProperty("SALDO_BLOQUEADO_ESTUDIO").toString()));
                est.setSTATUS_ESTUDIO(Integer.parseInt(resposta.getProperty("STATUS_ESTUDIO").toString()));

                String logoEstudio = resposta.getProperty("LOGO_ESTUDIO").toString();

                byte[] bt = Base64.decode(logoEstudio, Base64.DEFAULT);
                est.setLOGO_ESTUDIO(bt);

                listaEst.add(est);
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    return listaEst;
}

0 个答案:

没有答案