簡體   English   中英

某些設備上的黃油刀注射問題

[英]ButterKnife injection issue on some devices

我無法復制它,但是我已經看到這種視圖注入崩潰通過Crashlytics影響了大約5-10%的用戶。

該應用程序可以很好地滿足我的所有要求,但是某些用戶肯定沒有這種體驗。

我想念什么? 為什么在某些設備上會發生這種情況,而在同一型號的其他設備上卻不會發生這種情況?

受影響的設備包括Nexus 4和Nexus5。我在這兩個設備上都嘗試過(Nexus 4是我的主要設備),沒有任何問題。 受影響的還有幾個三星。

有任何想法嗎?

這是完整的堆棧跟蹤,然后是愚蠢的簡單類和布局xml:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package.app/com.package.app.WelcomeActivity}: java.lang.RuntimeException: Unable to inject views for com.package.app.WelcomeActivity@42b210a8
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
          at android.app.ActivityThread.access$800(ActivityThread.java:157)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:157)
          at android.app.ActivityThread.main(ActivityThread.java:5293)
          at java.lang.reflect.Method.invokeNative(Method.java)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
          at dalvik.system.NativeStart.main(NativeStart.java)
   Caused by: java.lang.RuntimeException: Unable to inject views for com.package.app.WelcomeActivity@42b210a8
          at butterknife.ButterKnife.inject(ButterKnife.java:263)
          at butterknife.ButterKnife.inject(ButterKnife.java:165)
          at com.package.app.WelcomeActivity.onCreate(WelcomeActivity.java:30)
          at android.app.Activity.performCreate(Activity.java:5389)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
          at android.app.ActivityThread.access$800(ActivityThread.java:157)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:157)
          at android.app.ActivityThread.main(ActivityThread.java:5293)
          at java.lang.reflect.Method.invokeNative(Method.java)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
          at dalvik.system.NativeStart.main(NativeStart.java)
   Caused by: java.lang.IllegalStateException: Required view with id '2131296260' for field 'mButtonScores' was not found. If this view is optional add '@Optional' annotation.
          at butterknife.ButterKnife$Finder.findRequiredView(ButterKnife.java:122)
          at com.package.app.WelcomeActivity$$ViewInjector.inject(WelcomeActivity$$ViewInjector.java:12)
          at java.lang.reflect.Method.invokeNative(Method.java)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at butterknife.ButterKnife.inject(ButterKnife.java:254)
          at butterknife.ButterKnife.inject(ButterKnife.java:165)
          at com.package.app.WelcomeActivity.onCreate(WelcomeActivity.java:30)
          at android.app.Activity.performCreate(Activity.java:5389)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
          at android.app.ActivityThread.access$800(ActivityThread.java:157)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:157)
          at android.app.ActivityThread.main(ActivityThread.java:5293)
          at java.lang.reflect.Method.invokeNative(Method.java)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
          at dalvik.system.NativeStart.main(NativeStart.java)

-WelcomeActivity.java

public class WelcomeActivity extends FretsActivity {

    private Context mContext;

    @InjectView(R.id.buttonPlay) public Button mButtonPlay;
    @InjectView(R.id.buttonScores) public Button mButtonScores;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        setContentView(R.layout.activity_welcome);

        mContext = this;
        ButterKnife.inject(this);

        mButtonPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, MainActivity.class);
                startActivity(intent);
            }
        });

        mButtonScores.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, ScoreActivity.class);
                startActivity(intent);
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.welcome, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

-activity_welcome.xml

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.package.app.screens.WelcomeActivity">

    <ImageView
        android:id="@+id/imageLogo"
        android:src="@drawable/logo"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:layout_width="140dp"
        android:layout_height="80dp" />

    <TextView
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/imageLogo"
        android:text="Play the Game"
        android:fontFamily="sans-serif-thin"
        android:layout_width="wrap_content"
        android:textSize="36sp"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/buttonPlay"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="24dp"
        style="@style/QuizButton"
        android:text="@string/menu_play"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/buttonScores"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="@string/menu_scores"
        style="@style/QuizButton"
        android:layout_marginBottom="24dp"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:textSize="18sp"
        android:paddingTop="@dimen/vertical_padding_half"
        android:paddingBottom="@dimen/vertical_padding_half"
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

即使AndroidManifest禁止,也可以通過多種方式將活動強制為縱向模式。 我在您的應用中嘗試了https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.setorientation ,但遇到了您提到的異常。

因此,我建議您檢查一下布局,可能是您忘記了一些以縱向模式加載且不包含buttonScores

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM