После того, как нажата кнопка [duplicate]

На основе Ответ Wes Я создал обновленный скрипт. Обновления получили слишком много, чтобы добавить комментарии.

  1. Я добавил поддержку еще одного формата даты: формат, включая точки в датах. Добавлены инструкции о том, как включить больше форматов дат.
  2. Ответ Wes на самом деле не работал, поскольку cmd не может сравнивать целые числа размером более 1 + 31 бит, поэтому я исправил это с преобразованием числовых строк в цитируемые
  3. Скрипт может рассматривать отсутствующие файлы как самые старые файлы.
  4. Добавлена ​​поддержка второй точности.

Моя версия ниже .

  Использование @REM: @REM: getfiledatestr file-path envvar Результат @REM, возвращаемый в% envvar%: getfiledatestr для %% A в (% 1) do (установить getfilefolderstr = %% ~  dpA set getfilenamestr = %% ~ nxA) @REM Удаление конечной обратной косой черты, если% getfilefolderstr: ~ -1% == \ set getfilefolderstr =% getfilefolderstr: ~ 0, -1% @REM очистить его для случая, когда команда forfiles не работает set getfiledatestr  = for / f "delims =" %% i in ('"forfiles / p" "% getfilefolderstr%" "/ m" "% getfilenamestr%" "/ c" cmd / c echo @fdate @ftime ""') do  set getfiledatestr = %% i @REM старый код: для %% f in (% 1) установить set getfiledatestr = %% ~ tf установить% 2 = @REM считать  отсутствующие файлы как самые старые файлы, если «% getfiledatestr%» equ «" set% 2 = "" @REM В настоящее время поддерживаемые разделители разделов даты: / :.  и пространство.  Возможно, вам придется добавить дополнительные разделители в следующую строку, если ваш формат даты также содержит альтернативные разделители.  Если вы этого не сделаете, то разобранные даты будут полностью произвольно структурированы, а сравнения - неправильными.  for / f "tokens = 1,2,3,4,5,6 delims = / :." %% a in ("% getfiledatestr%") do (@REM для MM / DD / YYYY HH: MM: SS AMPM  использовать вызов: appendpadded% 2 %% c %% b %% a %% g %% d %% e %% f @REM для DD / MM / YYYY HH: MM: SS AMPM использовать вызов: appendpadded% 2 %% c  %% b %% a %% g %% d %% e %% f @REM для YYYY / DD / MM HH: MM: SS AMPM использовать вызов: appendpadded% 2 %% a %% b %% c %% g  %% d %% e %% f call: appendpadded% 2 %% c %% b %% a %% g %% d %% e %% f) @goto: eof @REM Принимает env var в качестве первого параметра  @REM и значения, которые будут добавлены в качестве остальных параметров, @REM правое заполнение всех значений с ведущими 0 до 4 мест: appendpadded set temp_value = 000% 2 call: expand set% 1 = %%% 1 %%%% temp_value:  ~ -4 %% shift / 2, если «% 2» neq »« goto appendpadded set temp_value = @REM cmd не может сравнивать целые числа, превышающие 1 + 31 бит, поэтому вместо этого преобразуйте их в цитированные числовые строки.  Текущая реализация генерирует числовые строки намного дольше, чем 31-битные целые числа.  call: expand set% 1 = "%%% 1 %%%" @goto: eof @REM заставляет все переменные полностью развернуться: expand% * @goto: eof  

21
задан Dinesh Prajapati 25 November 2011 в 11:55
поделиться

23 ответа

Возможно, вам нужно проверить, что вы добавили новую активность в файл manifest.xml

Пример:

<activity
      android:name=".className" 
      android:label="@string/app_name" > 
</activity>
31
ответ дан Prabs 15 August 2018 в 23:46
поделиться
  • 1
    У меня уже есть следующая запись: & lt; activity android: name = "com.x.y.className & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; & GT; & Lt; / активность & GT; Еще не повезло :( – sharath 8 August 2010 в 10:51
  • 2
    @paypalcomp Похоже, вы добавили полное имя пакета в название действия. Попробуйте удалить это, чтобы ваша запись выглядела так: & lt; activity android: name = & quot; .className & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; & GT; & Lt; / активность & GT; – Corey Sunwold 26 February 2011 в 21:27
  • 3
    @Corey Я обнаружил, что использование полного имени пакета (ссылающегося на библиотеку), используемого в файле манифеста основного приложения, работает для меня. – user94154 20 June 2011 в 05:42
  • 4
    @ user94154 Я тоже. По какой-то причине нотация .ActivityClassName работает в автономном режиме, но не при вызове из другого приложения через Intent. +1 за подтверждение того, что я не галлюцинирую. – Bill The Ape 16 February 2012 в 06:01

Мое решение этой ошибки состояло в том, чтобы добавить имя пакета перед именем в манифесте.

