Java 类之间的设置值(通过set/get方法)

Java 类之间的设置值(通过set/get方法),java,android,Java,Android,我有一个用于定义变量的模型类,当我试图将MainActivity中的一些值设置为模型类时,会出现错误 从我的主课 public class MainActivity extends Activity { private ListView productList; private OfferModel offerModel; @Override protected void onCreate (Bundle savedInstanceState){

我有一个用于定义变量的模型类,当我试图将MainActivity中的一些值设置为模型类时,会出现错误

从我的主课

public class MainActivity extends Activity {
   private ListView productList;
   private OfferModel offerModel;

        @Override
    protected void onCreate (Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.activity_main);
        productList = (ListView)findViewById(R.id.listView1);

        ...many codes here...

        productList.setOnItemClickListener(new OnItemClickListener() {

            @SuppressWarnings("deprecation")
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {

                    offerModel.setProductName(arg0.getItemAtPosition(position).toString());


            }
        });

    }}
这是我的日志结果

08-01 11:17:46.446: W/dalvikvm(2305): threadid=1: thread exiting with uncaught exception (group=0xa4b70648)
08-01 11:17:46.446: E/AndroidRuntime(2305): FATAL EXCEPTION: main
08-01 11:17:46.446: E/AndroidRuntime(2305): java.lang.NullPointerException
08-01 11:17:46.446: E/AndroidRuntime(2305):     at stok.kontrol.noyagrup.MainActivity$2.onItemClick(MainActivity.java:71)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.widget.AbsListView$1.run(AbsListView.java:3463)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.os.Handler.handleCallback(Handler.java:730)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.os.Looper.loop(Looper.java:137)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at java.lang.reflect.Method.invokeNative(Native Method)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at java.lang.reflect.Method.invoke(Method.java:525)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-01 11:17:46.446: E/AndroidRuntime(2305):     at dalvik.system.NativeStart.main(Native Method)
我错过了什么


提前感谢。

OfferModel OfferModel
未实例化,为
null
。因此,当您调用offerModel.setProductName(arg0.getItemAtPosition(position.toString())时您将得到一个异常。

您尚未初始化
私有OfferModel OfferModel在您的代码中,您正在使用offerModel.setProductName(arg0.getItemAtPosition(position.toString())因为它将抛出
NPE

因此,首先初始化它,而且
productName
null
,它尚未初始化,但您可以使用
参数化的
构造函数来初始化它(您必须先添加构造函数)

并添加构造函数

public OfferModel(String pro){
   productName=pro;
}
或者从代码中我可以看到你喜欢
这个
关键字,所以你可以像这个

productList.setOnItemClickListener(新的OnItemClickListener(){
@抑制警告(“弃用”)
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
offerModel=新的offerModel();
offerModel.setProductName(arg0.getItemAtPosition(position.toString());
}
});

什么?错了!此.productName=pName不会引发任何异常。offerModel.setProductName(arg0.getItemAtPosition(position.toString());将抛出它。可能是
offerModel=new OfferModel(productNameValue);//Pass initial value of `productName`
//So it will first initialize your productName 
public OfferModel(String pro){
   productName=pro;
}
public OfferModel(String productName){
   this.productName=productName;
}
         productList.setOnItemClickListener(new OnItemClickListener() {

        @SuppressWarnings("deprecation")
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
                 offerModel= new OfferModel();
                 offerModel.setProductName(arg0.getItemAtPosition(position).toString());


        }
    });