NullPointerException,没有什么是空的
NullPointerException,nothing is null
我正在尝试从 Activity A 向 Activity B 发送一些数据。
Ytadapter代码:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final ViewHolder mHolder;
if(convertView != null){
mHolder = (ViewHolder)convertView.getTag();
}else{
mHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
convertView.setTag(mHolder);
}
//Setting the data
final SearchResult result = mVideoList.get(position);
mHolder.mVideoTitle.setText(result.getSnippet().getTitle());
//Loading the image
Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);
//OnClickListeners
mHolder.mVideoFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppUtils.showToast(result.getSnippet().getTitle() + " Was added to favorites.");
m.sendResult = result;
m.sendToFavorites();
}
});
正在 YtAdapter 中初始化:
private Activity mActivity = null;
private List<SearchResult> mVideoList = null;
private LayoutInflater mLayoutInflater = null;
MainActivity m = new MainActivity();
这是A的代码:
public void sendToFavorites(){
Intent fav = new Intent(MainActivity.this,Favorites.class);
fav.putExtra("title",sendResult.getSnippet().getTitle());
fav.putExtra("thumbnail",sendResult.getSnippet().getThumbnails().getMedium().getUrl());
fav.putExtra("id", sendResult.getId().getVideoId());
}
这是我遇到的问题:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
根据IDE,问题出在MainActivity行
意图 fav = new ...
你永远不应该新建一个 extends Activity
的 class,使用 Android 框架给你的实例。
new Intent(MainActivity.this
> MainActivity.this
是 null
(它提供的上下文)在代码的这个地方。
查看 new Intent(Context
的源代码,您会看到它的作用 context.getPackageName
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Intent.java#L4160
造成:
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/ComponentName.java#L64
要解决此问题,您需要使用正确的上下文 (Activity)
将您的方法调用更改为
m.sendToFavorites(mActivity);
以及您
的方法
public void sendToFavorites(Context context){
Intent fav = new Intent(context,Favorites.class);
。
我正在尝试从 Activity A 向 Activity B 发送一些数据。 Ytadapter代码:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final ViewHolder mHolder;
if(convertView != null){
mHolder = (ViewHolder)convertView.getTag();
}else{
mHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
convertView.setTag(mHolder);
}
//Setting the data
final SearchResult result = mVideoList.get(position);
mHolder.mVideoTitle.setText(result.getSnippet().getTitle());
//Loading the image
Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);
//OnClickListeners
mHolder.mVideoFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppUtils.showToast(result.getSnippet().getTitle() + " Was added to favorites.");
m.sendResult = result;
m.sendToFavorites();
}
});
正在 YtAdapter 中初始化:
private Activity mActivity = null;
private List<SearchResult> mVideoList = null;
private LayoutInflater mLayoutInflater = null;
MainActivity m = new MainActivity();
这是A的代码:
public void sendToFavorites(){
Intent fav = new Intent(MainActivity.this,Favorites.class);
fav.putExtra("title",sendResult.getSnippet().getTitle());
fav.putExtra("thumbnail",sendResult.getSnippet().getThumbnails().getMedium().getUrl());
fav.putExtra("id", sendResult.getId().getVideoId());
}
这是我遇到的问题:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
根据IDE,问题出在MainActivity行 意图 fav = new ...
你永远不应该新建一个 extends Activity
的 class,使用 Android 框架给你的实例。
new Intent(MainActivity.this
> MainActivity.this
是 null
(它提供的上下文)在代码的这个地方。
查看 new Intent(Context
的源代码,您会看到它的作用 context.getPackageName
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Intent.java#L4160 造成: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/ComponentName.java#L64
要解决此问题,您需要使用正确的上下文 (Activity)
将您的方法调用更改为
m.sendToFavorites(mActivity);
以及您
的方法public void sendToFavorites(Context context){
Intent fav = new Intent(context,Favorites.class);
。