【问题标题】:Class for Name requires full path and cant find with just the class name - android名称类需要完整路径,仅使用类名无法找到 - android
【发布时间】:2015-02-12 13:55:20
【问题描述】:

我正在尝试将Class.forName() 方法与我的文件名一起使用。

在我的情况下,它是“MainActivity”但是当我尝试在 try catch 块中使用它时,它找不到名为 MainActivity 的类,当我调试时,我发现

MainActivity.class.getName() 给了我 com.example.test.secondproject.MainActivity

所以我在Class.forName("com.example.test.secondproject.MainActivity") 中使用它作为我的论点,它工作得很好,

我怎样才能让它只与 Class.forName("MainActivity") 一起工作,或者它是预期的行为

  try {
            Log.i(TAG,"try main activity ");            showNotification(context,intent.getStringExtra("message").toString(),Class.forName("MainActivity"));


        } catch (ClassNotFoundException e) {
            Log.i(TAG,"try fail error: "+ e);

        }

这是错误:java.lang.ClassNotFoundException: MainActivity

显示通知;

 public static void  showNotification(Context context,String message,final Class ActivityToOpen) {
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
                new Intent(context, ActivityToOpen), 0);



        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("My notification")
                        .setContentText(message);
        mBuilder.setContentIntent(contentIntent);
        mBuilder.setDefaults(Notification.DEFAULT_SOUND);
        mBuilder.setAutoCancel(true);
        NotificationManager mNotificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder.build());

    }

【问题讨论】:

  • 请显示更多关于你正在做的事情的代码。
  • 如果您有两个类——例如one.MainActivitytwo.MainActivity——如果只是用Class.forName("MainActivity") 询问,JRE 应该选择哪一个?换句话说:这是预期的行为。
  • @barq 添加了所有上下文

标签: java android class android-intent android-activity


【解决方案1】:

如果您对所有类都使用相同的包,那么您可以将其设置为常量并附加到您的类中。否则,您将需要指定整个包名。

【讨论】:

  • 有没有办法从类名中获取完整路径?就像我有一个名为 className 的变量和一个返回完整路径的方法 getFullPath(String className)
  • YourClass.class.getPackage().getName();
  • 在那个例子中我需要知道我的类,也就是 YourClass,它需要是一个动态字符串
  • 然后把包名截掉。
  • 在我上课之前我不会知道包名。这就是我苦苦挣扎的地方,我需要从给定的字符串中获得课程。如果我得到课程,我可以从那里移动。在您的示例中,您假设有类 - YourClass- ,我有 MyString 而不是 MyClass
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2023-01-06
相关资源
最近更新 更多