0

因此,我正在編寫一個android應用程序,在單擊通知後啓動一個活動。我在我的logcat得到這個:由二元XML文件引起的佈局膨脹錯誤

`

05-01 13:43:49.435: E/AndroidRuntime(28224): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.chowpalv21/com.example.chowpalv21.SmsViewActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class com.android.internal.widget.ActionBarOverlayLayout 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread.access$700(ActivityThread.java:159) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.os.Looper.loop(Looper.java:137) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread.main(ActivityThread.java:5419) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at java.lang.reflect.Method.invokeNative(Native Method) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at java.lang.reflect.Method.invoke(Method.java:525) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at dalvik.system.NativeStart.main(Native Method) 
05-01 13:43:49.435: E/AndroidRuntime(28224): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class com.android.internal.widget.ActionBarOverlayLayout 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.view.LayoutInflater.inflate(LayoutInflater.java:470) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:3553) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3616) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:357) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.Activity.setContentView(Activity.java:1956) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.example.chowpalv21.SmsViewActivity.onCreate(SmsViewActivity.java:80) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.Activity.performCreate(Activity.java:5372) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
05-01 13:43:49.435: E/AndroidRuntime(28224): ... 11 more 
05-01 13:43:49.435: E/AndroidRuntime(28224): Caused by: java.lang.NullPointerException 
05-01 13:43:49.435: E/AndroidRuntime(28224): at com.example.chowpalv21.SmsViewActivity.onCreateView(SmsViewActivity.java:121) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.app.Activity.onCreateView(Activity.java:4924) 
05-01 13:43:49.435: E/AndroidRuntime(28224): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
05-01 13:43:49.435: E/AndroidRuntime(28224): ... 22 more 

`

我已經走遍StackOverflow的答案,因爲它似乎其他人也有類似的問題 - 我試圖重建和清潔項目,並重新啓動ADT以及創建一個新文件。我想知道這裏有沒有人有指導。

這是我的佈局文件:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scroll_view_sms" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="4dp" 
       android:orientation="vertical" > 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:orientation="vertical" > 

       <TextView 
        style="?android:listSeparatorTextViewStyle" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/food_title_label" /> 

       <EditText 
        android:id="@+id/food_title_sms" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginRight="16dp" /> 
      </LinearLayout> 
     </LinearLayout> 

     <TextView 
      style="?android:listSeparatorTextViewStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Units of Measurement:" /> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <CheckBox 
       android:id="@+id/imperial_checkBox_sms" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Imperial" /> 

      <CheckBox 
       android:id="@+id/metric_checkBox_sms" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Metric" /> 
     </TableRow> 

     <TextView 
      style="?android:listSeparatorTextViewStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Number of Servings:" /> 


     <EditText 
      android:id="@+id/food_servings_sms" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:inputType="number" > 
     </EditText> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <TextView 
       android:id="@+id/ingredient_text_sms" 
       style="?android:listSeparatorTextViewStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Ingredients" /> 
     </TableRow> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="@android:color/darker_gray" /> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" > 

       <Spinner 
        android:id="@+id/imperial_spinner_sms" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:entries="@array/imperial_array" 
        android:visibility="gone" /> 

       <Spinner 
        android:id="@+id/metric_spinner_sms" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:entries="@array/metric_array" 
        android:visibility="gone" /> 
      </RelativeLayout> 

      <EditText 
       android:id="@+id/amount_text_sms" 
       android:layout_width="50dp" 
       android:layout_height="wrap_content" 
       android:ems="10" 
       android:inputType="numberDecimal" /> 

      <EditText 
       android:id="@+id/ing_name_sms" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:ems="10" /> 
     </TableRow> 

     <!-- second ingredient --> 



     <TextView 
      style="?android:listSeparatorTextViewStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Directions" /> 

     <EditText 
      android:id="@+id/directions_text_sms" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:inputType="textMultiLine" /> 

     <TextView 
      style="?android:listSeparatorTextViewStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Options" /> 

     <Button 
      android:id="@+id/save_button_sms" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Save Recipe" /> 

      <Button 
      android:id="@+id/dismiss_button_sms" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Dismiss" /> 




     <!-- DONE --> 

    </LinearLayout> 

</ScrollView> 

另外這裏是SMSViewActivity代碼:

* File: SmsViewActivity.java 

package com.example.chowpalv21; 

