当前位置: 首页 > 知识库问答 >
问题:

运行startActivity(intent)时,new intent崩溃;

卫诚
2023-03-14

我试图在选项菜单中从主菜单调用另一个活动。当我从自己的选项菜单中调用主活动时,它将正常工作,但调用另一个意图将产生异常,应用程序将崩溃。我使用了try and catch,发现当它到达这条线时会崩溃:

startActivity(intent);

下面是我的主java文件和应用程序清单文件

public class MainActivity extends Activity {

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

    ListView listView = (ListView) findViewById(R.id.times_list);
    TimeTrackerAdapter timeTrackerAdapter = new TimeTrackerAdapter();
    listView.setAdapter(timeTrackerAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.main, menu);
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.time_list_menu, menu);
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item){
    if (item.getItemId() == R.id.add_time_menu_item) {
        Intent intent = new Intent(this, AddTimeActivity.class);
        try {
        startActivity(intent);
        }catch(Exception e){};
        //return true;
    }
    return super.onOptionsItemSelected(item);
}

public class TimeTrackerAdapter extends BaseAdapter {

    private ArrayList<TimeRecord> times = new ArrayList<TimeRecord>();

    public TimeTrackerAdapter() {
        times.add(new TimeRecord("38:23", "Feeling good!"));
        times.add(new TimeRecord("49:01", "Tired. Needed more caffeine"));
        times.add(new TimeRecord("26:21", "I’m rocking it!"));
        times.add(new TimeRecord("29:42",
                "Lost some time on the hills, but pretty good."));
    }

    @Override
    public int getCount() {
        return times.size();
    }

    @Override
    public Object getItem(int index) {
        return times.get(index);
    }

    @Override
    public long getItemId(int index) {
        return index;
    }

    @Override
    public View getView(int index, View view, ViewGroup parent) {
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent
                    .getContext());
            view = inflater.inflate(R.layout.time_list_item, parent, false);
        }
        TimeRecord time = times.get(index);

        TextView timeTextView = (TextView) view
                .findViewById(R.id.time_view);
        timeTextView.setText(time.getTime());

        TextView notesTextView = (TextView) view
                .findViewById(R.id.notes_view);
        notesTextView.setText(time.getNotes());

        return view;
    }
}

public class TimeRecord {
    private String time;
    private String notes;

    public TimeRecord(String time, String notes) {
        this.time = time;
        this.notes = notes;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }
}

public class AddTimeActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_time);
    }

    public boolean onCreateOptionsMenu(Menu m) {
        super.onCreateOptionsMenu(m);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.time_list_menu, m);
        return true;
    }
}

}

对于manirfest:

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

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.test02.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.test02.AddTimeActivity" >
    </activity>
</application>

</manifest>

Logcat:

01-15 02:20:01.164: W/dalvikvm(3018): threadid=1: thread exiting with uncaught exception (group=0x41465700)
01-15 02:20:01.414: E/AndroidRuntime(3018): FATAL EXCEPTION: main
01-15 02:20:01.414: E/AndroidRuntime(3018): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.test02/com.example.test02.MainActivity$AddTimeActivity}; have you declared this activity in your AndroidManifest.xml?
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Activity.startActivityForResult(Activity.java:3390)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Activity.startActivityForResult(Activity.java:3351)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Activity.startActivity(Activity.java:3587)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.Activity.startActivity(Activity.java:3555)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.example.test02.MainActivity.onMenuItemSelected(MainActivity.java:44)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java??:986)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.??java:735)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:87??4)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.j??ava:166)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.widget.AbsListView$1.run(AbsListView.java:3463)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.os.Handler.handleCallback(Handler.java:730)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.os.Handler.dispatchMessage(Handler.java:92)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.os.Looper.loop(Looper.java:137)
01-15 02:20:01.414: E/AndroidRuntime(3018): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-15 02:20:01.414: E/AndroidRuntime(3018): at java.lang.reflect.Method.invokeNative(Native Method)
01-15 02:20:01.414: E/AndroidRuntime(3018): at java.lang.reflect.Method.invoke(Method.java:525)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-15 02:20:01.414: E/AndroidRuntime(3018): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 

共有3个答案

商和颂
2023-03-14

在这里,您可以在MainActive类中创建AddTimeActive类。

注意:当不需要时,在一个类中编写多个嵌套类不是一个好的编码标准。

遵循一些步骤:

1:只需从MainActivity中删除AddTimeActivity并创建一个新的。

第二:在你的清单中,只需将其用作:

<activity android:name=".AddTimeActivity" />

然后检查。。

权玉泽
2023-03-14

你没有把这些活动放在同一个文件里,对吗?

如果您真的想在另一个活动中使用该活动作为内部类,则需要将其放在android清单中:

   <activity android:name="com.example.test02.MainActivity$AddTimeActivity" >

我不建议这样做。把你的内部类分成两个不同的类文件。

在包/文件夹:com.example.test02中,您需要将其分开,并制作两个文件addTimeActivity.classMainActivity.class,然后您不需要更改清单中的任何内容。

你试过确保包裹名称匹配吗?您能否在评论中发布您的进口/包装名称以进一步澄清?

陆博易
2023-03-14

将其添加到AndroidManifest中。xml

<activity
   android:name="com.example.test02.AddTimeActivity"
   android:label="@string/app_name">
 <intent-filter>
   <action android:name="android.intent.action.AddTimeActivity" />
   <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity>
 类似资料:
  • 我有一个问题关于start活动(意图)和onStop。Android API建议在onStop中保存数据,这就是我在这里所做的: 但是,我想在保存下一个活动后启动它-因此我需要使用intent和startActivity(intent)。 我的问题是,带两个标志的startActivity(intent)是在完成应用程序时调用onStop()方法,还是需要调用finish()?是否允许我在开始新活

  • 下面是我的代码位。 日志附在下面。 2021-05-12 13:40:27.167 6451-6451/Testpackage E/AndroidRuntime:致命异常:主进程:Testpackage,PID:6451 android。所容纳之物ActivityNotFoundException:未找到可处理Intent{act=android.Intent.action.VIEW dat的活动

  • 每次我点击按钮1,我的应用程序就会崩溃。同一活动中的另一个按钮可以正常工作。我已经试过更换按钮和代码了。控制台中没有错误。

  • 在启动activity中找不到合适的方法是显示错误的错误是: 错误:(123,17)错误:找不到适合startActivities(Intent)方法上下文的方法。startActivities(Intent[])不适用(参数不匹配;Intent无法转换为Intent[])方法上下文。startActivities(Intent[])不适用(参数不匹配;Intent无法转换为Intent[])方法

  • 我已经使用Sourceforge存储库在我的Raspberry Pi上编译了OpenCV 2.4.6。我使用以下命令安装它: 我编译时没有错误。我正在使用人脸识别API从通过Raspberry Pi摄像头模块捕获的视频中识别人脸。我正在使用一个名为RaspiCam的C API从相机捕获帧,它与OpenCV兼容,允许您将捕获的帧保存为OpenCV Mat对象。API的文档位于http://www.u

  • 在旁观者(@NonNull视听者持有人,国际位置)上的公共空白{ 单击cardView时,Intent不会传递给其他活动。