Solucionado (ver solução)
Solucionado
(ver solução)
16
respostas

Passando caminho de uma pasta dentro do res

Ola estou com um botão que envia um caminho da pasta mipmap, dentro desta pasta tenho uma imagem que sera mostrada em minha activity home, então nao sei como aprontar para pasta mipmap para enchergar a imagem hoje ela aponta assim,

String url_txt = "Android/res/mipmap/ic_launcher";

String url_txt = "// o que eu quero saber o que ponho aqui para ele enxergar a imagem que esta em mipmap";
16 respostas

Olá Wolney,

Não consegui entender a sua dúvida. Você consegue detalhar um pouco mais o que você está tentando fazer?

Geralmente quando queremos nos referenciar a qualquer recurso de pasta res no Android utilizamos a classe R. Por exemplo, se queremos usar a imagem /res/mipmap/ic_launcher, acessamos o atributo correspondente da classe R:

int res_id = R.mipmap.launcher;

A partir daí fica fácil de passar esse recurso como parâmetro para os métodos que consigam trabalhar com ele.

Fiz um botão com o seguinte código, nele eu envio para a próxima activity uma string contendo a url de um imagem, que esta em res/mipmap.

//Botão tipo Outros
        Button botaoOutros = (Button) findViewById(R.id.Tipo_Outros);
        assert botaoOutros != null;
        botaoOutros.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "Android/res/mipmap/ic_launcher";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

Já em outro momento eu recupero essa url para mostrar a imagem que esta lá na pasta do mipmap.

Password password = passwords.get(position);
        View view = convertView;

        LayoutInflater inflater = LayoutInflater.from(context);

        if (convertView == null) {
            view = inflater.inflate(R.layout.item_lista_home, parent, false);
        }


        TextView CampoNome = (TextView) view.findViewById(R.id.item_listanome);
        CampoNome.setText(password.getNome());

        TextView CampoUsuario = (TextView) view.findViewById(R.id.item_listaLogin);
        CampoUsuario.setText(password.getLogin());

        ImageView CampoImagem = (ImageView) view.findViewById(R.id.Imagem_lista_home);
        String CaminhoDaFoto = password.getUrl_caminho();
        if (CaminhoDaFoto != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(CaminhoDaFoto);
            Bitmap reduzirBitmap = Bitmap.createScaledBitmap(bitmap, 65, 65, true);
            CampoImagem.setImageBitmap(reduzirBitmap);
            CampoImagem.setScaleType(ImageView.ScaleType.FIT_XY);
        }
        return view;

espero ter sido mais claro e obrigado pela ajuda.

Olá Wolney,

Geralmente evitamos fazer referência diretamente para o caminho de um recurso da pasta res pois próprio sistema operacional costuma selecionar o recurso mais adequado para o dispositivo com base nas subpastas da res (mais detalhes sobre isso na terceira parte do curso de Android que fala sobre Application Resources). Para resolver o seu problema, você pode trabalhar com o id do recurso ao invés do seu caminho.

Para fazer isso, ao invés de armazenar uma String com a url da imagem, você deve armazenar um int com o id do recurso:

Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

int idDoRecurso = R.mipmap.ic_launcher;
Bundle bundle = new Bundle();

bundle.putInt("id_recurso", idDoRecurso);
vaiProTipoSenha.putExtras(bundle);

startActivity(vaiProTipoSenha);

Na outra Activity ao invés de fazer todo o processo para decodificar um bitmap você pode setar o recurso direto na ImageView, algo parecido com o código abaixo:

ImageView CampoImagem = (ImageView) view.findViewById(R.id.Imagem_lista_home);
int idDoRecurso = password.getIdDoRecurso();
if (idDoRecurso > 0) {
    CampoImagem.setImageResource(idDoRecurso);
    CampoImagem.setScaleType(ImageView.ScaleType.FIT_XY);
}

Ainda assim, se quiser acessar a URI de um recurso da pasta res você pode fazê-lo utilizando o método Uri.parse como no link abaixo:

http://stackoverflow.com/questions/7977348/how-to-get-uri-of-res-folder

fiz desta forma com o id mais ai quando ele vai chamar para abrir a imagem ele acaba informando que aquele int não e um drawable, como faço para referenciar aquele id com a imagem e informar que quero abrir a imagem e não o id?

Olá Wolney,

