RuntimeException:无法启动活动ComponentInfo {...}:android.view.InflateException

时间:2013-12-03 16:09:39

标签: java android runtimeexception inflate-exception

当我启动我的应用程序时崩溃并且logcat说:

12-03 16:52:12.486    8252-8252/de.kanalmeister.presentation E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: de.kanalmeister.presentation, PID: 8252
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.kanalmeister.presentation/de.kanalmeister.presentation.MainActivity}: android.view.InflateException: Binary XML file line #27: Error inflating class <unknown>
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
        at android.app.ActivityThread.access$700(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4998)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #27: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:620)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at android.widget.Toast.makeText(Toast.java:245)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:237)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActivity.createError(MainActivity.java:239)
        at de.kanalmeister.presentation.MainActivity.postData(MainActivity.java:231)
        at de.kanalmeister.presentation.MainActi

我已经检查了我的布局文件,因为它说“... InflateException:二进制XML文件行#27 ......”但我没有发现错误。

布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".MainActivity"
android:longClickable="false">

<!-- The primary full-screen view. This can be replaced with whatever view
     is needed to present your content, e.g. VideoView, SurfaceView,
     TextureView, etc. -->

<!-- This FrameLayout insets its children based on system windows using
     android:fitsSystemWindows. -->
<VideoView
    android:id="@+id/surface_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center" />

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="New Text"
    android:id="@+id/textView"
    android:layout_gravity="center"
    android:textSize="40sp"
    android:textAlignment="center"
    android:gravity="center_vertical|center_horizontal"
    android:visibility="invisible" />

</FrameLayout>
我的MainActivity的代码:

package de.kanalmeister.presentation;