У меня были следующие действия:

  • id.scanner.main .A1
  • id.scanner.main.gallery.A2

Мой манифест содержал следующее:

<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>

Это решило проблему:

<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>
0
ответ дан Adinia 15 August 2018 в 23:46
поделиться

Это работает, если у вас есть объект Activity (который нужно запустить):

intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
0
ответ дан AndroidGuy 15 August 2018 в 23:46
поделиться

У меня было ActivityNotFoundException, когда я реализовал Activity внутри другого класса (как внутренний класс):

//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}
//...

Объявлено как следующее внутри манифеста:

<activity android:name=".Pref.Activity"
...

Объявив это как обычный класс (public class PrefActicity) и соответствующим образом изменяя манифест, он работал как обычно.

1
ответ дан Carl K. 15 August 2018 в 23:46
поделиться

Эй, вам нужно использовать другую конструкцию Intent. Это наверняка решит вашу проблему в течение секунды:

Пример:

Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");

startActivity(inte);

Это работает отлично, и я проверил этот код, работая правильно.

1
ответ дан eeerahul 15 August 2018 в 23:46
поделиться

Действия, которые вы вызываете, не содержат «sheme» и содержат фильтр намерений:

<activity android:name=".SecondActivity">
        <intent-filter>
               <action android:name="com.example.sj.myapplication.SecondActivity"/>
               <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>

, поэтому при вызове кода:

Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
0
ответ дан Evgenii Vorobei 15 August 2018 в 23:46
поделиться

Активность, которую вы вызываете, должна отображаться не только в манифесте для собственного пакета, но и в манифесте для пакета CALLING.

14
ответ дан Gangnus 15 August 2018 в 23:46
поделиться
  • 1
    Вы хотите сказать, что если я импортирую проект в мое рабочее пространство в качестве проекта библиотеки, я должен также скопировать элемент <activity> из манифеста в проект библиотеки в манифест моего проекта? – Solace 22 August 2015 в 06:50

Посмотрите на документацию здесь , что вы хотите:

intent.setClassName("com.x.y", "className");
0
ответ дан James Greenhalgh 15 August 2018 в 23:46
поделиться
  • 1
    Спасибо за быстрый ответ :) .. Но я использую следующий метод: setClassName (String packageName, String className) & quot; класса Intent. И мой файл манифеста содержит следующую запись: & lt; activity android: name = & quot; com.x.y.className & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; & GT; & Lt; / активность & GT; Должен ли я добавлять фильтры намерений? Я создаю свое намерение со следующим кодом: Intent intent = new Intent (Intent.ACTION_VIEW); intent.setClassName ("com.x.y", className.class.getName ()); activity.startActivity (намерение); – sharath 8 August 2010 в 10:51
  • 2
    Я считаю, что вам нужно будет добавить & lt; намерение-фильтр & gt; & lt; действие android: name = & quot; android.intent.action.VIEW & quot; / & GT; & Lt; / Намерение фильтр & GT; Между тегами активности в файле манифеста. – James Greenhalgh 8 August 2010 в 11:17
  • 3
    Нет. По-прежнему не повезло .. Получите эту ошибку: android.content.ActivityNotFoundException: Невозможно найти явный класс активности {com.x.y / com.x.y.className}; Вы объявили эту активность в своем AndroidManifest.xml? В моем файле манифеста добавлено следующее: & lt; activity android: name = & quot; com.x.y.className & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; & GT; & Lt; Намерение фильтр & GT; & lt; действие android: name = & quot; android.intent.action.VIEW & quot; / & GT; & Lt; / Намерение фильтр & GT; & Lt; / активность & GT; :( – sharath 8 August 2010 в 11:23
  • 4
    В любом случае .. сделал намерение намерение = новый намерение (активность, CartActivity.class); activity.startActivity (намерение); и это сработало как шарм :) Большое спасибо – sharath 8 August 2010 в 11:28

Это исключение также возникает, если вы включаете библиотеку в свое приложение и если библиотека вызывает действие, определенное в проекте библиотеки. В этом случае нам нужно объединить манифест библиотеки с манифестами вызывающего приложения.

С помощью ADT версии 20 мы можем сделать это, добавив инструкцию ниже в project.properties вызывающего приложения.

manifestmerger.enabled = true

0
ответ дан JeeZ 15 August 2018 в 23:46
поделиться

Я использовал getActivityContext() (вместо Activity.this) для кода меню, чтобы сохранить какую-то работу, и копировать и вставлять его в каждое действие без редактирования каждый раз.

Я заменил их с Activity.this, и проблема исчезла.

У меня такое чувство, что умный парень Android может работать, не имея необходимости делать это. Хотелось бы услышать, что это будет.

1
ответ дан kiamlaluno 15 August 2018 в 23:46
поделиться

Да, у меня тоже есть эта проблема. Я обновил проект. И тогда все работает нормально.

0
ответ дан mabeiyi 15 August 2018 в 23:46
поделиться