Deixa eu como ficou o código depois das alterações. Por padrão todo id de um recurso no Android é um int, se você passou o id usando a classe R então não deveria ter problema. Vamos ver o código e tentar achar o que está errado.

Classe Adpter

  public View getView(int position, View convertView, ViewGroup parent) {
        Password password = passwords.get(position);
        View view = convertView;

        LayoutInflater inflater = LayoutInflater.from(context);

        if (convertView == null) {
            view = inflater.inflate(R.layout.item_lista_home, parent, false);
        }


        TextView CampoNome = (TextView) view.findViewById(R.id.item_listanome);
        CampoNome.setText(password.getNome());

        TextView CampoUsuario = (TextView) view.findViewById(R.id.item_listaLogin);
        CampoUsuario.setText(password.getLogin());

        ImageView CampoImagem = (ImageView) view.findViewById(R.id.Imagem_lista_home);
        int CaminhoDaFoto = password.getUrl_caminho();
        if (CaminhoDaFoto > 0) {
          //  Bitmap bitmap = BitmapFactory.decodeFile(CaminhoDaFoto);
          //  Bitmap reduzirBitmap = Bitmap.createScaledBitmap(bitmap, 65, 65, true);
            CampoImagem.setImageResource(CaminhoDaFoto);
            CampoImagem.setScaleType(ImageView.ScaleType.FIT_XY);
        }
        return view;
    }

Botão de tipo de senha

        //Botão tipo Outros
        Button botaoOutros = (Button) findViewById(R.id.Tipo_Outros);
        assert botaoOutros != null;
        botaoOutros.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                int url_txt = R.mipmap.tipo_jogo;
                Bundle bundle = new Bundle();

                bundle.putInt("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

Mensagem de erro

1 20:10:50.980 7674-7674/br.com.inforsoftcom.securitypassword E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    Process: br.com.inforsoftcom.securitypassword, PID: 7674
                                                                                    android.content.res.Resources$NotFoundException: Resource "br.com.inforsoftcom.securitypassword:id/psw_url" (7f0c0083) is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f0c0083}
                                                                                        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2602)
                                                                                        at android.content.res.Resources.loadDrawable(Resources.java:2540)
                                                                                        at android.content.res.Resources.getDrawable(Resources.java:806)
                                                                                        at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:133)
                                                                                        at android.content.Context.getDrawable(Context.java:458)
                                                                                        at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
                                                                                        at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
                                                                                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:201)
                                                                                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191)
                                                                                        at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66)
                                                                                        at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71)
                                                                                        at br.com.inforsoftcom.securitypassword.adpter.SafeAdpter.getView(SafeAdpter.java:69)

ao clicar no botão do tipo de senha outros, ele adiciona o seguinte caminho no campo da url,

"res/mipmap-xxhdpi-v4/tipo_jogo.9.png"

Entendi, só por esse pedaço do código ainda não dá pra encontrar o erro. Coloca aqui o código completo das das classes acima e também a classe Password.

Além disso, a exception que você colou está completa? Se tiver mais alguma coisa dela, posta aqui também pra gente ter mais informações e mais chances de descobrir o que está acontecendo.

Classe TipoSenhaActivity

package br.com.inforsoftcom.securitypassword;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class TipoSenhaActivity extends AppCompatActivity {

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


        //Botão tipo Email
        Button botaoEmail = (Button) findViewById(R.id.Tipo_E_mail);
        assert botaoEmail != null;
        botaoEmail.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_email";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

        //Botão tipo Computador
        Button botaoComputador = (Button) findViewById(R.id.Tipo_PC);
        assert botaoComputador != null;
        botaoComputador.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_pc";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

        //Botão tipo servidor
        Button botaoServidor = (Button) findViewById(R.id.Tipo_Servidor);
        assert botaoServidor != null;
        botaoServidor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, FormularioActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_servidor";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

        //Botão tipo Jogo
        Button botaoJogo = (Button) findViewById(R.id.Tipo_Jogo);
        assert botaoJogo != null;
        botaoJogo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_jogo";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });
        //Botão tipo Pasta
        Button botaoPasta = (Button) findViewById(R.id.Tipo_Pasta);
        assert botaoPasta != null;
        botaoPasta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_pasta";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });
        //Botão tipo Sistema
        Button botaoSistema = (Button) findViewById(R.id.Tipo_Sistema);
        assert botaoSistema != null;
        botaoSistema.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_sistema";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });
        //Botão tipo Rede Socias
        Button botaoRedeSociais = (Button) findViewById(R.id.Tipo_Redes_socias);
        assert botaoRedeSociais != null;
        botaoRedeSociais.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                String url_txt = "@mipmap/tipo_redes_sociais";
                Bundle bundle = new Bundle();

                bundle.putString("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

        //Botão tipo Outros
        Button botaoOutros = (Button) findViewById(R.id.Tipo_Outros);
        assert botaoOutros != null;
        botaoOutros.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiProTipoSenha = new Intent(TipoSenhaActivity.this, pswgenericoActivity.class);

                //Envirando URL pela intent vaiProTipoSenha
                int url_txt = R.mipmap.tipo_jogo;
                Bundle bundle = new Bundle();

                bundle.putInt("url_txt", url_txt);
                vaiProTipoSenha.putExtras(bundle);

                startActivity(vaiProTipoSenha);
            }
        });

    }
}

