Android Studio提示错误,但程序却可以运行,什么情况?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio提示错误,但程序却可以运行,什么情况?相关的知识,希望对你有一定的参考价值。

如图,MainActivity提示有两个错误、两个警告,但程序却可以运行。还有,不知道在哪儿能看到具体的错误提示。

首先升级ADT到最新版本,目前为版本号为22(注意和ADT相关的组件最好一并升级,避免后期可能出现的错误) 选择需要从Eclipse导出的工程,右键选择Export并选择android下的Generate 随后进入Android Studio并选择Import Project,可以看到刚刚在E 参考技术A Android Studio提示错误原因很多,先卸载重装。升级ADT到最新版本,目前为版本号为22(注意和ADT相关的组件最好一并升级,避免后期可能出现的错误) 选择需要从Eclipse导出的工程,右键选择Export并选择Android下的Generate 随后进入Android Studio并选择Import Project。 参考技术B 一、自带清除缓存
点击AndroidStudio菜单File -> Invalidate Caches/Restar… ,在弹出的对话框中点击Invalidate and Restar
。等待AS清理并自动重启。
二、删除user目录下.AndroidStudio中的文件
关闭AndroidStudio,进入C:\Users\xUser.AndroidStudio3.1(3.1为当前AS版本号),删除除了config以外的文件。重新打开AndroidStudio会自动Sync,等待同步完成。
参考技术C 点击AndroidStudio菜单File -> Invalidate Caches/Restart… ,在弹出的对话框中点击Invalidate and Restart,等重新打开可能就没问题了吧

可滑动视图空异常错误 - Android Studio [重复]

【中文标题】可滑动视图空异常错误 - Android Studio [重复]【英文标题】:Swipeable Views Null Exception Error - Android Studio [duplicate] 【发布时间】:2018-11-11 16:01:28 【问题描述】:

当尝试运行应用并在视图之间滑动时,应用会因空对象引用错误而崩溃。我已经仔细检查了我的 getItem 方法,以确保它可以处理这个问题,但应用程序仍然崩溃。应用程序在第一个视图上运行良好,但在尝试滑动到第二个和第三个视图时崩溃。

如果有人能澄清错误是什么,将不胜感激。

我还在代码下方包含了错误日志。

public class MainActivity extends AppCompatActivity 

private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        
    );




@Override
public boolean onCreateOptionsMenu(Menu menu) 
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) 
        return true;
    

    return super.onOptionsItemSelected(item);



public class SectionsPagerAdapter extends FragmentPagerAdapter 

    public SectionsPagerAdapter(FragmentManager fm) 
        super(fm);
    

    @Override
    public Fragment getItem(int position) 
        //returning the current tabs
        switch (position)
            case 0:
                Tab1 tab1 = new Tab1();
                return tab1;
            case 1:
                Tab2 tab2 = new Tab2();
                return tab2;
            case 3:
                Tab3 tab3 = new Tab3();
                return tab3;
            default:
                return null;
        
    

    @Override
    public int getCount() 
        // Show 3 total pages.
        return 3;
    


这是错误日志;

java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.Class java.lang.Object.getClass()” 参考 在 android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:394) 在 android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389) 在 android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:104) 在 android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1216) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1084) 在 android.support.v4.view.ViewPager$3.run(ViewPager.java:267) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 在 android.view.Choreographer.doCallbacks(Choreographer.java:723) 在 android.view.Choreographer.doFrame(Choreographer.java:655) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

【问题讨论】:

【参考方案1】:

问题出在这段代码中:

@Override
public Fragment getItem(int position) 
    //returning the current tabs
    switch (position)
        case 0:
            Tab1 tab1 = new Tab1();
            return tab1;
        case 1:
            Tab2 tab2 = new Tab2();
            return tab2;
        case 3:
            Tab3 tab3 = new Tab3();
            return tab3;
        default:
            return null;
    

具体来说,这一行:

case 3:

这应该是case 2。就像现在一样,您将从 default 案例返回 null 用于您的第三页。


顺便说一句,我建议您改变您以后处理此类情况的方式。而不是从默认情况下返回null,我认为你应该这样做:

case default:
    throw new IllegalArgumentException("unexpected position: " + position);

如果你有这个而不是return null,你的错误会更加明显。你会看到

IllegalArgumentException:意外位置:2

这会帮助您发现case 3 中的错字。

一般来说,当你的程序在不应该出现的地方时,你应该总是抛出异常而不是返回一些默认值。

【讨论】:

它成功了,谢谢。在默认情况下打印堆栈跟踪是否明智? 如果抛出异常,默认会得到一个stacktrace

以上是关于Android Studio提示错误,但程序却可以运行,什么情况?的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行应用程序时修复 android studio 版本 3.6.2 中的“无法解析结果路径字符串:”错误?

android studio提示没有JVM

(推测)Android Studio 中的错误错误,但编译器和应用程序运行良好

Android Studio找不到module里的aar

Android Studio 编译Gradle提示编码错误

Android Studio 库项目错误