2017-01-02 8 views
1

私はこのオブジェクトの配列のリストに新しいオブジェクトを追加する責任がある以下のアクティビティを持っていますが、実行するとクラッシュします。 は、それが長いため、以下のすべてのクラスとエラーメッセージの一部です。ArrayListでエラーが発生しました<cart> items.add(new_item);

第1アクティビティ:これは第2アクティビティを呼び出して結果を開始するアクティビティです。 itemDetails.java:

public class itemDetails extends AppCompatActivity implements View.OnClickListener{ 
    int request_Code = 1; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.item); 

     Bundle received = getIntent().getExtras(); 
     int position= received.getInt("position"); 
     long id=received.getLong("id"); 
     /*int id=0;getIntent().getIntExtra("id",id); 
     int position=0;*/ 
//  getIntent().getIntExtra("id",id);getIntent().getIntExtra("position", position); 
     Toast.makeText(this, "id= " + id + ". and posistion= "+ position, Toast.LENGTH_LONG).show(); 

     Integer[] picsId = { 
       R.drawable.pic1, 
       R.drawable.pic2, 
       R.drawable.pic3, 
       R.drawable.pic4, 
       R.drawable.pic5, 
       R.drawable.pic6, 
       R.drawable.pic7 
       }; 

     String[] picsNames={"Rose", "Red Dahlia","Tulip","Red rose","Aloe","Mother-in-Law's tonque","Snake"}; 
     String[] picCategory= {"Flowers","Flowers","Flowers","Flowers","Indoor plants","Indoor plants","Indoor plants"}; 
     double[] prices={5.5, 4, 3, 6, 35, 40, 42 }; 
     ImageView imgview = (ImageView) findViewById(R.id.item_image); 
     imgview.setImageResource(picsId[position]); 
     TextView nametxt= (TextView) findViewById(R.id.nametxtview); 
     TextView categorytxt= (TextView) findViewById(R.id.categorytxtview); 
     TextView pricetxt= (TextView) findViewById(R.id.pricetxtview); 
     nametxt.setText(picsNames[position]); 
     categorytxt.setText("Category: " + picCategory[position]); 

     pricetxt.setText(String.valueOf(prices[position])); 


     Button cart_button= (Button)findViewById(R.id.Add2cartbutton); 
     cart_button.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     TextView name= (TextView) findViewById(R.id.nametxtview); 
     TextView pricetxt = (TextView) findViewById(R.id.pricetxtview); 
     // cast the retrieved price to double type: 
     double price = Double.parseDouble(pricetxt.getText().toString()); 
     Intent data= new Intent(this, AddnewItemToCart.class); 
     data.putExtra("name",name.getText().toString()); // store the item name in the new intent 

     data.putExtra("price", price); //, this saves the whole sentence 
     startActivityForResult(data,request_Code); 
    } 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == request_Code){ 
      if(resultCode == RESULT_OK) { 
       Toast.makeText(this, data.getStringExtra("name") + "is successfully added to your cart", Toast.LENGTH_SHORT).show(); 
      } 
      } 

    } 
} 

次に、私のアプリケーションがクラッシュするアクティビティを示します。 AddnewItemToCart.java: ところで、どのレイアウトにも割り当てられていません。

public class AddnewItemToCart extends AppCompatActivity{ 


    ArrayList<cart> items; 
    cart_adapter adapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     Bundle receivedData= getIntent().getExtras(); 
     String name= receivedData.getString("name"); 
     double price=receivedData.getDouble("price"); 

     cart new_item= new cart(name,price); // created new Task object. 
//  Toast.makeText(this, new_item.itemName + " and "+ new_item.price , Toast.LENGTH_LONG).show(); 

     items.add(new_item); 
     adapter.notifyDataSetChanged(); 
     Intent data= new Intent(); 
     data.putExtra("name",name); 
     setResult(RESULT_OK,data); 
     //---closes the activity--- 
     finish(); 
    } 
} 

そして、これが検出されたエラーメッセージです:

FATAL EXCEPTION: main 
        Process: swe.trial, PID: 4054 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{swe.trial/swe.trial.CartActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
         at android.app.ActivityThread.-wrap12(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6077) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
        Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
         at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:344) 
         at android.widget.ListView.setAdapter(ListView.java:493) 
         at swe.trial.CartActivity.onCreate(CartActivity.java:36) 
         at android.app.Activity.performCreate(Activity.java:6664) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
    package swe.trial; 

は、これが主な活動ですが、それはそれを& AddnewItemToCart.javaをマージすることが可能である??で

