एंड्रॉइड स्टॉक इन्वेंट्री प्रोग्राम दुर्घटनाग्रस्त हो जाता है

मैं एक स्टॉक इन्वेंट्री प्रोग्राम तैयार कर रहा हूं जो विभिन्न विशेषताओं वाले आइटम लॉग करता है। मैंने यह काम किया था और फिर इसे एक सेवर पर एक टेक्स्ट फ़ाइल से पढ़ना जारी रखा और अब जब भी मैं गुणों को आजमाता हूं और संपादित करता हूं और/या एक नया आइटम जोड़ना चाहता हूं तो यह दुर्घटनाग्रस्त हो जाता है और मुझे नहीं पता कि क्यों। मेरा मानना ​​है कि यह रचनाकारों के साथ करना है, लेकिन मैंने जो भी काम किया है, वह काम नहीं कर पाया है।

नीचे सूची तत्व है जहां वस्तुओं को संग्रहीत किया जाता है:

   public class ItemListActivity extends Activity implements OnItemClickListener
    {
private ArrayAdapter adapter;
private ListView listView;


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

    //retrieve list of students and set them in the adaptor
    ArrayList itemList = ((ItemApplication)getApplication()).getItemList();
    adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, itemList);

    //assign adaptor to ListView
    listView = (ListView)findViewById(R.id.item_list);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(this);
}

public boolean onCreateOptionsMenu(Menu menu) 
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.itemmenu, menu);
    return true;
}

@Override
protected void onResume() 
{
    super.onResume();
    adapter.notifyDataSetChanged();
}


@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
    case R.id.enter_item_data:  
        Intent intent = new Intent(this, EnterItemActivity.class);
        startActivity(intent);
        return true;
    case R.id.get_network:
        System.err.println("Read started");
        GetDataFromServerTask  t = new GetDataFromServerTask();
        t.execute();
        return true;
    case R.id.send_network:
        System.err.println("Send to network");
   //comment out send code for now so we can test get- in isolation
        //SendDataToServerTask  st = new SendDataToServerTask();
        //st.execute();
        return true;
    case R.id.save:
        saveData();
        return true;
    case R.id.exit:
        saveData();
        finish();
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public void onItemClick (AdapterView<?> parent, View view, int position, long id)
{
    //start EnterStudentActivity with reference to list position
    Intent intent = new Intent (this, EnterItemActivity.class);
    intent.putExtra("position", position);
    startActivity(intent);
}

private void saveData() 
{
   //TODO Auto-generated method stub

}

public void showItemList() 
{
    adapter.notifyDataSetChanged();
}

@SuppressWarnings("rawtypes")
private class GetDataFromServerTask extends AsyncTask 

{
    private Socket socket = null;
    private PrintWriter out = null;
    private Scanner in = null;

    protected Void doInBackground(Void ... params) 
    {
        ArrayList ItemList = ((ItemApplication)getApplication()).getItemList();

        try 
        { 
            if (socket == null) 
            {
                InetAddress ia = InetAddress.getByName("10.0.2.2");
                socket = new Socket(ia, 4444);
                System.err.println("Created Socket");
                out = new PrintWriter(socket.getOutputStream(), true);
                System.err.println("Output stream created");
                in = new Scanner(new InputStreamReader(socket.getInputStream()));
            }

            out.println("GET_LIST");;
            in.useDelimiter(",");

            while (in.hasNext()) 
            {
                String plant = in.next().trim();
                int day = Integer.parseInt(in.next().trim());
                int month = Integer.parseInt(in.next().trim());
                int year = Integer.parseInt(in.next().trim());
                int stockId = Integer.parseInt(in.next().trim());
                String nameOfItem = in.next().trim();
                int hour = 0;
                int minute = 0;
                String inspectorId = "";
                String stockUnits = "";
                String condition = "";
                String additional = "";     

                Item i = new Item(plant, day, month, year, stockId, nameOfItem, hour, minute, inspectorId, stockUnits, condition, additional, true);
                ItemList.add(i);
            }

            in.close();
            out.close();
            socket.close();
            } 
                catch (UnknownHostException e) 
                {
                    System.err.println("Don't know about host: ");
                } 
                catch (IOException e) 
                {
                    System.err.println("Couldn't get I/O for " + "the connection to: ");
                } 
                catch (NullPointerException e) 
                {
                    System.err.println("Null pointer caught");
                    System.err.println(e.toString());
                }
            return null;    
        }

        protected void onPostExecute(Void param) 
        {
            ItemListActivity.this.showItemList();
        }
    }

  }

