Java SQL中的空指针异常,Listivew

Java SQL中的空指针异常,Listivew,java,android,sqlite,listview,Java,Android,Sqlite,Listview,由于我的noobness,引发了一个Nullpointer异常 非常抱歉,非常感谢您指出并容忍这一点 再次感谢 inputab.java public class InputTab extends Activity{ Cursor model=null; EditText name=null; EditText food=null; EditText category=null; RadioGroup types=null; RestaurantHelper helpe

由于我的noobness,引发了一个Nullpointer异常

非常抱歉,非常感谢您指出并容忍这一点

再次感谢

inputab.java

 public class InputTab extends Activity{

  Cursor model=null;
  EditText name=null;
  EditText food=null;
  EditText category=null;
  RadioGroup types=null;
 RestaurantHelper helper;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.inputdata);

   helper = new RestaurantHelper(this);

    name=(EditText)findViewById(R.id.namex);
    food=(EditText)findViewById(R.id.foodx);
    category=(EditText)findViewById(R.id.catx);

    Button save=(Button)findViewById(R.id.save);

    save.setOnClickListener(onSave);
}

    View.OnClickListener onSave=new View.OnClickListener() {
        public void onClick(View v) {

          helper.insert(name.getText().toString(),
                        food.getText().toString(),
                        category.getText().toString());
          model.requery();
        }
      };
}

ResturantHelper.java

class RestaurantHelper extends SQLiteOpenHelper {
  private static final String DATABASE_NAME="lunchlist.db";
  private static final int SCHEMA_VERSION=1;

  public RestaurantHelper(Context context) {
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
      //sample spacing name away from id

      db.execSQL("CREATE TABLE gandalf " +
            "(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT," +
            " food TEXT, category TEXT);");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // no-op, since will not be called until 2nd schema
    // version exists
  }

  public Cursor getAll() {
    return(getReadableDatabase()
            .rawQuery("SELECT _id, name, food, category FROM gandalf ORDER BY name",
                      null));
  }

  public void insert(String name, String food,
                     String category) {
    ContentValues cv=new ContentValues();

    cv.put("name", name);
    cv.put("food", food);
    cv.put("category", category);

    getWritableDatabase().insert("gandalf", "name", cv);
  }

  public String getName(Cursor c) {
    return(c.getString(1));
  }

  public String getFood(Cursor c) {
    return(c.getString(2));
  }

  public String getCategory(Cursor c) {
    return(c.getString(3));
  }

}
ListViewTab.java

public class ListViewTab extends Activity{

      Cursor model=null;
      RestaurantAdapter adapter=null;
      private RestaurantHelper helper= new RestaurantHelper(this);

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listcontact);
        ListView list=(ListView)findViewById(R.id.restaurants);

        helper=new RestaurantHelper(this);

        model=helper.getAll();

        adapter=new RestaurantAdapter(model);

        list.setAdapter(adapter);
        startManagingCursor(model);
    }

        class RestaurantHolder {
            private TextView name=null;
            private TextView food=null;
            private TextView category=null;

            RestaurantHolder(View row) {
              name=(TextView)row.findViewById(R.id.namer);
              food=(TextView)row.findViewById(R.id.foodr);
              category=(TextView)row.findViewById(R.id.catr);
            }

            void populateFrom(Cursor c, RestaurantHelper helper) {
              name.setText(helper.getName(c));
              food.setText(helper.getFood(c));
              category.setText(helper.getCategory(c));

            }
          }

        class RestaurantAdapter extends CursorAdapter {
            RestaurantAdapter(Cursor c) {
              super(ListViewTab.this, c);
            }

            @Override
            public void bindView(View row, Context ctxt,
                                 Cursor c) {
              RestaurantHolder holder=(RestaurantHolder)row.getTag();

              holder.populateFrom(c, helper);
            }

            @Override
            public View newView(Context ctxt, Cursor c,
                                 ViewGroup parent) {
              LayoutInflater inflater=getLayoutInflater();
              View row=inflater.inflate(R.layout.row, parent, false);
              RestaurantHolder holder=new RestaurantHolder(row);

              row.setTag(holder);

              return(row);
            }
          }

    }
Main.java

public class Main extends TabActivity {


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);

    TabSpec tab1 = tabHost.newTabSpec("Input");
    TabSpec tab2 = tabHost.newTabSpec("List of Food");  

    tab1.setIndicator("Food");
    tab1.setContent(new Intent(this,InputTab.class));

    tab2.setIndicator("View Order");
    tab2.setContent(new Intent(this,ListViewTab.class));

    tabHost.addTab(tab1);
    tabHost.addTab(tab2);
    }
}

类inputAB中的类成员模型从未初始化。因此,您在line model.requery;中获得了一个NPE;。这就是为什么你保存了你的数据,但在那之后,你得到了一个NPE。这个类中不需要任何游标,当然也不需要重新查询任何内容。

调试器应该将您放到这个行模型中。重新查询;,您将看到模型为空。初始化模型成员可能重复。亲爱的所有人,感谢您的反馈,我们忽略了初始化模型。已使用cursor.requery在单击“保存”时刷新列表视图。但是,它不会立即刷新,只有在我重新进入程序时才会刷新。我可以做些什么来实现这一点吗?请理解,我可以使用notifyDataSetChanged进行刷新,但不确定如何进行刷新