错误:活动类{.MainActivity}不存在

时间:2019-11-11 03:05:40

标签: java android

我试图在我的android设备上运行我的android应用程序,但它一直说我的Main Activity类不存在,尽管我的Main Activity类在那里

我试图创建一个新项目,然后复制了以前的代码,并且工作了一段时间。但是随后又产生了相同的错误。

Error while executing: am start -n "com.example.sms/com.example.sms.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.sms/.MainActivity }
Error type 3
Error: Activity class {com.example.sms/com.example.sms.MainActivity} does not exist.

Error while Launching activity


可能在android清单中已经有一个意图过滤器:

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

我已经尝试清理并重建项目。但是它仍然会出现相同的错误。我的android设备的版本是android 9。

这是我的主要活动:

package com.example.sms;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText etNumber, etMessage;
    Button btnSend;


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

        etNumber = (EditText)findViewById(R.id.etNumber);
        btnSend = (Button)findViewById(R.id.btnSend);
        btnSend.setOnClickListener(this);

    }

    public void MyMessage() {

        String phoneNum = etNumber.getText().toString().trim();
        String spamMessage = "Hi";

        if (etNumber.getText().toString().equals("09152006203")) {
            if (!etNumber.getText().toString().equals("")) {
                SmsManager smsManager = SmsManager.getDefault();
                ArrayList<String> sms = smsManager.divideMessage(spamMessage);
                smsManager.sendMultipartTextMessage(phoneNum, null,sms,null, null);

                Toast.makeText(this, "Message has been sent", Toast.LENGTH_SHORT).show();

            } else {
                Toast.makeText(this, "Please enter number or message", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this, "Number is incorrect!", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch(requestCode){

            case 0:
                if(grantResults.length>=0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    MyMessage();
                } else {
                    Toast.makeText(this, "You do not have required permission", Toast.LENGTH_SHORT).show();
                }
        }
    }

    @Override
    public void onClick(View v) {
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS);

        if(permissionCheck == PackageManager.PERMISSION_GRANTED){
            MyMessage();
        }
        else{
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 0);
        }


    }
}

8 个答案:

答案 0 :(得分:4)

您可以尝试使用以下ADB命令卸载应用并重新运行吗?

adb uninstall <your-apps-package-name>

答案 1 :(得分:1)

您可以删除想法文件夹,然后重新启动项目。

答案 2 :(得分:0)

intent-filter添加到AndroidManifest.xml

<activity
    android:name=“.MainActivity”>
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

答案 3 :(得分:0)

选择路径:

标签运行/编辑配置/常规标签/午餐选项/启动。

并选择默认活动选项。 如果问题仍未解决,请选择“指定活动”选项,然后选择MainActivity。

如果问题得以解决,则活动路径可能位于错误的androidManifest中。您可以在androidmanifest中完全编写路径。

<activity android:name="path.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

在上面的代码中,写活动的路径而不是单词path。 然后返回应用程序配置并再次选择默认活动。

答案 4 :(得分:0)

尝试

<activity android:name="MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name="com.example.sms.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

答案 5 :(得分:0)

您可以在Error type 3 Error: Activity class {} does not exist处查看此回复。

另外,另一个常见问题是,如果您在具有多个用户帐户的物理设备上运行应用程序。例如。主要用户和访客用户。在这种情况下,如果一个用户不更新其应用程序,则可能会发生冲突。请执行以下步骤;

  1. 转到“设置”。
  2. 转到应用。
  3. 选择您的应用。
  4. 打开右上角的溢出菜单,然后为所有用户选择“卸载”。
  5. 完成。尝试安装,然后再次启动您的应用。

另一种较长的选择是在一个帐户中卸载应用程序,然后切换帐户并在另一个帐户中卸载。

希望有帮助。

答案 6 :(得分:0)

我发生了同样的错误,我通过重命名程序包并使用“清理项目并重建项目”来解决了该问题……然后我关闭了android stodio并重新启动它,然后它运行正常。

答案 7 :(得分:0)

当我在AVD上启用指纹/ PIN锁定并随后运行该应用程序时,我曾经发生过这种情况。

我发现我需要在运行应用程序之前解锁设备。