कोड का अगला कोड आइटम की कक्षा है:

 public class Item  
 {
private String plant;
private int day, month, year;
private int hour, minute;
private int stockId;
private String nameOfItem;
private String inspectorId;
private String stockUnits;
private String condition;
private String additional;
private boolean isFollowUp;

public Item(String plant, int day, int month, int year,  int stockId, String nameOfItem, int hour, int minute, String inspectorId, String stockUnits, String condition, String additional, boolean isFollowUp)
{
    this.plant = plant;
    this.day = day;
    this.month = month;
    this.year = year;
    this.stockId = stockId;
    this.nameOfItem = nameOfItem;
    this.inspectorId = getInspectorId();
    this.stockUnits = getStockUnits();
    this.condition = getCondition();
    this.additional = getAdditional();
    this.isFollowUp = isFollowUp();
}

public String getPlant() 
{
    return plant;
}

public boolean isFollowUp() 
{
    return isFollowUp;
}

@Override
public String toString() 
{
    return "Plant: " + plant + "\n" + "Inspection Date: " + day + ", " + (month +1) + ", " + year + 
            "\n" + "Inspection Time: " + hour + ":" + minute + "\n" + "Stock ID: " + stockId + "\n" + "Name of Item: " + nameOfItem + "\n" + "Inspector ID: "
            + inspectorId + "\n" + "Stock Units: " + stockUnits + "\n" + "Condition: " + condition + "\n" 
            + "Additional Info: " + additional +"\n" + "Follow-up? " + isFollowUp;
}

public Item(String plant, int day, int month, int year,  int stockId, String nameOfItem, int hour, int minute, String inspectorId, String stockUnits, String condition, String additional)
{
    this(plant, day, month, year, stockId, nameOfItem, hour, minute, inspectorId, stockUnits, condition, additional, true);
}

public int getDay() 
{
    return day;
}

public int getMonth() 
{
    return month;
}

public int getYear() 
{
    return year;
}

public void setPlant(String plant)
{
    this.plant = plant;
}

public void setDay(int day)
{
    this.day = day;
}

public void setMonth(int month)
{
    this.month = month;
}

public void setYear(int year)
{
    this.year = year;
}

public void setFollowUp(boolean isFollowUp)
{
    this.isFollowUp = isFollowUp;
}

public int getStockId() 
{
    return stockId;
}

public void setStockId(int stockId) 
{
    this.stockId = stockId;
}

public String getNameOfItem() 

{
    return nameOfItem;
}

public void setNameOfItem(String nameOfItem) 
{
    this.nameOfItem = nameOfItem;
}

public String getInspectorId() 
{
    return inspectorId;
}

public void setInspectorId(String inspectorId) 
{
    this.inspectorId = inspectorId;
}

public String getStockUnits()
{
    return stockUnits;
}

public void setStockUnits(String stockUnits) 
{
    this.stockUnits = stockUnits;
}

public String getCondition()
{
    return condition;
}

public void setCondition(String condition) 
{
    this.condition = condition;
}

public String getAdditional()
{
    return additional;
}

public void setAdditional(String additional)
{
    this.additional = additional;
}

public int getHour()
{
    return hour;
}

public void setHour(int hour)
{
    this.hour = hour;
}

public int getMinute()
{
    return minute;
}

public void setMinute(int minute)
{
    this.minute = minute;
}
  }

