2017-10-10 9 views
-2

ハッシュタグを使用するアプリケーションを作成しています。今のところ私はAutoLinkTextClickを使用しています!そしてすべては誰かがエラーで識別ハッシュタグでアプリのクラッシュをクリックした場合を除き、正常に動作します:ヘルパークラス(アダプタ)からの起動インテントは、java.lang.NullPointerExceptionを返します。

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

だから私はそれを引き起こし、人々がgetContext()またはgetActvity()を使用することをお勧めどちらもかもしれないものについては、ほぼすべてのStackOverflowの上で読んだことがありますこれは私がアダプターからそのインテントを起動しようとしているためであり、アクティビティーを拡張したクラスやフラグメントからではないので、私はあなたの助けを借りて感謝します。

このたびはお時間を頂き、誠にありがとうございます。以下に表示されているアダプタと、エラーのために自分のコード:)

package com.android.msahakyan.expandablenavigationdrawer.adapter; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.support.v7.app.AlertDialog; 

import com.android.msahakyan.expandablenavigationdrawer.AboutUsActivity; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import com.android.msahakyan.expandablenavigationdrawer.R; 
import com.android.msahakyan.expandablenavigationdrawer.activity.FeedImageView; 
import com.android.msahakyan.expandablenavigationdrawer.model.Feed; 
import com.android.msahakyan.expandablenavigationdrawer.others.AppController; 
import com.luseen.autolinklibrary.AutoLinkMode; 
import com.luseen.autolinklibrary.AutoLinkOnClickListener; 
import com.luseen.autolinklibrary.AutoLinkTextView; 

import java.util.List; 

public class FeedsListAdapter extends  RecyclerView.Adapter<FeedsListAdapter.MyHolder> { 
private Activity activity; 
private LayoutInflater inflater; 
private List<Feed> feedItems; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
//ImageLoader imageLoader = VolleySingleton.getInstance(context).getImageLoader() 
public FragmentManager f_manager; 



public FeedsListAdapter(Activity activity, List<Feed> feedItems) { 
    this.activity = activity; 
    this.feedItems = feedItems; 
} 


//INITIALIE VH 
//@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.feeds_home_row,parent,false); 
    MyHolder holder=new MyHolder(v); 
    return holder; 
} 

//BIND DATA 
// @Override 
public void onBindViewHolder(MyHolder holder, int position) { 

    //ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 

    final Feed f = feedItems.get(position); 

    //Post images 
    holder.picture.setImageUrl(f.getPictureUrl(), imageLoader); // displays company profile image on post 
    holder.sms_image.setImageUrl(f.getMessagePictureUrl(), imageLoader); // displays post image on post 

    //autoLinkTextView.enableUnderLine(); 
    holder.messages.addAutoLinkMode(AutoLinkMode.MODE_HASHTAG); 
holder.messages.setAutoLinkText("this the sample message #test i need to test hashtag onClink and launch intent"); // 
    holder.messages.setAutoLinkOnClickListener(new AutoLinkOnClickListener() { 
     @Override 
     public void onAutoLinkTextClick(AutoLinkMode autoLinkMode, String matchedText) { 
      Intent intent = new Intent(activity, AboutUsActivity.class); 
      intent.putExtra("companyId", f.getCompanyId()); 
      activity.startActivity(intent); 
     } 
    }); 
    //holder.messages.setText(f.getMessage()); 
    //Linkify.addLinks(holder.messages, Linkify.ALL); //detect link that are in a message 
    holder.date_created.setText(f.getDateCreated()); 
    holder.company.setText(f.getCompany()); 

} 


/* 
TOTAL ITEMS 
*/ 

//@Override 
public int getItemCount() { 
    return feedItems.size(); 

} 

/* 
ADD DATA TO ADAPTER 
*/ 
public void add(Feed s) { 
    feedItems.add(s); 
    notifyDataSetChanged(); 
} 

/* 
CLEAR DATA FROM ADAPTER 
*/ 
public void clear() { 
    feedItems.clear(); 
    notifyDataSetChanged(); 
} 

/* 
VIEW HOLDER CLASS 
*/ 
class MyHolder extends RecyclerView.ViewHolder { 

    FeedImageView sms_image; 
    NetworkImageView picture; 
    //TextView messages; 
    AutoLinkTextView messages; 
    //AutoLinkTextView autoLinkTextView; 
    TextView date_created; 
    TextView company; 


