2012-01-27 16 views
12

के कारण तत्काल नहीं किया जा सकता है, मैं एंड्रॉइड दुनिया में एक नोब हूं, और अभ्यास के लिए एक पालतू परियोजना कर रहा हूं। यह केवल दो गतिविधियों के साथ एक बहुत ही सरल अनुस्मारक-जैसे ऐप है। एक एक अनुकूलित सूची दृश्य मौजूदा अलार्म प्रदर्शित करता है। इसमें दूसरे बटन शुरू करने के लिए कुछ बटन हैं, जो अलार्म जोड़ने/संपादित करने के लिए हैं। इसमें एक बटन है जो पिछली सूची दृश्य गतिविधि का कारण बनता है।android.app. अनुप्रयोग को NullPointerException

एक अजीब स्थिति है जिसे मैंने हाल ही में भाग लिया था। मेरा ऐप ठीक काम करता है। लेकिन समस्या यह है कि, जब भी मैं ऐड/एडिट गतिविधि को ट्रिगर करता हूं तो सूचीव्यू पर वापस जाता हूं, और फिर से चलाया जाता है (या मुझे फिर से इंस्टॉल करना चाहिए?) ऐप। एक त्रुटि संदेश पॉपअप होगा। लेकिन यह केवल संक्षेप में दिखाएगा और ऐप शुरू होगा।

मैं लॉग में पकड़ा त्रुटि संदेश का कहना है:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException 
at android.app.LoadedApk.makeApplication(LoadedApk.java:482) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3909) 
at android.app.ActivityThread.access$1300(ActivityThread.java:122) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4340) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362) 
at android.app.LoadedApk.getClassLoader(LoadedApk.java:305) 
at android.app.LoadedApk.makeApplication(LoadedApk.java:474) 
... 11 more 

यह स्पष्ट कहना नहीं है, जहां मेरे कोड में गलत है। तो मुझे इसके बारे में कोई जानकारी नहीं है कि इसे कैसे ठीक किया जाए। क्या किसी को भी इसी तरह की समस्या का सामना करना पड़ा? सभी सुझावों का स्वागत है!

यहाँ जोड़ें/संपादित गतिविधियों का कोड है:

public class EditEntry extends Activity 
{ 
    private AutoCompleteTextView foodNameTextView; 
    private DatePicker datePicker; 
    // store values in AutoCompleteTextView & DatePicker 
    private String foodName; 
    private Calendar foodDate; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.edit); 
     // dummy selections for AutoCompleteTextView 
     String[] foodList = new String[]{"meat", "fruit", "vega"}; 
     // instantiate AutoCompleteTextView & DatePicker 
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.food_list_dropdown, foodList); 
     foodNameTextView = (AutoCompleteTextView)findViewById(R.id.foodName); 
     foodNameTextView.setAdapter(arrayAdapter); 
     datePicker = (DatePicker)findViewById(R.id.date_picker); 
     // get intent from ReminderList. 
     Intent intent = getIntent(); 
     // get extras from intent. Return null if intent is sent from "add" action. 
     foodName = intent.getStringExtra("foodName"); 
     foodDate = (Calendar) intent.getSerializableExtra("foodDate"); 
     // set default values for widgets if it is an "edit" action. 
     if (null != foodName) 
     { 
      foodNameTextView.setText(foodName); 
      datePicker.init(foodDate.get(Calendar.YEAR), foodDate.get(Calendar.MONTH), foodDate.get(Calendar.DAY_OF_MONTH), 
        new OnDateChangedListener() 
        { // will implement date input check later. 
         @Override 
         public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {} 
        }); 
     } 

     // Submit will add/modify the data in xml file. Back will start ReminderList activity 
     Button submit = (Button)findViewById(R.id.entry_submit); 
     Button back = (Button)findViewById(R.id.entry_back); 

     submit.setOnClickListener(new SubmitButtonListener()); 
     back.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(); 
       intent.setClass(EditEntry.this, FoodReminderList.class); 
       startActivity(intent); 
      } 
     }); 
    } 

    // add or modify data in xml file 
    @SuppressWarnings("unused") 
    class SubmitButtonListener implements OnClickListener 
    { 
     Calendar foodDate = Calendar.getInstance(); 

     @Override 
     public void onClick(View v) 
     { 
      XmlUtil xmlUtil = new XmlUtil(); 
      // determine if it is an "edit" action. 
      if (null != foodName) 
      { 
       FoodInfo foodInfo = new FoodInfo(foodName, foodDate); 
       // delete the old data entry 
       xmlUtil.deleteEntry(foodInfo); 
       // cancel old alarm 
       FoodReceiver alarm = new FoodReceiver(EditEntry.this, foodDate, false); 
      } 
      // get new input values 
      foodName = foodNameTextView.getText().toString(); 
      foodDate.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 0, 0, 0); 
      // update xml file 
      FoodInfo foodInfo = new FoodInfo(foodName, foodDate); 
      xmlUtil.updateEntry(foodInfo); 
      // set new alarm 
      FoodReceiver alarm = new FoodReceiver(EditEntry.this, foodDate, true); 
      // popup toast confirming the submit 
      Toast.makeText(EditEntry.this, "Reminder Added", Toast.LENGTH_SHORT).show(); 
      // clear widgets 
      foodNameTextView.setText(""); 
      Calendar currentDate = Calendar.getInstance(); 
      datePicker.updateDate(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DAY_OF_MONTH)); 
     } 
    } 
} 

