在Android中出现NullPOinterException错误,请帮忙

时间:2013-08-30 05:48:35

标签: java android

我对这个错误很抱怨。我希望有人可以帮助我。 这是我的错误:

08-30 00:24:29.349: E/AndroidRuntime(2139):     at android.view.ViewGroup.addView(ViewGroup.java:3318)

这是我的代码:

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
ViewPager vPager;
private vpAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    vPager=(ViewPager)findViewById(R.id.pager);
    mAdapter = new vpAdapter();
    vPager.setAdapter(mAdapter);
}
   private class vpAdapter extends PagerAdapter{

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 4;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    // TODO Auto-generated method stub
    return view==((LinearLayout)object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    LayoutInflater inflater =(LayoutInflater)container.getContext()
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = null;
    switch(position){
    case 0:
        inflater.inflate(R.layout.satu, null);
        break;
    case 1:
        inflater.inflate(R.layout.dua, null);
        break;
    case 2:
        inflater.inflate(R.layout.tiga, null);
        break;
    case 3:
        inflater.inflate(R.layout.empat, null);
        break;
    }
((ViewPager)container).addView(v,0);
return true;        
}

}

我尝试了很多方法但失败了。例如更改中断的位置并更改位置视图组。我忘了导入图书馆或其他东西?请帮助它的主人:) 如果有人能帮助我,我将非常感激。 谢谢之前:)

4 个答案:

答案 0 :(得分:3)

视图为空。

你有这个

   View v = null;

但我没有看到你在任何地方初始化视图到膨胀的布局。你只是放弃了布局。因此,你得到NullPointerException。在您的切换案例中,初始化您的视图v并将其转换为视图

   v = (View) inflater.inflate(R.layout.rowimage,null, false);

同时返回

   return v; // and not return true;

答案 1 :(得分:0)

它返回空指针异常,因为这里“v”为空。将开关条件更改为以下,

 switch(position){
        case 0:
           v= inflater.inflate(R.layout.satu, null);
            break;
        case 1:
          v= inflater.inflate(R.layout.dua, null);
            break;
        case 2:
            v=inflater.inflate(R.layout.tiga, null);
            break;
        case 3:
           v=inflater.inflate(R.layout.empat, null);
            break;
        }

答案 2 :(得分:0)

试试这种方式

@Override
public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    LayoutInflater inflater =(LayoutInflater)container.getContext()
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = null;
    switch(position){
    case 0:
        v=inflater.inflate(R.layout.satu, null);
        break;
    case 1:
        v=inflater.inflate(R.layout.dua, null);
        break;
    case 2:
        v=inflater.inflate(R.layout.tiga, null);
        break;
    case 3:
        v=inflater.inflate(R.layout.empat, null);
        break;
    }

return v;        
}

答案 3 :(得分:0)

您的视图为空 -

  

您正在膨胀XML Layout但未分配到视图中。

将视图分配到您的开关 -

喜欢 -

 v=(View)inflater.inflate(R.layout.satu, null);

并返回视图而不是布尔值 -

 return v;