    public MyHolder(View convertView) { 
     super(convertView); 


     this.sms_image = (FeedImageView) convertView.findViewById(R.id.sms_image); 
     NetworkImageView thumbnail = (NetworkImageView) convertView.findViewById(R.id.thumbnail); 
     this.picture = (NetworkImageView) convertView.findViewById(R.id.picture); 
     //this.messages = (TextView) convertView.findViewById(R.id.messages); 
     this.messages = (AutoLinkTextView) convertView.findViewById(R.id.messages); 
     this.date_created = (TextView) convertView.findViewById(R.id.date_created); 
     this.company = (TextView) convertView.findViewById(R.id.company); 
     //TextView status = (TextView) convertView.findViewById(R.id.status); 


    } 

} 

} 

エラーが表示されているあなたはRecyclerViewアダプタから活動を開始してはならない

10-10 08:08:06.128 28368-28368/com.android.msahakyan.expandablenavigationdrawer E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.android.msahakyan.expandablenavigationdrawer, PID: 28368 
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:128) 
     at android.content.Intent.<init>(Intent.java:4666) 
     at com.android.msahakyan.expandablenavigationdrawer.adapter.FeedsListAdapter$1.onAutoLinkTextClick(FeedsListAdapter.java:87) 
     at com.luseen.autolinklibrary.AutoLinkTextView$1.onClick(AutoLinkTextView.java:77) 
     at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:217) 
     at com.luseen.autolinklibrary.LinkTouchMovementMethod.onTouchEvent(LinkTouchMovementMethod.java:38) 
     at android.widget.TextView.onTouchEvent(TextView.java:8689) 
     at android.view.View.dispatchTouchEvent(View.java:9787) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461) 
     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1780) 
     at android.app.Activity.dispatchTouchEvent(Activity.java:2853) 
     at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) 
     at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422) 
     at android.view.View.dispatchPointerEvent(View.java:10018) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4738) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4596) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4101) 
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4154) 
     at android.view 
+0

あなたはどのように活動してリストと活動のparamsを追加していますか?私たちにあなたの活動を見せてもらえますか? –

+0

場所コードを追加するアダプターにアクティビティー参照を渡す方法 –

答えて

2

されています。代わりに、アダプターが常駐するActivity/Fragmentが実装する必要があるリスナーを作成する必要があります。アダプタはその作業を行うだけで、アダプタの内容が表示されます。

このような何か:

public class FeedsListAdapter extends RecyclerView.Adapter<FeedsListAdapter.ViewHolder> { 
    // ... 

    /***** Creating OnItemClickListener *****/ 

    // Define listener member variable 
    private OnItemClickListener listener; 

    // Define the listener interface 
    public interface OnItemClickListener { 
     void onAutoLinkTextClick(String companyId); 
    } 

    // Define the method that allows the parent activity or fragment to define the listener 
    public void setOnItemClickListener(OnItemClickListener listener) { 
     this.listener = listener; 
    } 

    public void onBindViewHolder(MyHolder holder, int position) { 

     ... 
     holder.messages.setAutoLinkOnClickListener(new AutoLinkOnClickListener() { 
      @Override 
      public void onAutoLinkTextClick(AutoLinkMode autoLinkMode, String matchedText) { 
       listener.onAutoLinkTextClick(f.getCompanyId()); 

      } 
     }); 
     ... 

    } 
} 

その後は、あなたのアクティビティまたはフラグメント上のリスナーを設定します。

FeedsListAdapter adapter = ...; 
adapter.setOnItemClickListener(new ContactsAdapter.OnItemClickListener() { 
    @Override 
    public void onAutoLinkTextClick(String companyId) { 
     Intent intent = new Intent(activity, AboutUsActivity.class); 
     intent.putExtra("companyId", f.getCompanyId()); 
     activity.startActivity(intent); 
    } 
}); 
+0

ダウンボッターについては、ダウンボートの理由を説明してください。 –

+0

あなたの提案は正しいです。私は地球上の誰がこれを落としたのか分かりません。そして理由を説明しなかった –

+0

@AbdulWaheed:私はヒットアンドランニングdownvoterの犠牲者だと思います。あなたの励ましのあるコメントありがとうございます;) –