【问题标题】:Android - Crash when image button clickedAndroid - 单击图像按钮时崩溃
【发布时间】:2014-09-08 19:09:16
【问题描述】:

当我单击图像按钮时,我的应用程序崩溃。 它也发生在模拟器和真实手机上。我用这里的一些线程和其他一些论坛检查了我的代码,但我找不到错误。我很高兴有任何解决方案!

MainActivity.class

public class MainActivity extends Activity {

    public static final String PREFS_NAME = "MyPrefsFile";

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

        addListenerOnButton1();
        addListenerOnButton2();
        addListenerOnButton3();
        addListenerOnButton4();
        addListenerOnButton5();
        addListenerOnButton6();
        addListenerOnButton7();

        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        boolean dialogShown = settings.getBoolean("dialogShown", false);

        if (!dialogShown) {
          // AlertDialog code here
            new AlertDialog.Builder(this).setTitle(R.string.alter_title).setMessage(R.string.alter_content).setNeutralButton(R.string.alter_button, null).show();


          SharedPreferences.Editor editor = settings.edit();
          editor.putBoolean("dialogShown", true);
          editor.commit();    

        }
    }

    public void addListenerOnButton1() {

        ImageButton imgbutton1 = (ImageButton) findViewById(R.id.imageButton1);
        imgbutton1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "http://www.arcig.cz/bakalari/suplov.htm";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });

    }

    public void addListenerOnButton2() {

        ImageButton imgbutton2 = (ImageButton) findViewById(R.id.imageButton2);
        imgbutton2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "http://www.arcig.cz/bakalari/rozvrh.htm";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });
    }

    public void addListenerOnButton3() {

        ImageButton imgbutton3 = (ImageButton) findViewById(R.id.imageButton3);
        imgbutton3.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "http://www.arcig.cz/bakaweb/login.aspx";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });
    }

    public void addListenerOnButton4() {

        ImageButton imgbutton4 = (ImageButton) findViewById(R.id.imageButton4);
        imgbutton4.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "https://www.arcig.cz/roundcube/";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });
    }

    public void addListenerOnButton5() {

        ImageButton imgbutton5 = (ImageButton) findViewById(R.id.imageButton5);
        imgbutton5.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "http://www.arcig.cz/modules.php?op=modload&name=Web_Links&file=index&req=visit&lid=58";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });
    }

    public void addListenerOnButton6() {

        ImageButton imgbutton6 = (ImageButton) findViewById(R.id.imageButton6);
        imgbutton6.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String url = "http://strav.nasejidelna.cz/0082/faces/login.jsp";

                Intent myIntent = new Intent(MainActivity.this, WebviewActivity.class);
                myIntent.putExtra("url", url);
                startActivity(myIntent);
            }
        });
    }

    public void addListenerOnButton7() {

        ImageButton imgButton7 = (ImageButton) findViewById(R.id.imageButton7);
        imgButton7.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent myIntent = new Intent(MainActivity.this, HelpActivity.class);
                MainActivity.this.startActivity(myIntent);

            }

        });

    }

}

HelpActivity.class

public class HelpActivity extends ActionBarActivity {

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

        addListenerOnButtonHelp();

    }

    public void addListenerOnButtonHelp() {

        Button buttonhelp = (Button) findViewById(R.id.buttonback);
        buttonhelp.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent myIntent = new Intent(HelpActivity.this, MainActivity.class);
                HelpActivity.this.startActivity(myIntent);

            }

        });
    }

}

LogCat 日志

09-08 21:05:48.173: E/AndroidRuntime(9781): FATAL EXCEPTION: main
09-08 21:05:48.173: E/AndroidRuntime(9781): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tona.arcig/com.tona.arcig.HelpActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread.access$600(ActivityThread.java:156)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.os.Looper.loop(Looper.java:153)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread.main(ActivityThread.java:5297)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at java.lang.reflect.Method.invokeNative(Native Method)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at java.lang.reflect.Method.invoke(Method.java:511)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at dalvik.system.NativeStart.main(Native Method)
09-08 21:05:48.173: E/AndroidRuntime(9781): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at com.tona.arcig.HelpActivity.onCreate(HelpActivity.java:14)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.Activity.performCreate(Activity.java:5262)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
09-08 21:05:48.173: E/AndroidRuntime(9781):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
09-08 21:05:48.173: E/AndroidRuntime(9781):     ... 11 more
09-08 21:05:48.951: D/dalvikvm(9781): threadid=11: interp stack at 0x5ebab000

请帮忙。抱歉英语不好,我来自捷克代表。谢谢

【问题讨论】:

  • Logcat 说“你需要在这个活动中使用 Theme.AppCompat 主题(或后代)。”发布你的应用清单
  • HelpActivity 类扩展了什么??
  • HelpActivity 的清单中使用 android:theme="@android:style/Theme.AppCompat" 这将解决您的问题。
  • @SagarPilkhwal 编辑问题时不要删除 OPs 代码,即使代码看起来不需要/对问题来说微不足道。
  • 好的,admdrew,我会记住这一点的,谢谢......

标签: android crash click imagebutton android-imagebutton


【解决方案1】:

线索在您的 LogCat 输出中:

原因:java.lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。

因此,对于派生自 ActionBarActivity 的 HelpActivity,您需要使用 Theme.AppCompat。

在这里阅读 - https://developer.android.com/training/basics/actionbar/styling.html。 打开你的Android Manifest,找到HelpActivity,添加 android:theme="@android:style/Theme.AppCompat" 用于深色主题或 "Theme.AppCompat.Light" 用于浅色主题。

【讨论】:

  • 谢谢兄弟!我使用了 android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 看起来不错!再次感谢您!
  • 没问题。除此之外,您的代码几乎是效率低下的一个例子。将你所有的 URL 变成一个静态数组,编写一个方法来启动一个带有参数 URL 的 webview。每个活动设置一个侦听器。在侦听器中检查发送点击的视图,在数组中找到 URL 并传递给方法。
  • 我是 java/andrid 的新手,请问您能帮我解释一下吗?谢谢
  • 公共类 MainActivity 扩展 Activity 实现 OnClickListener{ private static String myUrls = { "arcig.cz/bakalari/suplov.htm", "arcig.cz/bakalari/rozvrh.htm"} private void launchUrl(String url){ Intent myIntent = new Intent(MainActivity.这个,WebviewActivity.class); myIntent.putExtra("url", url);开始活动(我的意图); } public void onClick(View v) { switch (v.getId()) { case R.id.R.id.imageButton1:launchUrl(myUrls[0]);休息;案例 R.id.R.id.imageButton2:launchUrl(myUrls[1]);休息;默认值:中断; } }
【解决方案2】:

LogCat 显示 IllegalStateException。这里有一个类似的问题:

ActionBarCompat: java.lang.IllegalStateException: You need to use a Theme.AppCompat

您似乎需要根据 LogCat 消息更改主题 XML 文件中的主题以匹配所需的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多