Android App开发"在setBackgroundResource(xx)"上的NullPointerException;

时间:2015-05-19 15:45:33

标签: java android xml nullpointerexception

我正在尝试为飞盘高尔夫球杆制作应用程序。有了这个应用程序,我正在使用this tutorial制作gallery swiper来查看不同的课程。但是在运行应用程序时,我在NullpointerException方法中获得getView。我无法理解为什么会这样。需要某人帮助指出错误。 这是例外:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setBackgroundResource(int)' on a null object reference

我的主要活动:

public class MainActivity extends ActionBarActivity {




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


}

public void OpenActivityBanen(View view) {

    Intent visBane = new Intent(this,banen.class);
    startActivity(visBane);
}

}

My SecondActivity :(我希望这个画廊swiper能够运行) 这是我在第NullPointerExceptiongetView方法iv.setBackgroundResource(thumb[p]);中获得public class banen extends MainActivity { private GridView gv; private Animator mCurrentAnimator; private int mShortAnimationDuration; private int j = 0; private GestureDetector detector; private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_THRESHOLD_VELOCITY = 200; private int thumb[] = { R.drawable.hull1, R.drawable.kartinfo , R.drawable.logo , R.drawable.logo1234, R.drawable.logo3 , R.drawable.logo4 }; private ImageView expandedImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.banen); detector = new GestureDetector(this, new SwipeGestureDetector()); gv = (GridView) findViewById(R.id.grid_view); gv.setAdapter(new ImageAdapter(this)); gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { j = pos; zoomImageFromThumb(v, thumb[pos]); } }); mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime); } class ImageAdapter extends BaseAdapter { private LayoutInflater layoutInflater; public ImageAdapter(banen activity) { layoutInflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return thumb.length; } @Override public Object getItem(int pos) { return pos; } @Override public long getItemId(int pos) { return pos; } @Override public View getView(int pos, View convertView, ViewGroup parent) { View listItem = convertView; int p = pos; if(listItem == null) { listItem= layoutInflater.inflate(R.layout.banen, null); } ImageView iv = (ImageView) listItem.findViewById(R.id.thumb); iv.setBackgroundResource(thumb[p]); return listItem; } } private void zoomImageFromThumb(final View thumbView, int imageResId) { if(mCurrentAnimator != null){ mCurrentAnimator.cancel(); } expandedImageView = (ImageView) findViewById(R.id.imageView2); expandedImageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (detector.onTouchEvent(event)) { return true; } else { return false; } } }); expandedImageView.setImageResource(imageResId); final Rect startBounds = new Rect(); final Rect finalBounds = new Rect(); final Point globalOffset = new Point(); thumbView.getGlobalVisibleRect(startBounds); findViewById(R.id.container).getGlobalVisibleRect(finalBounds,globalOffset); startBounds.offset(-globalOffset.x, -globalOffset.y); finalBounds.offset(-globalOffset.x, -globalOffset.y); float startScale; if((float) finalBounds.width() / finalBounds.height() > (float) startBounds .width() / startBounds.height()){ startScale = (float) startBounds.height() / finalBounds.height(); float startWidth = startScale * finalBounds.width(); float deltaWidth = (startWidth - startBounds.width()) / 2; startBounds.left -= deltaWidth; startBounds.right+= deltaWidth; }else{ startScale =(float) startBounds.width()/finalBounds.width(); float startHeight = startScale * finalBounds.height(); float deltaHeight = (startHeight = startBounds.height()) / 2; startBounds.top -= deltaHeight; startBounds.bottom += deltaHeight; } thumbView.setAlpha(0f); expandedImageView.setVisibility(View.VISIBLE); expandedImageView.setPivotX(0f); expandedImageView.setPivotY(0f); AnimatorSet set = new AnimatorSet(); set.play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, finalBounds.left)) .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, finalBounds.top)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale, 1f)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale, 1f)); set.setDuration(mShortAnimationDuration); set.setInterpolator(new DecelerateInterpolator()); set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationCancel(Animator animation) { mCurrentAnimator = null; } @Override public void onAnimationEnd(Animator animation) { mCurrentAnimator = null; } }); set.start(); mCurrentAnimator = set; final float startScaleFinal = startScale; expandedImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mCurrentAnimator != null) { mCurrentAnimator.cancel(); } AnimatorSet set = new AnimatorSet(); set.play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left)) .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScaleFinal)) .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScaleFinal)); set.setDuration(mShortAnimationDuration); set.setInterpolator(new DecelerateInterpolator()); set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { thumbView.setAlpha(1f); expandedImageView.setVisibility(View.GONE); mCurrentAnimator = null; } @Override public void onAnimationCancel(Animator animation) { thumbView.setAlpha(1f); expandedImageView.setVisibility(View.GONE); mCurrentAnimator = null; } }); set.start(); mCurrentAnimator = set; } }); } private class SwipeGestureDetector extends GestureDetector.SimpleOnGestureListener{ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try{ if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { if(thumb.length >j){ j++; if(j < thumb.length){ expandedImageView.setImageResource(thumb[j]); return true; } else { j = 0; expandedImageView.setImageResource(thumb[j]); return true; } } }else if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY){ if(j > 0){ j--; expandedImageView.setImageResource(thumb[j]); return true; }else { j = thumb.length - 1; expandedImageView.setImageResource(thumb[j]); return true; } } }catch(Exception e){ e.printStackTrace(); } return false; } } @Override public void onBackPressed() { finish(); } } 的地方

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/container">

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/grid_view"
    android:columnWidth="80dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp">