import ...

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        String[] deviceID = {"***********", "***************"}; //IMEI von testgerät (**********: *************)
        int i = 0;
        boolean testgeraet = false;

        Calendar cal = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        Calendar cal3 = Calendar.getInstance();
        Calendar cal4 = Calendar.getInstance();
        Calendar cal5 = Calendar.getInstance();

        cal2.set(2014, Calendar.MAY, 8, 14, 0, 0);
        cal3.set(2014, Calendar.MAY, 8, 15, 35, 0);
        cal4.set(2014, Calendar.MAY, 15, 14, 0, 0);
        cal5.set(2014, Calendar.MAY, 15, 15, 35, 0);

        TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        setContentView(R.layout.activity_main); //layout-datei festlegen

        for (i = 0; i < deviceID.length; i++)
        {
            testgeraet = tMgr.getDeviceId().equals(deviceID[i]); //IMEI mit IMEI von zugelassenen testgeräten vergleichen
        }

        if (testgeraet)
        {
            start(true);
        }

        else
        {
            if (((cal3.getTimeInMillis() >= cal.getTimeInMillis()) && (cal.getTimeInMillis() >= cal2.getTimeInMillis()))
                    || ((cal5.getTimeInMillis() >= cal.getTimeInMillis()) && (cal.getTimeInMillis() >= cal4.getTimeInMillis()))) //aktuelles datum mit präsentationszeitraum vergleichen.
            {
                start(false);
            }

            else
            {
                if((cal5.getTimeInMillis() + 600000) < cal.getTimeInMillis()) //prüfen ab präsentation bereits vorbei
                {
                    TextView textView = (TextView) findViewById(R.id.textView);
                    textView.setVisibility(TextView.VISIBLE);
                    textView.setText("Die Präsentation ist vorbei. Die Urheberrechtlich geschützten Daten werden nun gelöscht. Die App ist danach unbrauchbar und sollte deinstalliert werden.");

                    try
                    {
                        sleep(5000);
                    }

                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }

                    if(delete("android.resource://" + getPackageName() + "/" + R.raw.trailer)) //wenn löschen erfolgreich
                    {
                        Intent intent = new Intent(Intent.ACTION_DELETE);
                        intent.setData(Uri.parse("package:" + this.getPackageName()));
                        startActivity(intent); //nutzer zum deinstallations-screen weiterleiten
                    }

                    else
                    {
                        createError(102);

                        textView.setText("Die Daten konnten nicht automatisch gelöscht werden. Deinstalliere die App bitte manuell. Wenn du die Daten aus der App kopierst, handelst du Rechtswidrig. Dies kann Straf- und Zivilrechtlich verfolgt werden.");

                        try
                        {
                            sleep(5000);
                        }

                        catch (InterruptedException e)
                        {
                            e.printStackTrace();
                        }

                        Intent intent = new Intent(Intent.ACTION_DELETE);
                        intent.setData(Uri.parse("package:" + this.getPackageName()));
                        startActivity(intent); //nutzer zum deinstallations-screen weiterleiten
                    }
                }

                else
                {
                    TextView textView = (TextView) findViewById(R.id.textView);
                    textView.setVisibility(TextView.VISIBLE);
                    textView.setText("Inhalt gesperrt! Bitte versuche es am 08.05.2014 oder 15.05.2014 zwischen 14:00-15:35 Uhr erneut.");

                    File file = new File("android.resource://" + getPackageName() + "/" + R.raw.trailer);

                    if (!file.setReadable(false)) //dateien vor zugriff schützen
                    {
                        createError(101);
                    }
                }
            }
        }
    }

    public void onPause()
    {
        //startService(new Intent(this, notifyService.class));
    }

    public boolean delete(String path) //datei löschen
    {
        File file = new File(path);
        return file.delete();
    }

    public void start(boolean tester)
    {
        File file = new File("android.resource://" + getPackageName() + "/" + R.raw.trailer);

        if (!file.setReadable(true)) //zugriff erlauben
        {
            createError(101);
        }

        final VideoView videoView = (VideoView) findViewById(R.id.surface_view);

        videoView.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.trailer);

        videoView.start(); //video starten

        int score = 0;

        postData(getUserName(tester), score, false); //highscore senden

        //Intent i = new Intent(this, SettingsActivity.class);
        //startActivity(i);
    }

    public String getUserName(boolean tester)
    {
        AccountManager am = AccountManager.get(this); // "this" references the current Context
        Account[] accounts = new Account[0];

        if (am != null)
        {
            accounts = am.getAccountsByType("com.google");
        }

        if (tester)
        {
            return "TESTER_" + accounts[0].name;
        }
        else
        {
            return accounts[0].name;
        }
    }

    public void postData(String userName, int score, boolean error) //highscore senden
    {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost;
        String name1="username";
        String name2;

        if (error)
        {
            httppost = new HttpPost("http://testserver.info.cm/error_write.php");
            name2="errorcode";
        }

        else
        {
            httppost = new HttpPost("http://testserver.info.cm/highscore_write.php");
            name2="score";
        }

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair(name1, userName));
            nameValuePairs.add(new BasicNameValuePair(name2, String.valueOf(score)));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);

        } catch (ClientProtocolException e) {
            createError(201);
        } catch (IOException e) {
            createError(202);
        }
    }

    public void createError(int errorcode)
    {
        Toast err = Toast.makeText(this, "Fehler " + String.valueOf(errorcode) + ". Die Daten werden automatisch an den Entwickler übermittelt.", Toast.LENGTH_SHORT);
        err.show();
        postData(getUserName(false), errorcode, true);
    }
}

和我的androidmanifest:

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

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <application
        android:allowBackup="false"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="de.kanalmeister.presentation.MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="de.kanalmeister.presentation.SettingsActivity"
            android:label="@string/title_activity_settings" >
        </activity>

        <service android:enabled="true" android:name=".notifyService" />
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

我认为你因为这行而得到错误

  android:textAlignment="center"

TextView中使用。我已经复制了你的xml布局。和Eclipse向我显示错误,指出包textAlignment中没有android的资源标识符。

从TextView中删除android:textAlignment="center"属性并尝试一次...