import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.NotificationManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.CompoundButton.OnCheckedChangeListener; 

    public class SmsViewActivity extends Activity { 



    private static final String TAG = "SmsViewActivity"; 

       private FoodJSONSerializer mSerializer; 

       // protected TextView mReceivedFromView; 

       public Button mSaveButton, mDismissButton; 
       public int mNotificationId; 
       public String message; 
       private EditText mTitleField; 
       private CheckBox mImperialCheckBox; 
       private CheckBox mMetricCheckBox; 
       private EditText mServingsField; 
       private EditText mDirectionsField; 

       // set up spinners. allows for up to ten ingredients. 
       private Spinner mMetricSpinner; 
       private Spinner mImperialSpinner; 
       Food mFood; 
       //---------------------- 

------------------------ 
      public void onCreate(Bundle savedInstanceState){ 
       setContentView(R.layout.view_sms); 
       //super.onCreate(savedInstanceState); 
      } 

      @Override 
      public View onCreateView(String name, Context context, AttributeSet attrs) { 
       //View v = findViewById(R.layout.sms_view); 
        View v = super.onCreateView(name, context, attrs); 

       mSaveButton = (Button) findViewById(R.id.save_button_sms); 
       mDismissButton = (Button) findViewById(R.id.dismiss_button_sms); 

       // ------------------------------------------------------------ 

       // Get extras and display information in view 
       //String sender = getIntent().getStringExtra("sender"); 
       String msg = getIntent().getStringExtra("message"); 
       try { 
        JSONObject jsonRecipe = new JSONObject(msg); 
        Food mFood = new Food(jsonRecipe); 
        Log.i(TAG, "Food = " + mFood); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       // ----------------------------------------------------------------------- 
       mNotificationId = getIntent().getIntExtra("notificationid", 0); 
       if (mNotificationId == 0) { 
        Log.e(TAG, "Could not retrieve notification ID."); 
        Toast.makeText(this, "A fatal error has occurred in SMS viewer.", 
          Toast.LENGTH_LONG).show(); 
        finish(); 
       } 

       // Cancel the notification 
       String ns = Context.NOTIFICATION_SERVICE; 
       NotificationManager notificationMgr = (NotificationManager) getSystemService(ns); 
       notificationMgr.cancel(mNotificationId); 

       // -------------------------------------------------- 
       mTitleField = (EditText)v. findViewById(R.id.food_title_sms); 
       mTitleField.setText(mFood.getTitle()); 

       mServingsField = (EditText)v. findViewById(R.id.food_servings_sms); 
       mServingsField.setText(mFood.getServings()); 

       mDirectionsField = (EditText)v. findViewById(R.id.directions_text_sms); 
       mDirectionsField.setText(mFood.getDirections()); 


       // -------------------------------------------------- 

       // Listener for Save button click 
       mSaveButton.setOnClickListener(new OnClickListener() { 
        public void onClick(View v) { 

         finish(); 
        } 
       }); 

       // Listener for Dismiss button click 
       mDismissButton.setOnClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         backToList(); 

         finish(); 
        } 
       }); 
     return v; 
      } 

      public void backToList() { 
       Intent i = new Intent(this, FoodListFragment.class); 
       startActivity(i); 
      } 
     } 

奇怪之處是,該異常被命名ActionBarOverlayLayout控件這是不是在我的佈局。如果有人知道這會有很大的幫助! (週一到期的項目!) 克勞迪婭

+0

u能在com.example.chowpalv21.SmsViewActivity.onCreateView(SmsViewActivity.java:121)粘貼在這裏的代碼 – Nazgul

+0

'SmsViewActivity.java:80'這是80號線 – vjdhama

+0

所有粘貼!謝謝! – CoderClouds

回答

4

你爲什麼重寫onCreateView?在onCreate()中,您使用佈局資源來設置內容。你的其他啓動代碼應該在這裏或onResume()取決於它在做什麼。試試這個...

public class SmsViewActivity extends Activity { 
    private static final String TAG = "SmsViewActivity"; 
    private FoodJSONSerializer mSerializer; 
    public Button mSaveButton, mDismissButton; 
    public int mNotificationId; 
    public String message; 
    private EditText mTitleField; 
    private CheckBox mImperialCheckBox; 
    private CheckBox mMetricCheckBox; 
    private EditText mServingsField; 
    private EditText mDirectionsField; 
    private Spinner mMetricSpinner; 
    private Spinner mImperialSpinner; 
    Food mFood;

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.view_sms); mSaveButton = (Button) findViewById(R.id.save_button_sms); mDismissButton = (Button) findViewById(R.id.dismiss_button_sms); // ------------------------------------------------------------ // Get extras and display information in view //String sender = getIntent().getStringExtra("sender"); String msg = getIntent().getStringExtra("message"); try { JSONObject jsonRecipe = new JSONObject(msg); Food mFood = new Food(jsonRecipe); Log.i(TAG, "Food = " + mFood); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } // ----------------------------------------------------------------------- mNotificationId = getIntent().getIntExtra("notificationid", 0); if (mNotificationId == 0) { Log.e(TAG, "Could not retrieve notification ID."); Toast.makeText(this, "A fatal error has occurred in SMS viewer.", Toast.LENGTH_LONG).show(); finish(); } // Cancel the notification String ns = Context.NOTIFICATION_SERVICE; NotificationManager notificationMgr = (NotificationManager) getSystemService(ns); notificationMgr.cancel(mNotificationId); // -------------------------------------------------- mTitleField = (EditText)v. findViewById(R.id.food_title_sms); mTitleField.setText(mFood.getTitle()); mServingsField = (EditText)v. findViewById(R.id.food_servings_sms); mServingsField.setText(mFood.getServings()); mDirectionsField = (EditText)v. findViewById(R.id.directions_text_sms); mDirectionsField.setText(mFood.getDirections()); // -------------------------------------------------- // Listener for Save button click mSaveButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); // Listener for Dismiss button click mDismissButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { backToList(); finish(); } }); return v; } public void backToList() { Intent i = new Intent(this, FoodListFragment.class); startActivity(i); } }
+0

謝謝您的解答!這對我幫助很大!我只是做了一些小的修改(使用'this'作爲實例變量等) – CoderClouds

+0

沒問題。很高興它解決了。請在有機會時投票回答。謝謝! – KMLong

相關問題