</GridView>


<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/imageView2"
    android:visibility="invisible"
    android:contentDescription="@string/app_name"/>
</FrameLayout>

Banen的XML:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/spillKnapp"
    android:onClick="SpillMedNoen"
    android:id="@+id/knapp1"
    android:minWidth="300dp"
    android:padding="20dp"
    android:layout_above="@+id/baneKnapp1"
    android:layout_centerHorizontal="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:src="@drawable/logo4"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/knapp1" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/InfoKnapp"
    android:onClick="ShowImage"
    android:id="@+id/knapp2"
    android:minWidth="300dp"
    android:padding="20dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="23dp" />

<Button

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/baneKnapp"
    android:id="@+id/baneKnapp1"
    android:onClick="OpenActivityBanen"
    android:minWidth="300dp"
    android:padding="20dp"
    android:layout_above="@+id/knapp2"
    android:layout_centerHorizontal="true" />
</RelativeLayout>

主要活动的XML:     

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="5dp">

<ImageView
    android:layout_width="72dp"
    android:layout_height="72dp"
    android:id="@+id/thumb"
    android:layout_centerHorizontal="true"
    android:contentDescription="@string/app_name"/>


</RelativeLayout>

Single_grid_item的XML :(这就是#34; Thumb&#34; ID已存储)

Process: com.hatlojohansen.veardiscgolf, PID: 19166
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setBackgroundResource(int)' on a null object reference
        at com.hatlojohansen.veardiscgolf.banen$ImageAdapter.getView(banen.java:103)
        at android.widget.AbsListView.obtainView(AbsListView.java:2347)
        at android.widget.GridView.onMeasure(GridView.java:1060)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:444)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
        at android.view.View.measure(View.java:17547)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我的LogCat:

Py_BuildValue()

4 个答案:

答案 0 :(得分:0)

在方法getView()中,您已经夸大了R.layout.Banen,然后调用了listItem.findViewById(R.id.thumb),但是在<{{}}中声明了带有 thumb 的XML元素1}}。我猜你可能想要膨胀R.layout.single_grid_item而不是Banen。尝试更改以下内容:

R.layout.single_grid_item

listItem= layoutInflater.inflate(R.layout.banen, null);

答案 1 :(得分:0)

当您夸大商品的布局时:

$(document).ready(function(){
    $(".delete_action").click(function(event){
        $("#deletecategory").prop('href','/admin/category/'+ event.target.id +'/delete');
    });
});

listItem = layoutInflater.inflate(R.layout.banen, null); 为空。因此,查找GridView布局中的项目将返回Single_grid_item.xml

也许您打算使用null ID代替imageView2? 或许你夸大了错误的布局,而应该这样做:

thumb

答案 2 :(得分:0)

更改

listItem= layoutInflater.inflate(R.layout.banen, null); 

listItem= layoutInflater.inflate(R.layout.Single_grid_item, null); 

答案 3 :(得分:0)

listItem= layoutInflater.inflate(R.layout.banen, null);

您正在尝试将banen.xml用于ListView项目。

在其中,您正在使用此行查找ID为thumbs的ImageView:

ImageView iv = (ImageView) listItem.findViewById(R.id.thumb);

你可以在banen.xml文件中看到自己没有这样的项目......因此你得到了例外。

我没有看过你指出的教程,但是他们要么为listItem使用不同的布局,要么他们很可能在GridView之间做了unselecting的其他配置。通货膨胀以及他们搜索ImageView的那一刻。