2016-06-23 2 views
0

내 응용 프로그램에서 나는 웹 서버에서 이미지 목록을 성공적으로 검색합니다. 그들은 URL로 읽습니다. iesqlite에 표시 URL 이미지

http://mw2.google.com/mw-panoramio/photos/medium/131093147.jpg 

등등.

이미지를 SQLite 문자열 URL로 저장합니다. 하지만 지금은 그들을 recyclerview에 표시하고 싶습니다.

이것은 내 어댑터입니다.

public class MySQLAdapter extends RecyclerView.Adapter<MySQLAdapter.RowHolderClass> { 

private List<SQLiteModel> myList; 
private Context mContext; 
private int focused; 


public MySQLAdapter(Activity activity,ArrayList<SQLiteModel> ss) { 
    this.myList = ss; 
    this.mContext=activity; 
} 

@Override 
public MySQLAdapter.RowHolderClass onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_row, null); 

    final RowHolderClass holder = new RowHolderClass(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(RowHolderClass holder, int position) { 

    final SQLiteModel listItems = myList.get(position); 
    holder.itemView.setSelected(focused==position); 

    holder.getLayoutPosition(); 

    holder.fName.setText(myList.get(position).getSqliteFirstName()); 
    holder.lName.setText(myList.get(position).getSqliteSecondName()); 
    holder.jobRole.setText(myList.get(position).getSqliteRole()); 
    //holder.imageView.setImageResource(Integer.parseInt(myList.get(position).getSqliteImage())); 
    holder.relativeLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String first_name = listItems.getSqliteFirstName(); 
      String last_name = listItems.getSqliteSecondName(); 
      String job_role = listItems.getSqliteRole(); 
      //String image_url = listItems.get(); 
      //String id= String.valueOf(listItems.getSqliteId()); 
      //Log.v("id",id); 
      Intent i = new Intent(mContext, NoInternetDetailedActivity.class); 
      i.putExtra("firstName",first_name); 
      i.putExtra("lastName",last_name); 
      i.putExtra("jobRole",job_role); 
      //i.putExtra("imageUrl",image_url); 
      //i.putExtra("memberId",id); 
      mContext.startActivity(i); 
     } 
    }); 

} 


@Override 
public int getItemCount() { 
    return myList.size(); 
} 


//ViewHolder pattern used to read the data of the row fast. 
class RowHolderClass extends RecyclerView.ViewHolder { 

    protected NetworkImageView imageView; 
    protected TextView fName, lName, jobRole; 
    protected RelativeLayout relativeLayout; 

    public RowHolderClass(View itemView) { 
     super(itemView); 

     this.relativeLayout = (RelativeLayout) itemView.findViewById(R.id.recLayout); 
     this.imageView = (NetworkImageView) itemView.findViewById(R.id.imageView); 
     this.fName = (TextView) itemView.findViewById(R.id.firstName); 
     this.lName = (TextView) itemView.findViewById(R.id.lastName); 
     this.jobRole = (TextView) itemView.findViewById(R.id.roleView); 

    } 
    } 
} 

내가 그 방법 내부 바이트 배열에 URL 문자열을 변환 할 필요가 있다고 생각

holder.fName.setText(myList.get(position).getSqliteFirstName()); 
holder.lName.setText(myList.get(position).getSqliteSecondName()); 
holder.jobRole.setText(myList.get(position).getSqliteRole()); 

로 onBindViewHolder 내부 데이터의 나머지 부분을 표시 Ι. 나는 잘 모르겠다. 어떤 아이디어?

그리고 다른 것. recyclerview의 행을 클릭하면 다음 예외가 발생합니다.

java.lang.NullPointerException: Attempt to invoke virtual method 
'java.lang.String android.content.Context.getPackageName()' on a null object 
reference 

at android.content.ComponentName.<init>(ComponentName.java:77) 

이것은 내 recyclerview가 이미지없이 보이는 방법입니다.

myimage

public void fetchDataFromDB() { 

    dba = new DatabaseHandler(getApplicationContext()); 

    ArrayList<SQLiteModel> membersDB = dba.getMembersDetails(); 

    for(int i=0; i<membersDB.size();i++){ 
     int id = membersDB.get(i).getSqliteId(); 
     String fname = membersDB.get(i).getSqliteFirstName(); 
     String lname = membersDB.get(i).getSqliteSecondName(); 
     String role = membersDB.get(i).getSqliteRole(); 
     String image = membersDB.get(i).getSqliteImage(); 

     //String desc = moviesFromDB.get(i).getContent(); 
     SQLiteModel f = new SQLiteModel(); 
     f.setSqliteId(id); 
     f.setSqliteFirstName(fname); 
     f.setSqliteSecondName(lname); 
     f.setSqliteRole(role); 
     f.setSqliteImage(image); 
     myarr.add(f); 

    } 
    dba.close(); 
} 

}

+0

NetworkImageView가 있습니다. 현재 사용량이 적어지고 있습니다. Picasa 라이브러리를 사용하여 표준 ImageView +로 변경 한 다음 이미지를로드 할 수 있습니다. imageView); –

+0

이 예외가 발생합니다. java.lang.IllegalArgumentException : 문맥을 null로 할 수 없다 – Theo

+1

시도 : Picasa.with (holder.image View.getContext()). (myList.get (position) .getUrl()). into (holder.image보기); –

답변

1

사용 Picasso

이 다운로드 및 캐시 당신에게 이미지 수 있습니다 아주 간단한 라이브러리이다.

그래서 당신은 당신과 같이 작성해야 경우 :

Picasso.with(mContext) 
.load(myList.get(position).getSqliteImage()) 
.into(holder.imageView); 
+0

예 picasso를 알고 있습니다. 인터넷이 꺼져있을 때 sqlite를 사용하여 recycler 뷰의 데이터를로드합니다. – Theo

+0

나는 picaso가 캐싱을 처리 할 수 ​​있다고 생각한다. 당신은 비트 맵이 아니라 URL로 이미지를 저장한다고하셨습니다. 또한 이것을 고려해보십시오. http://stackoverflow.com/questions/9357668/how-to-store-image-in-sqlite-database –

+0

ok. 그리고 다른 것. 행을 클릭하면 내 질문에 설명 된 예외가 발생합니다. – Theo

0

을 당신이 NetworkImageView을 가지고, 그 현재 적게 사용됩니다. 난 당신이 피카소 라이브러리를 사용하여 + 표준 이미지 뷰로 변경하는 것이 좋습니다 것입니다, 다음으로 이미지를로드 할 수

Picasso.with(holder.image‌​View.getContext()).load(myList.get(position).getUrl()‌​).into(holder.image‌​View); 
0

감사를 마테우스 Pryczkowski

이미지에 대한 대답은 :

Picasso.with(holder.imageView.getContext()) 
      .load(myList.get(position).getSqliteImage()).into(holder.imageView);