2012-06-01 3 views
0

Мой код отказался вернуть правильный код запроса, поэтому я немного импровизировал. Он всегда возвращался -1.Force Close on RingtonePicker

if(v.getId() == R.id.imageButton9) 
    { 
     request = 888; 
     Intent wpIntent = new Intent(); 
     wpIntent.setType("image/*"); 
     wpIntent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE); 
    } 

    else if(v.getId() == R.id.imageButton10) 
    { 
     String uri = null; 
     request = 999; 
     rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); 
     rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
     if(uri != null) 
     { 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri)); 
     } 
     else 
     { 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null); 
     }  
     this.startActivityForResult(rtIntent, SELECT_TONE); 
    } 

Я объявил две переменные в начале моего кода:

protected static final int SELECT_PICTURE = 888; 
protected static final int SELECT_TONE = 999; 

Вот onActivityResult:

public void onActivityResult(int resultCode, int requestCode, Intent data) 
{ 
    Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show(); 

    if(request == 888) 
    { 
     Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show(); 
     Uri selectedImage = Uri.parse(data.getDataString()); 
     wpPath = getPath(selectedImage); 
     Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show(); 
     request = 0; 
    } 

    else if(request == 999) 
    { 
     Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show(); 
     Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()); 
     Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
     if (uri != null) 
     { 
      rtPath = uri.toString(); 
      Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show(); 
      request = 0; 
     } 
    } 
} 

Это всегда заставляющие закрывается. Он дает следующую ошибку:

06-01 12:40:35.388: E/AndroidRuntime(7437): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=999, result=-1, data=Intent { (has extras) }} to activity {com.asim.autobot/com.asim.autobot.profile}: java.lang.NullPointerException

Я застрял. Не удается решить эту проблему.

Прежде всего, почему requestCode всегда возвращает -1? Во-вторых, почему приложение принудительно закрывается на rtIntent.getParcelableExtra (RingtoneManager.EXTRA_RINGTONE_PICKED_URI) ;?

EDIT: Полный Logcat http://i47.tinypic.com/1zm2gww.jpg

Линия она указывает на это Log.i ("RT поднято является:", rtIntent.getParcelableExtra (RingtoneManager.EXTRA_RINGTONE_PICKED_URI) .ToString());

+0

Используйте переключатель, вместо проверки кнопки с if (if (v.getId() == R.id.imageButton9)) – Aerrow

+0

, пожалуйста, напишите полный логарифм. – techiServices

+0

Изображение Logcat добавлено. – Asim

ответ

2

Когда вы получаете ResultCode из -1 тогда работал RESULT_OK = -1

Проверка следующую строку:

rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString() 

Вы параметр называется Intent data и вы должны работать над этим вместо своей переменной rtIntent. Ваша переменная rtIntent не будет изменена, поэтому getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI), вероятно, вернет значение null.

+0

Я люблю тебя, человек, очень не гей. Спасибо, что помогли. Я отметил ваш ответ как «Принято». Не забудьте проверить этот вопрос еще раз, потому что мне может понадобиться небольшая помощь в настройке возвращенного Uri в качестве мелодии звонка. Пожелание Я могу связаться с вами за пределами stackoverflow для справки:/ – Asim

+0

Поиск работы тоже :) Попробуйте это решение: http://stackoverflow.com/questions/7671637/how-to-set-ringtone-with-ringtonemanager-action- ringtone-picker – WarrenFaith

+0

Я видел это ... См. мой код был вроде ОК. Просто, что я использовал неправильное намерение lol – Asim

0

Попробуйте этот код,

public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.imageButton9: 
      request = 888; 
      Intent wpIntent = new Intent(); 
      wpIntent.setType("image/*"); 
      wpIntent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE); 
     case R.id.imageButton10: 

      String uri = null; 
      request = 999; 
      rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
      if(uri != null) 
       { 
        rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri)); 
       } 
      else 
       { 
        rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null); 
       }  
         this.startActivityForResult(rtIntent, SELECT_TONE); 

      break; 
     default: 
      break; 
     } 

    } 


     public void onActivityResult(int resultCode, int requestCode, Intent data) 
{ 
    Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show(); 

    if(requestCode == SELECT_PICTURE) 
    { 
     Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show(); 
     Uri selectedImage = Uri.parse(data.getDataString()); 
     wpPath = getPath(selectedImage); 
     Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show(); 
     request = 0; 
    } 

    else if(requestCode == SELECT_TONE) 
    { 
     Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show(); 
     Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()); 
     Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
     if (uri != null) 
     { 
      rtPath = uri.toString(); 
      Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show(); 
      request = 0; 
     } 
    } 
} 
+0

Пробовал. Не работает. Когда я нажимаю Select Ringtone, actionresult возвращает -1 и, следовательно, ничего. Когда я нажимаю «Выбрать обои», он сначала открывает RingtoneChooser (использовать Android System или GoSMS). Когда я нажимаю назад, он затем открывает WallpaperChooser (Галерея, Root Explorer и т. Д.). – Asim