कोड का यह आखिरी बिट एक नई वस्तु दर्ज करते समय आइटम विशेषताओं में प्रवेश करना है

    public class EnterItemActivity extends Activity implements OnEditorActionListener, OnItemSelectedListener, OnClickListener, android.content.DialogInterface.OnClickListener
    {
private EditText et;
private EditText etP;
private EditText etS;
private EditText etN;
private EditText etSU;
private EditText etA;
private DatePicker dp;
private CheckBox cb;
private TextView tvSC;
private RadioButton rbE;
private RadioButton rbS;
private RadioButton rbU;
private Item item;
private TextView tv;
private TimePicker tp;
private Spinner spin;
String[] idItems = {"1253", "3965" , "3234", "9912", "3423"};
private boolean isNew = true;


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

    etP = (EditText)this.findViewById(R.id.edit_plant);
    etP.setOnEditorActionListener(this);

    dp = (DatePicker)this.findViewById(R.id.dp_inspection_date);

    etS= (EditText)this.findViewById(R.id.edit_stock_id);
    etS.setOnEditorActionListener(this);

    etN = (EditText)this.findViewById(R.id.edit_name_of_item);
    etN.setOnEditorActionListener(this);

    tp = (TimePicker)this.findViewById(R.id.tp_time_inspection);

    tv = (TextView)this.findViewById(R.id.tv_inspector_id);
    tv = (TextView)this.findViewById(R.id.tv_inspector_id_value);

    spin = (Spinner)this.findViewById(R.id.sp_spinner_in_id);
    spin.setOnItemSelectedListener(this);
    ArrayAdapter inspectorSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item, idItems);
    inspectorSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spin.setAdapter(inspectorSpinner);

    etSU = (EditText)this.findViewById(R.id.edit_stock_units);
    etSU.setOnEditorActionListener(this);

    rbE = (RadioButton)this.findViewById(R.id.rb_condition_excellent);
    rbS = (RadioButton)this.findViewById(R.id.rb_condition_statisfactory);
    rbU = (RadioButton)this.findViewById(R.id.rb_condition_unacceptable);
    tvSC = (TextView)this.findViewById(R.id.tv_conditon_selected);

    etA = (EditText)this.findViewById(R.id.edit_additional);
    etA.setOnEditorActionListener(this);

    cb = (CheckBox)this.findViewById(R.id.cb_follow_up);

    //initialise the data if this is not a new student
    //get the student object to be updated
    Bundle extras = this.getIntent().getExtras();
    if (extras != null)
    {
        isNew = false;
        int position = extras.getInt("position");
        item = ((ItemApplication)getApplication()).getItem(position);

        etP.setText(item.getPlant());
        etP.setFocusable(false); //can't update the name        
        dp.updateDate(item.getYear(), item.getMonth(), item.getDay());
        tp.setCurrentHour(item.getHour());
        tp.setCurrentMinute(item.getMinute());
        etS.setText(item.getStockId());
        etS.setFocusable(false);
        etN.setText(item.getNameOfItem());
        tv.setText(item.getInspectorId());
        etSU.setText(item.getStockUnits());
        tvSC.setText(item.getCondition());
        etA.setText(item.getAdditional());
        cb.setChecked(item.isFollowUp());

    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    MenuIn
0
एक लॉगकैट की बहुत सराहना की जाएगी -> stackoverflow.com/questions/12769798/…
जोड़ा लेखक Mdlc, स्रोत
लॉग बिल्ली जोड़ा
जोड़ा लेखक Jonny_Appleby12, स्रोत
आप किस कक्षा में बात कर रहे हैं
जोड़ा लेखक Jonny_Appleby12, स्रोत
लाइन 103 क्या है
जोड़ा लेखक ramaral, स्रोत
EnterItemActivity
जोड़ा लेखक ramaral, स्रोत
आपके लॉगकैट के बिना, हमें नहीं पता कि क्यों या तो। जब यह दुर्घटनाग्रस्त हो जाता है, तो आप लाल रंग में संदेश देखेंगे। कृपया उन्हें अपने प्रश्न के हिस्से के रूप में पोस्ट करें।
जोड़ा लेखक NigelK, स्रोत

1 उत्तर

त्रुटि एंटरइटम सक्रियता के भीतर है और संसाधन $ NotFoundException है। लॉगकैट में, आप देख सकते हैं कि यह परिणाम कॉल से:

android.widget.TextView.setText

ऑनक्रेट में, आप कई स्थानों पर सेटटेक्स्ट को कॉल करते हैं। यह एक समस्या है:

etS.setText(item.getStockId());

आपकी विधि एक int, एक स्ट्रिंग नहीं देता है:

public int getStockId() 
{
    return stockId;
}

सेटटेक्स्ट विधि में दो ओवरलोड हैं। जब एक स्ट्रिंग मान के साथ बुलाया जाता है, तो वह टेक्स्ट इस्तेमाल किया जाता है। जब int के साथ बुलाया जाता है, तो पूर्णांक संख्या संसाधन आईडी को संदर्भित करती है और एंड्रॉइड प्रदान किए गए आईडी मान के लिए संसाधन नहीं ढूंढ सकता है। मुझे संदेह है कि आप एक स्ट्रिंग के रूप में स्टॉक आईडी के मूल्य को दिखाना चाहते हैं। तो आप इसके बजाय अपनी विधि बदल सकते हैं:

public String getStockId() 
{
    return String.valueOf(stockId);
}

... या विधि को छोड़ दें और इसका उपयोग करें:

etS.setText(String.valueOf(item.getStockId()));
1
जोड़ा
धन्यवाद, विश्वास नहीं कर सकता कि यह कुछ आसान था
जोड़ा लेखक Jonny_Appleby12, स्रोत
जब भी सूची में कोई नया आइटम जोड़ा जाता है तब भी यह क्रैश हो जाता है
जोड़ा लेखक Jonny_Appleby12, स्रोत
मुझे लगता है कि यह पिछली पंक्ति के समान समस्या है int stockId = item.getStockId (); क्योंकि मुझे जिस मूल्य की आवश्यकता है, वह एटीएस नामक एए टेक्स्ट फ़ील्ड में है, लेकिन मैं इसे कॉल नहीं कर रहा हूं क्योंकि आप इसके साथ नहीं कर सकते एक int
जोड़ा लेखक Jonny_Appleby12, स्रोत
इस बार समस्या को हल करने के लिए लॉगकाट में पर्याप्त संकेत नहीं हैं (इसके अलावा ऑनक्लिक विधि में कहीं भी एक शून्य सूचक अपवाद है)। मुझे लगता है कि अगर आप लाइन से लाइन के माध्यम से कदम उठाने के लिए पहले से ही ऐसा कर चुके हैं तो डीबगर का उपयोग करने का समय आ गया है। बस ऑनक्लिक की शुरुआत में ब्रेकपॉइंट सेट करें और डीबग के तहत शुरू करें। यदि यह बग पहले से संबंधित नहीं है तो आप एक नया प्रश्न विचार करना चाहेंगे।
जोड़ा लेखक NigelK, स्रोत
आप स्ट्रिंग के साथ एक स्ट्रिंग को स्ट्रिंग में परिवर्तित कर सकते हैं .valueOf? या Integer.parseInt के साथ एक int के लिए एक स्ट्रिंग? तो आप वास्तव में इसे ईटीएस से ले जा सकते हैं?
जोड़ा लेखक NigelK, स्रोत