Сбой данных намерения Android и разрешение намерения возвращает ActivityNotFoundException

#java #android

#java #Android

Вопрос:

[Обновление:] я знаю проблему… но нужна помощь, чтобы решить эту проблему. Проблема в том, что CONTENT_URI не сопоставляется с типом mimetype vnd.android.cursor.dir/vnd.example.manager.

я создаю намерение с помощью null, и в моем intentfiter у меня есть сегмент данных. так что, я думаю, это не соответствует. Поэтому, когда я передаю null в data, все хорошо и очаровательно !!., Но мне нужно передать content_URI и перевести его в mimeType . у меня есть GetType, но я предполагаю, что он не разрешен правильно. Может кто-нибудь, пожалуйста, помогите мне.

[Оригинальное сообщение]

Я пытаюсь отладить этот раздел с намерениями в своем приложении, и мне нужна помощь, чтобы продолжить.

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

Я предполагаю, что это связано с типом mimeType данных, который я передал в действие. Мой фильтр намерений приведен ниже

 <intent-filter>
    <action android:name="android.intent.action.INSERT" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.dir/vnd.example.manager" />
</intent-filter>
  

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

В onCreate() моей вызывающей активности я делаю следующее

Активность вызывающего абонента — первая точка входа для приложения

 public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.dashboard);       
    someButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Intent spawnEmptyIntent = new Intent(Intent.ACTION_INSERT, getIntent().getData());

            if(getIntent().getData() == null) {
                getIntent().setData(ManagerTableDefaults.CONTENT_URI);
            }

            Log.w(TAG, "Intent data string is "   getIntent().getDataString()); --- This is null for some reason!! i don't know why!!... it should have been set earlier right??
            startActivity(spawnEmptyListIntent); // New activity is not launched... Exception thrown
        }
    });

}
  

Журнал ошибок

 10-14 11:21:37.002: WARN/DashboardActivity(8313): Intent data string is null
10-14 11:21:37.012: INFO/ActivityManager(1643): Starting: Intent { act=android.intent.action.INSERT dat=content://com.example.android.provider.ss/manager } from pid 8313
10-14 11:21:37.022: ERROR/AndroidRuntime(8313): FATAL EXCEPTION: main
10-14 11:21:37.022: ERROR/AndroidRuntime(8313): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.mvl.android.provider.nq/listmanager }
  

Ответ №1:

Вы не устанавливаете данные в своем spawnEmptyListIntent , если GetIntent().getData() равно null . Я подозреваю, что ваше намерение состоит в том, чтобы установить в ManagerTableDefaults.CONTENT_URI качестве URI данных для вашего spawnEmptyListIntent

Комментарии:

1. Да, вы правы, но как мне сопоставить content_URI с соответствующим vnd.android.cursor.dir/vnd.something.something . Это то, что приводит к сбою действия

2. Основываясь на опубликованном вами коде, вы никогда не устанавливаете часть данных намерения, с которой пытаетесь начать действие (если GetIntent().getData() равно null). Так что это также приведет к сбою вашей активности (лучше исправить это сейчас, чем забыть). В любом случае этот mime-тип автоматически извлекается Android от вашего имени путем вызова GetType(ManagerTableDefaults . CONTENT_URI) метод в ContentProvider, который вы зарегистрировали для авторизации ManagerTableDefaults. CONTENT_URI.