intent.setClass принимает параметры как «Контекст пакета» и «Класс». примером может быть:

intent.setClass(CurrentActivity.this, TargetActivity.class);

также вам нужно проверить, зарегистрирована ли активность в файле манифеста.

3
ответ дан ojrac 15 August 2018 в 23:46
поделиться

У меня тоже такой же случай. Прочитав ответ Пирсона, я пересмотрел свою деятельность и выяснил, что написал

public void onCreate(Bundle s)

. Но на самом деле это должно быть

protected void onCreate(Bundle s)

И теперь это работает!

0
ответ дан Patrick Chan 15 August 2018 в 23:46
поделиться

Добавлено новое действие и определило его в manifest.xml, но я все еще получал ошибку «Невозможно найти явный класс активности». Я использую Eclipse. Решение моей проблемы - это «очистка» проекта. Из главного меню в Eclipse: Project | Clean ... Затем вы выбираете свой проект и очищаете его.

2
ответ дан Peter O. 15 August 2018 в 23:46
поделиться

Попробуйте использовать следующее:

intent.setClassName("com.x.y", "com.x.y.className");

Это работает для меня

0
ответ дан Rahul Sharma 15 August 2018 в 23:46
поделиться

Удалите свою активность из манифеста, а затем добавьте ее снова. Этот тип не записывает напрямую XML. Вместо этого перейдите к Application > Application nodes > add, выберите «Активность» и затем найдите источник файла.

Это сработало для меня.

8
ответ дан Roddy of the Frozen Peas 15 August 2018 в 23:46
поделиться

вы можете добавить этот код в файл manifiest.xml

action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"
0
ответ дан songyuanyao 15 August 2018 в 23:46
поделиться

Перезапустите Eclipse и снова проверьте свой манифест. Если вам не хватает соответствующего действия, добавьте его и повторите попытку. Он решил мою аналогичную проблему.

0
ответ дан Sudhin Philip 15 August 2018 в 23:46
поделиться

Если другие люди сталкиваются с чем-то похожим и приходят на этот пост, проблема, которую я могу, может сэкономить вам некоторое время. Может быть, не связано с проблемой OP, но def связано с исключением ActivityNotFound.

Я пытался загрузить активность с помощью:

Intent intent = new Intent( this, class );

Однако я постоянно продолжал получать ActivityNotFoundException, хотя я проверял и повторно проверял код несколько раз.

Это исключение, которое я получал, на самом деле не было вызвано намерением, но какой-то код, который я запускал внутри загруженной активности, бросая RuntimeException , (моя проблема была вызвана Typeface.createFromAsset())

Возможно, что вы работаете с аналогичным RuntimeException в своей деятельности.

Чтобы убедиться, что это так, введите код своей цели в блоках try catch. Например:

try {
    /* your code */
    ...
} catch ( ActivityNotFoundException e) {
    e.printStackTrace();
}

Запустите приложение снова и проверьте свой LogCat, если это та же проблема, вы получите исключение RuntimeException с записью «Caused By:», указывающей на вашу актуальную проблему.

Я потратил хороший час, пытаясь понять это. Надеюсь, это может сэкономить некоторое время.

15
ответ дан thepearson 15 August 2018 в 23:46
поделиться
  • 1
    Спасибо! Комментирование активности onCreate в целевой деятельности заставило проблему уйти. Ясно, что нужно принять рекомендацию дважды проверить манифест с солью. – cayhorstmann 17 September 2013 в 22:31

, когда у меня такая же проблема. если вы используете файлы классов библиотеки и записываете его в файлы манифеста android, напишите его так же, как и затем удалите файлы манифеста проектов библиотеки этой части >> тогда он будет работать абсолютно.

0
ответ дан user2123720 15 August 2018 в 23:46
поделиться

Проверьте содержимое файла манифеста Android в папке bin проекта. Когда ваше приложение скомпилировано и упаковано, файл манифеста копируется в папку bin. В моем случае манифест в папке bin не согласуется с оригинальным манифестом. Вероятно, это ошибка Eclipse. Я вручную скопировал манифест в папку bin, и он сработал.

0
ответ дан user3491579 15 August 2018 в 23:46
поделиться

В дополнение к ответу Мины. Когда вы объявляете активность как внутренний статический класс, тогда вы должны написать свою активность в манифест, как ...

         <activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />

здесь .app происходит от вашего имени пакета, это может быть .helpers.afdfa $ afda

0
ответ дан Yaya 15 August 2018 в 23:46
поделиться

У меня была такая же проблема. Я пробовал все, кроме ошибки, которую я выяснил позже, было то, что между двойными кавычками и моим именем класса было пространство. Это должно быть: intent.setClassName("com.x.y","com.x.y.className")

not

intent.setClassName("com.x.y","  com.x.y.className")
-1
ответ дан Boeckm 15 August 2018 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: