2

我在为 Android 开发应用程序时遇到了一个奇怪的问题。我正在尝试使用我的手机(一加一)、Android Studio 和 ADB 调试我的应用程序。一切正常,除了当我启动一个已经在 Android Studio 中设置断点的活动时,它会崩溃而没有日志输出。当活动是启动活动和我开始有意图的活动时,都会发生这种情况。

正如你所想象的那样,这非常令人恼火,因为我的onCreate()方法中有一个我想闯入的错误。

我曾尝试将该行添加Debug.waitForDebugger()到断点上方的代码位中,但这无济于事。

我没有向这个问题添加任何代码,因为这个错误与代码无关。它发生在多个项目和活动中。我没有另一部 Android 手机可以对其进行测试,因此无法检查。有没有其他人经历过这个和/或找到解决办法?

提前致谢。

编辑:添加了代码示例。当没有设置断点时,这段代码不会崩溃,断点也不需要在这段代码中才能发生崩溃。这只是我正在尝试调试的代码,如果不了解我的服务器后端,就无法修复其行为,因此我不寻求帮助。

protected void onCreate(Bundle savedInstanceState) {
    //Create activity
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Check for play services
    if (!checkPlayServices()){
        //Exit and notify user that play services are required
        Toast.makeText(this, "Google Play Services must be installed for Insty to work", Toast.LENGTH_LONG).show();
        System.exit(1);
        }

    //Get token. If null, push to login screen
    SharedPreferences sp = getBaseContext().getSharedPreferences(NetService.SP_APP, Context.MODE_PRIVATE);
    if (!sp.contains(NetService.SP_TOKEN)){
        //Token doesn't exist - push to login screen
        startActivity(new Intent(MainActivity.this, LoginActivity.class));
        MainActivity.this.finish();
        return;
    }

    //Setup action bar
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    //Populate navigation drawer
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)findViewById(R.id.left_drawer);
    String[] menuItems = getResources().getStringArray(R.array.menu_items);
    mDrawerList.setAdapter(new ArrayAdapter<>(this, R.layout.drawer_list_item, menuItems));
    //Set an on click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    //Add to action bar
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_drawer, R.string.close_drawer){
        @Override
        public void onDrawerClosed(View view){
            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View view){
            invalidateOptionsMenu();
        }
    };

    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

    //Start a token verification
    ResultReceiver receiver = new ResultReceiver(new Handler()){
        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            VerifyResult result = VerifyResult.values()[resultData.getInt(NetService.RESULT_VERIFY)];
            switch (result){
                case VALID:
                    //Do nothing
                    break;

                case INVALID:
                    //Push back to login screen
                    startActivity(new Intent(MainActivity.this, LoginActivity.class));
                    MainActivity.this.finish();
                    break;

                case BAD_NETWORK:
                    //Toast to let user know network is down
                    Toast.makeText(MainActivity.this, R.string.bad_network, Toast.LENGTH_LONG).show();
                    break;

                case ERROR:
                    //Toast to show error
                    Toast.makeText(MainActivity.this, R.string.generic_error, Toast.LENGTH_LONG).show();
                    break;
            }
        }
    };
    //Start verify
    NetService.startActionVerify(this, receiver, sp.getString(NetService.SP_TOKEN, ""));

    //Open on chats fragment
    FragmentManager fragMgr = getFragmentManager();
    fragMgr.beginTransaction().replace(R.id.content_frame, new ChatsFragment()).commit();

}
4

2 回答 2

0

Android Studio 的最新版本(1.1-1.2)有一些调试错误,可能是新的内联调试功能造成的。里面有一个问题主题和一个解决方案。试一试,它解决了我的调试问题。

于 2015-06-23T09:15:01.000 回答
0

在具有较新 SDK 的另一台设备上进行测试。在 Nexus 5X API 27 上遇到同样的问题,而在 Pixel XL API 32 上工作正常。

于 2022-02-10T14:22:22.910 回答