2017-02-05 9 views
0

コンテキストを使用してビューアダプタクラスで共有プリファセンスを取得したいが、nullを返す。View AdapterでSharedPreferencesを取得できません。nullを返します。

私が試したことはある:

は、どのように私は、ログインパラメータがgetitemviewtypeにアダプターを得ることができますか?

私は任意のヘルプが良いでしょう

import static android.preference.PreferenceManager.getDefaultSharedPreferences; 

public class ChattAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private List<Chatt> moviesList; 
    Context context; 
public String loginx; 
    public TextView title, year, genre; 
    public CardView cardViewphoto; 
    public ImageView resim; 
    private static final int TYPE_ITEM0 = 0; 
    private static final int TYPE_ITEM1 = 1; 
    SharedPreferences pref; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView titlem, yearm, genrem; 
     public CardView cardViewphoto; 
     public ImageView resim; 


     public MyViewHolder(View view) { 
      super(view); 

      titlem = (TextView) view.findViewById(R.id.title); 
      genrem = (TextView) view.findViewById(R.id.genre); 
      yearm = (TextView) view.findViewById(R.id.year); 
      resim= (ImageView) view.findViewById(R.id.profile_image); 

     } 

    } 
    class ViewHolder0 extends RecyclerView.ViewHolder { 
     public TextView title, year, genre; 
     public CardView cardViewphoto; 
     public ImageView resim; 


     public ViewHolder0(View v) { 
      super(v); 

      title = (TextView) v.findViewById(R.id.titlesender); 
      genre = (TextView) v.findViewById(R.id.genresender); 
      year = (TextView) v.findViewById(R.id.yearsender); 
      // resim= (ImageView) v.findViewById(R.id.profile_image); 

     } } 



    public ChattAdapter(List<Chatt> moviesList) { 
     this.moviesList = moviesList; 
    } 





    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     context = parent.getContext(); 

     pref =PreferenceManager.getDefaultSharedPreferences(context); 

     //SharedPreferences sharedPreferences = context.getSharedPreferences("FileName", Context.MODE_PRIVATE); 
     loginx = pref.getString("user", null); 
     Log.d("prefsss",loginx.toString()); 
     // login= FirebaseAuth.getInstance().getCurrentUser().toString(); 
     if (viewType == 1){ 
      return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row, parent, false)); 
     } 
     else{ 

      return new ViewHolder0(LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row2, parent, false)); 

     } 

     // View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row, parent, false); 


     //return new MyViewHolder(itemView); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // Here you have to write logic for which position have which type of row and return the same 
     Chatt love = moviesList.get(position); 
     Log.d("law",love.getTitle().toString()); 
     Log.d("prefsss",loginx.toString()); 

     //Log.d("law",login); 
     Random r = new Random(); 
     int i1 = r.nextInt(80 - 65) + 65; 
     // pref =PreferenceManager.getDefaultSharedPreferences(context); 

     //SharedPreferences sharedPreferences = context.getSharedPreferences("FileName", Context.MODE_PRIVATE); 
     // login = pref.getString("user", null); 


     if(love.getTitle().equals(loginx)){ 

      return 2; 
     }else{ 


      return 1; 

     } 


    } 
    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 




Log.d("lawtayp",String.valueOf(holder.getItemViewType())); 
      if (holder.getItemViewType()==2){ 
       ViewHolder0 viewHolder0 = (ViewHolder0)holder; 
       Chatt love = moviesList.get(position); 

      // viewHolder0.title.setText(love.getTitle()); 
       // viewHolder0.genre.setText(love.getGenre()); 
       viewHolder0.year.setText(love.getYear()); 
       // Picasso.with(getClass()).load("http://barronpw.alwaysdata.net/p/"+name+".png").into(cardViewphoto); 
       // Picasso.with(context).load("http://barronpw.alwaysdata.net/p/"+love.getTitle() +".png").into(viewHolder0.resim); 


      }else{ 


       // code to populate type 1 view here 
       MyViewHolder myviewholder = (MyViewHolder)holder; 
       Chatt love = moviesList.get(position); 

       // Chatt love = moviesList.get(position); 

       // myviewholder.titlem.setText(love.getTitle()); 
       // myviewholder.genrem.setText(love.getGenre()); 
       myviewholder.yearm.setText(love.getYear()); 
       // Picasso.with(getClass()).load("http://barronpw.alwaysdata.net/p/"+name+".png").into(cardViewphoto); 
       Picasso.with(context).load("http://barronpw.alwaysdata.net/p/"+love.getTitle() +"-p.png").into(myviewholder.resim); 
      } 



      // Code to populate type 0 view here 




    } 


    @Override 
    public int getItemCount() { 
     return moviesList.size(); 
    } 
+0

から環境設定の初期化を削除するには、あなたが 'PreferenceManager.getDefaultSharedPreference(コンテキスト)を試してみました持っていますか。'? –

+0

はい、しかしそれはjava.lang.NullPointerExceptionを示しています:ヌルオブジェクトリファレンスで仮想メソッド 'java.lang.String android.content.Context.getPackageName()'を呼び出そうとしています – barann

+0

@barann; why'context.getApplicationContext() '?なぜ「文脈」だけでなく? –

答えて

0

belowsのように、コードを編集した問題は、共有好みように、アプリケーション内でなければならない状況である。この

public class ChattAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private List<Chatt> moviesList; 
    Context context; 
public String loginx; 
    public TextView title, year, genre; 
    public CardView cardViewphoto; 
    public ImageView resim; 
    private static final int TYPE_ITEM0 = 0; 
    private static final int TYPE_ITEM1 = 1; 
    SharedPreferences pref; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView titlem, yearm, genrem; 
     public CardView cardViewphoto; 
     public ImageView resim; 

public ChattAdapter(Context context){ 
     this.context = context; 
} 
.... 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     // context = parent.getContext(); 

     pref =PreferenceManager.getDefaultSharedPreferences(context); 
.... 

} 
0

を試してみてください適切に読み取ることができます。これを行う1つの方法は、コンストラクターを使用して、アクティビティー/フラグメントのコンテキストを追加の引き数としてアダプターに渡すことです。

0

コンストラクタを作成します。

public ChattAdpater(Context context){ 
    prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    } 

onCreateViewHolder

関連する問題