Classe FormularioActivity

package br.com.inforsoftcom.securitypassword;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import br.com.inforsoftcom.securitypassword.DAO.SecurityDAO;
import br.com.inforsoftcom.securitypassword.password.Password;

public class FormularioActivity extends AppCompatActivity {

    //private SectionsPagerAdapter mSectionsPagerAdapter;

    private FormularioHelp pegaDadosFormulario;

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

        pegaDadosFormulario = new FormularioHelp(this);


        Intent intent = getIntent();
        Password password = (Password) intent.getSerializableExtra("password");
        if (password != null) {
            pegaDadosFormulario.Preencheformulariopsw(password);
        }


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);

        //Botão Salvar do Formulario
        Button botaoSalvar = (Button) findViewById(R.id.formulario_salva);
        assert botaoSalvar != null;
        botaoSalvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(v.getId() == R.id.formulario_salva){
                    ConfirmaSenha();
                }
            }
        });

    }

    private void ConfirmaSenha() {
        EditText servidor = (EditText) findViewById(R.id.formulario_servidor);
        EditText ip = (EditText) findViewById(R.id.formulario_IP);
        EditText login = (EditText) findViewById(R.id.formulario_Login);
        EditText senha = (EditText) findViewById(R.id.formulario_Senha);
        EditText senha_conf = (EditText) findViewById(R.id.formulario_Senha_conf);
        EditText loginRoot = (EditText) findViewById(R.id.formulario_Login_root);
        EditText senhaRoot = (EditText) findViewById(R.id.formulario_Senha_root);
        EditText senhaRootConf = (EditText) findViewById(R.id.formulario_Senha_root_conf);
        EditText url_caminho = (EditText) findViewById(R.id.psw_url);

        String serviorstr = servidor.getText().toString();
        String ipstr = ip.getText().toString();
        String loginstr = login.getText().toString();
        String senhastr = senha.getText().toString();
        String senha_confstr = senha_conf.getText().toString();
        String loginRootstr = loginRoot.getText().toString();
        String senhaRootstr = senhaRoot.getText().toString();
        String senhaRoot_confstr = senhaRootConf.getText().toString();
        int url_caminhostr = url_caminho.getId();

        if(senhastr.equals(senha_confstr) && senhaRootstr.equals(senhaRoot_confstr)){
            //insert nova senha
            Password p = new Password();
            p.setNome(serviorstr);
            p.setIp(ipstr);
            p.setLogin(loginstr);
            p.setSenha(senhastr);
            p.setLoginRoot(loginRootstr);
            p.setSenhaRoot(senhaRootstr);
            p.setUrl_caminho(url_caminhostr);

            inserePassword();
            Toast toast = Toast.makeText(FormularioActivity.this, "Senhas " + p.getNome() + " salva com sucesso!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }else{
            Toast toast = Toast.makeText(FormularioActivity.this, "Senhas não correspondem!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_formulario, menu);
        return true;
    }

    //Botão salvar no canto superior na Action_Bar
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                ConfirmaSenha();
        }

        return super.onOptionsItemSelected(item);
    }

    //Metodo responsavel por inserir novo registro de password
    private void inserePassword() {
        //Instancia Password
        Password password = pegaDadosFormulario.pegaPassword();
        // Aqui instancia o DAO e insere o novo password no banco
        SecurityDAO dao = new SecurityDAO(this);


        if (password.getId() == 0) {

                dao.insere(password);
        } else {
            dao.altera(password);
            Toast toast = Toast.makeText(FormularioActivity.this, "Alteraçõe em " + password.getNome() + " Salva com Sucesso", Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }

        Intent vaiProTipoSenha = new Intent(FormularioActivity.this, HomeActivity.class);
        startActivity(vaiProTipoSenha);

        dao.close();
        finish();
    }


}

Classe SafeAdpter

package br.com.inforsoftcom.securitypassword.adpter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import br.com.inforsoftcom.securitypassword.R;
import br.com.inforsoftcom.securitypassword.password.Password;

/**
 * Created by TI on 16/07/2016.
 */
public class SafeAdpter extends BaseAdapter {
    private final List<Password> passwords;
    private final Context context;

    public SafeAdpter(Context context, List<Password> passwords) {
        this.context = context;
        this.passwords = passwords;
    }

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

    @Override
    public Object getItem(int position) {
        return passwords.get(position);
    }

    @Override
    public long getItemId(int position) {
        return passwords.get(position).getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Password password = passwords.get(position);
        View view = convertView;

        LayoutInflater inflater = LayoutInflater.from(context);

        if (convertView == null) {
            view = inflater.inflate(R.layout.item_lista_home, parent, false);
        }


        TextView CampoNome = (TextView) view.findViewById(R.id.item_listanome);
        CampoNome.setText(password.getNome());

        TextView CampoUsuario = (TextView) view.findViewById(R.id.item_listaLogin);
        CampoUsuario.setText(password.getLogin());

        ImageView CampoImagem = (ImageView) view.findViewById(R.id.Imagem_lista_home);
        int CaminhoDaFoto = password.getUrl_caminho();
        if (CaminhoDaFoto > 0) {

//Esta e a linha 65 que reclama no erro.
CampoImagem.setImageResource(CaminhoDaFoto);
            CampoImagem.setScaleType(ImageView.ScaleType.FIT_XY);
        }
        return view;
    }
}

Classe Password

package br.com.inforsoftcom.securitypassword.password;

import java.io.Serializable;

/**
 * Created by Wolney on 27/04/2016.
 */
public class Password implements Serializable{

    //Pegando os dados digitados
    private long id;
    private String nome;
    private String ip;
    private String login;
    private String senha;
    private String loginRoot;
    private String senhaRoot;
    private int url_caminho;


    public Password() {
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getLoginRoot() {
        return loginRoot;
    }

    public void setLoginRoot(String loginRoot) {
        this.loginRoot = loginRoot;
    }

    public String getSenhaRoot() {
        return senhaRoot;
    }

    public void setSenhaRoot(String senhaRoot) {
        this.senhaRoot = senhaRoot;
    }

    public int getUrl_caminho() { return url_caminho; }

    public void setUrl_caminho(int url_caminho) {
        this.url_caminho = url_caminho;
    }

    @Override
    public String toString() {
        return getId()+" - "+getNome();
    }
}

Mensagem de erro completa


                                                                                    --------- beginning of crash
08-12 11:18:29.084 2947-2947/br.com.inforsoftcom.securitypassword E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    Process: br.com.inforsoftcom.securitypassword, PID: 2947
                                                                                    android.content.res.Resources$NotFoundException: Resource "br.com.inforsoftcom.securitypassword:id/psw_url" (7f0c0083) is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f0c0083}
                                                                                        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2602)
                                                                                        at android.content.res.Resources.loadDrawable(Resources.java:2540)
                                                                                        at android.content.res.Resources.getDrawable(Resources.java:806)
                                                                                        at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:133)
                                                                                        at android.content.Context.getDrawable(Context.java:458)
                                                                                        at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
                                                                                        at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
                                                                                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:201)
                                                                                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191)
                                                                                        at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66)
                                                                                        at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71)
                                                                                        at br.com.inforsoftcom.securitypassword.adpter.SafeAdpter.getView(SafeAdpter.java:69)
                                                                                        at android.widget.AbsListView.obtainView(AbsListView.java:2346)
                                                                                        at android.widget.ListView.measureHeightOfChildren(ListView.java:1280)
                                                                                        at android.widget.ListView.onMeasure(ListView.java:1188)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)
                                                                                        at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                                        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                                        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                                                                                        at android.view.View.measure(View.java:18788)
                                                                                        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                                                                                        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                                                                                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                                                                                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                                        at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                                        at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Ch