मैनिफ़ेस्ट इस प्रकार है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="ca.maxiao.Food" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".FoodReminderList" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:label="@string/app_name" 
     android:name=".EditEntry" > 
    </activity> 
    <activity 
     android:label='@string/app_name' 
     android:name=".FoodReminder"></activity> 

    <receiver android:name="ca.maxiao.Food.FoodReceiver"> 
     <intent-filter> 
      <action android:name="Alarm_Setting" /> 
     </intent-filter> 
    </receiver> 
</application> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.VIBRATE"/> 
</manifest> 
+0

इसी तरह की त्रुटि के बारे में एक [पोस्ट] (http://www.mail-archive.com/[email protected]/msg194903.html) है। मैं समझता हूं कि यह थ्रेड रेस समस्या हो सकती है, लेकिन अभी भी नहीं पता कि मेरे कोड कैसे संशोधित करें। – Selkie

+0

क्या आप यहां अपनी मेनिफेस्ट फ़ाइल जोड़ सकते हैं? – Yury

+0

सुनिश्चित करें। प्रकट जोड़ा गया। – Selkie

उत्तर

2

मैं कुछ और परीक्षण किया था और वापस बटन के लिए अनाम भीतरी कक्षा में समस्या lockon , जब भी ऐप को पुनरारंभ करने से पहले मैंने इसे क्लिक किया तो त्रुटि दिखाई देगी। अगर मैं फोन पर "वापस जाएं" बटन का उपयोग करके गतिविधियों को स्विच करता हूं, तो सब कुछ ठीक है।

मैं भीतरी वर्ग

EditEntry.this.finish(); 

यह समस्या को हल करता है में एक लाइन जोड़ दिया। मैंने इस बार इसे अधिक व्यवस्थित परीक्षण करने की कोशिश की। मान लीजिए कि इसके बाद के संस्करण लाइन के बिना कोड एक है, और इस लाइन के साथ कोड का पालन करें की तरह

1.run A, B परिदृश्य चला जाता है तो एक -> त्रुटि

2.run एक तो बी - > त्रुटि

3.run बी तो एक -> ठीक

4.run बी तो बी - ठीक>

इसलिए, मुझे लगता है यह गतिविधि ढेर के बारे में समस्या किसी तरह का है?

+0

मैंने पुन: उत्पन्न करने की कोशिश की और थोड़ा सा कर सकता था, लेकिन अब नहीं। सबसे अधिक संभावना यह संकलित संसाधनों में से एक का परिणाम अद्यतन नहीं हो रहा था। जब मैंने साफ किया तो यह हर समय काम करना शुरू कर दिया। यदि आप उस पंक्ति को वापस "प्रारंभ गतिविधि (इरादा) पर वापस लाते हैं;" क्या त्रुटि वापस आती है? मैं वास्तव में इस में रूचि रखता हूँ! – MikeC

+0

ओह, मैंने इस पोस्ट में गलती की है। मैंने कई दृष्टिकोणों की कोशिश की, और उन्हें किसी भी तरह मिलाना चाहिए। मैंने अपना जवाब संशोधित किया। कृपया इसे दोबारा जांचें। – Selkie

+0

@MikeC आपकी रुचि के लिए धन्यवाद। मैं अपना जवाब संपादित करता हूं। मुझे लगता है कि इस परियोजना का संपादन एडिटएन्ट्री.थिस.फिनिश() जैसा ही प्रभाव है? क्या आप जानते हैं कि इसके पीछे क्या सही कारण है? – Selkie

1

वास्तव में, इस समस्या का असली समाधान फ़ोल्डर अनुमतियाँ समस्या है। सुनिश्चित करें कि आप उस फ़ोल्डर में परिचालन कर रहे हैं जिसे आप संशोधित कर सकते हैं। मैंने यह सुनिश्चित करके अपने स्वयं के लिए एक ही समस्या तय की है कि मैं सही अनुमति वाले फ़ोल्डर में था।

+0

जिसने इसे मेरे लिए हल किया! – oli

3

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

संबंधित मुद्दे