public class CartActivity extends AppCompatActivity implements View.OnClickListener { 
    ArrayList<cart> items; 
    cart_adapter adapter; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.shoppingcart); 

     ListView cart_list= (ListView) findViewById(R.id.cart_list); 
     cart_list.setAdapter(new cart_adapter(this, items)); 

     Button checkout = (Button) findViewById(R.id.checkout); 
    } 

    @Override 
    public void onClick(View v) { 


     Bundle receivedData= getIntent().getExtras(); 
     String name= receivedData.getString("name"); 
     double price=receivedData.getDouble("price"); 

     cart new_item= new cart(name,price); // created new Task object. 
//  Toast.makeText(this, new_item.itemName + " and "+ new_item.price , Toast.LENGTH_LONG).show(); 

     items.add(new_item); 
     adapter.notifyDataSetChanged(); 
     Intent data= new Intent(); 
     data.putExtra("name",name); 
     setResult(RESULT_OK,data); 
     //---closes the activity--- 
     finish(); 

//  Toast.makeText(CartActivity.this, "Payment is not supported, Try again Later!", Toast.LENGTH_LONG).show(); 
    } 
} 


class cart_adapter extends ArrayAdapter<cart> { 

    private ArrayList<cart> cart_items; 
    private Context context; 

    public cart_adapter(Context context, ArrayList<cart> items) { 
     super(context, R.layout.shoppingcart , items); 
     this.context = context; 
     this.cart_items = items; 
    } 


    public cart getItem(int position) { 
     return cart_items.get(position);} 


    public View getView(int position, View convertView, ViewGroup parent) { 
     cart item = getItem(position); 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.shoppingcart, parent, false); 
     } 
     TextView name= (TextView) convertView.findViewById(R.id.c_itemName); 
     TextView price= (TextView) convertView.findViewById(R.id.c_itemPrice); 
     name.setText(item.itemName); 
     price.setText("price: "+ item.price); 

     return convertView; 

    } 


    public long getItemId(int position) { 
     return position; 

    } 


} 
+0

のように見えますか? –

+1

'items.add(new_item);を実行する前に' items = new ArrayList <>(); ' –

答えて

0

リストを確認してくださいする前に

を使用nullまたはではありません
if(items==null){ 
    items = new ArrayList<>(); 
} 

今、あなたのクラスはcart_adapterが何であるかを

public class AddnewItemToCart extends AppCompatActivity{ 


ArrayList<cart> items; 
cart_adapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    Bundle receivedData= getIntent().getExtras(); 
    String name= receivedData.getString("name"); 
    double price=receivedData.getDouble("price"); 

    //check before use it 


    if(items==null){ 
     items = new ArrayList<>(); 
    } 

    cart new_item= new cart(name,price); // created new Task object 

    items.add(new_item); 
    adapter.notifyDataSetChanged(); 
    Intent data= new Intent(); 
    data.putExtra("name",name); 
    setResult(RESULT_OK,data); 
    //---closes the activity--- 
    finish(); 
} 
} 
0

あなたAddnewItemToCartあなたがアイテムを更新する必要があります(他の回答で掲示としてインスタンス化する必要があります)活動のリストと adapter.notifyDataSetChanged();

を呼び出すことがあるitems.add(new_item); を設定していますcart_adapterクラスのリスト 例:

adapter.addItem(new_item);//have to add method to update arraylist of items in adapter 
adapter.notifyDataSetChanged(); 
+0

のようにリストを初期化してください。インスタンス化する必要があると言いました –

3

リストを初期化していません。例については

ArrayList<cart> items = new ArrayList<>(); 

:リスト/のArrayListを使用する前に、あなたはこのようにそれを初期化する必要があり、私はあなたのコードを見直し

public class AddnewItemToCart extends AppCompatActivity{ 


ArrayList<cart> items; 
cart_adapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    Bundle receivedData= getIntent().getExtras(); 
    String name= receivedData.getString("name"); 
    double price=receivedData.getDouble("price"); 

    //Initialize like this before using it. 
    ArrayList<cart> items = new ArrayList<>(); 

    cart new_item= new cart(name,price); // created new Task object 

    items.add(new_item); 
    adapter.notifyDataSetChanged(); 
    Intent data= new Intent(); 
    data.putExtra("name",name); 
    setResult(RESULT_OK,data); 
    //---closes the activity--- 
    finish(); 
} 
} 
+0

ありがとうございました。 – Lujain

+0

[OK]をクリックしてください@Lujain –

0

、あなたはArrayListのアイテムAddnewItemToCart.java

を初期化しませんでした
items = new ArrayList<>; // This is initialize your items; 
関連する問題