Olá Wolney,

Aparentemente nessa classes não tem nada errado mas notei que você está passando os dados para a Activity pswgenericoActivity. Vamos dar uma olhada nessa classe também, talvez o problema esteja nela.

Além disso, gostaria de ver também a classe que está fazendo uso do SafeAdaptr. Postei aqui a classe que instancia essa adapter e o associa a uma lista.

package br.com.inforsoftcom.securitypassword;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import br.com.inforsoftcom.securitypassword.DAO.SecurityDAO;
import br.com.inforsoftcom.securitypassword.password.Password;

public class pswgenericoActivity extends AppCompatActivity {

    private pswgenericohelp pegaDadospsw;

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

        pegaDadospsw = new pswgenericohelp(this);

        Intent intent = getIntent();
        Password password = (Password) intent.getSerializableExtra("password");
        if (password != null) {
            pegaDadospsw.Preencherpsw(password);
        }

        //Botão Salvar do Formulario
        Button botaoSalvar = (Button) findViewById(R.id.Btn_psw_salva);
        assert botaoSalvar != null;
        botaoSalvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(v.getId() == R.id.Btn_psw_salva){
                    ConfirmaSenha();
                }
            }
        });

        //dados erdados da activity anterior
        Intent intenturl = getIntent();
        Bundle bundle = intenturl.getExtras();

        int txt_url_foto = bundle.getInt("url_txt");
        EditText url_foto = (EditText) findViewById(R.id.psw_url);
        url_foto.setText(txt_url_foto);

    }


    private void ConfirmaSenha() {
        EditText nome = (EditText) findViewById(R.id.psw_Nome);
        EditText login = (EditText) findViewById(R.id.psw_Login);
        EditText senha = (EditText) findViewById(R.id.psw_Senha);
        EditText senha_conf = (EditText) findViewById(R.id.psw_Senha_conf);
        EditText url_caminho = (EditText) findViewById(R.id.psw_url);

        String nomestr = nome.getText().toString();
        String loginstr = login.getText().toString();
        String senhastr = senha.getText().toString();
        String senha_confstr = senha_conf.getText().toString();
        int url_caminhostr = url_caminho.getId();

        if(senhastr.equals(senha_confstr)){
            //insert nova senha
            Password p = new Password();
            p.setNome(nomestr);
            p.setLogin(loginstr);
            p.setSenha(senhastr);
            p.setUrl_caminho(url_caminhostr);


            inserePassword();
            Toast toast = Toast.makeText(pswgenericoActivity.this, "Senhas " + p.getNome() + " salva com sucesso!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }else{
            Toast toast = Toast.makeText(pswgenericoActivity.this, "Senhas não correspondem!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }
    }


    private void inserePassword() {
        //Instancia Password
        Password password = pegaDadospsw.pegaPassword();
        // Aqui instancia o DAO e insere o novo aluno no banco
        SecurityDAO dao = new SecurityDAO(this);
        if (password.getId() == 0) {
            dao.insere(password);
        } else {
            dao.altera(password);
            Toast toast = Toast.makeText(pswgenericoActivity.this, "Alteraçõe em " + password.getNome() + " Salva com Sucesso", Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 200);
            toast.show();
        }
        Intent vaiProTipoSenha = new Intent(pswgenericoActivity.this, HomeActivity.class);
        startActivity(vaiProTipoSenha);

        dao.close();
        finish();
    }
}

Referente a lista criada para exibir os password faço ela na DAO

package br.com.inforsoftcom.securitypassword.DAO;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.NonNull;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import br.com.inforsoftcom.securitypassword.login.Login;
import br.com.inforsoftcom.securitypassword.password.Password;

/**
 * Created by Wolney on 28/04/2016.
 */
public class SecurityDAO extends SQLiteOpenHelper {


    public SecurityDAO(Context context) {
        super(context, "securitypassword", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String sql1 = "create table pswservidor" +
                "(" +
                "id INTEGER PRIMARY KEY autoincrement, " +
                "nomeServidor TEXT NOT NULL, " +
                "ip TEXT, " +
                "Login TEXT NOT NULL, " +
                "senha TEXT NOT NULL, " +
                "loginRoot TEXT, " +
                "senhaRoot TEXT, " +
                "urlcaminho TEXT" +
                ")";

        String sql2 = "create table usuario" +
                "(" +
                "id INTEGER PRIMARY KEY autoincrement, " +
                "nome TEXT NOT NULL, " +
                "pass TEXT NOT NULL" +
                ")";

        db.execSQL(sql1);
        db.execSQL(sql2);
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS pswservidor";
        String sql1 = "DROP TABLE IF EXISTS usuario";
        db.execSQL(sql);
        db.execSQL(sql1);
        onCreate(db);
    }


    public List<Password> buscaSenha() {
        String sql = "SELECT * FROM pswservidor;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);

        List<Password> listpassword = new ArrayList<Password>();
        while (c.moveToNext()) {
            Password password = new Password();
            password.setId(c.getLong(c.getColumnIndex("id")));
            password.setNome(c.getString(c.getColumnIndex("nomeServidor")));
            password.setIp(c.getString(c.getColumnIndex("ip")));
            password.setLogin(c.getString(c.getColumnIndex("Login")));
            password.setSenha(c.getString(c.getColumnIndex("senha")));
            password.setLoginRoot(c.getString(c.getColumnIndex("loginRoot")));
            password.setSenhaRoot(c.getString(c.getColumnIndex("senhaRoot")));
            password.setUrl_caminho(c.getInt(c.getColumnIndex("urlcaminho")));

            listpassword.add(password);
        }
        c.close();
        return listpassword;
    }

    public List<Login> buscaSenhaAdmin() {
        String sql = "SELECT * FROM usuario;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);

        List<Login> listLogin = new ArrayList<Login>();
        while (c.moveToNext()) {
            Login login = new Login();
            login.setId(c.getInt(c.getColumnIndex("id")));
            login.setNome(c.getString(c.getColumnIndex("nome")));
            login.setPass(c.getString(c.getColumnIndex("pass")));

            listLogin.add(login);
        }
        c.close();
        return listLogin;
    }

 ...

    @NonNull
    private ContentValues DadosPassword(Password password) {
        ContentValues dados = new ContentValues();

        dados.put("nomeServidor", password.getNome());
        dados.put("ip", password.getIp());
        dados.put("Login", password.getLogin());
        dados.put("senha", password.getSenha());
        dados.put("loginRoot", password.getLoginRoot());
        dados.put("senhaRoot", password.getSenhaRoot());
        dados.put("urlcaminho", password.getUrl_caminho());

        return dados;
    }

 ...
}

Acho que vou precisar do seu projeto inteiro. Você consegue zipar o seu projeto e subir ele Dropbox ou alternativa similar? Assim fica mais fácil pois consigo baixar e testar na minha máquina.

posso te enviar privado ?? eu tenho Google drive, posso te passar por lá o projeto.

Pode enviar no e-mail jeferson.silva@caelum.com.br

enviei o e-mail titulo "link de compartilhamento"

solução!

Olá Wolney,

Agora com o código ficou mais fácil e entendi direitinho o que você estava precisando fazer.

Para atingir seu objetivo vamos trabalhar mesmo com String assim como você estava fazendo no começo. Então quando for popular o bundle vamos passar o endereço do recurso que queremos acessar mas da forma como o Android costuma trabalhar:

String url_txt = "@mipmap/tipo_jogo";
Bundle bundle = new Bundle();
bundle.putString("url_txt", url_txt);

Agora quando você receber isso no adapter, vamos ter que converter esse endereço para um id de recurso. Para fazer isso usamos o código abaixo:

String CaminhoDaFoto = password.getUrl_caminho();
if (CaminhoDaFoto != null) {
    int resourceId = context.getResources().getIdentifier(CaminhoDaFoto, null, context.getPackageName());
    CampoImagem.setImageResource(resourceId);
    CampoImagem.setScaleType(ImageView.ScaleType.FIT_XY);
}

Fiz o teste aqui com o seu código e deu tudo certo com exceção de algumas das imagens que não são apresentadas corretamente mas acredito que aí seja pelo fato das imagens terem sido criadas como 9 patches e estarem na pasta mipmap.

Geralmente utilizamos esta pasta somente para os ícones do aplicativo. Além disso, só devemos utilizar 9 patches (arquivos terminados em .9.png) quando estamos trabalhando com imagens para botões ou janelas.

Recomendo que você coloque suas imagens na pasta drawable em formato normal mesmo.

Jeferson Silva

Muito, mais muito obrigado, só estava faltando isso para poder lança o App, vou estar postando esses dias na play Store, meu primeiro App feito somente com aulas do Alura, por isso que sempre indico os cursos alura.