La URL no se puede emitir a String

Soy muy nuevo en android y tratando de desarrollar la aplicación para cargar todos los archivos mp3 desde el servidor a lista de vista y haciendo clic en el elemento de lista que debe reproducir ese archivo mp3 directamente desde el servidor.

De alguna manera puedo enumerar todos los archivos mp3 del servidor a la lista-visión pero cuando hago clic en el artículo de la lista-visión para jugar esa canción particular que me da después del error.

Logcat

02-18 11:49:58.266: E/AndroidRuntime(8276): FATAL EXCEPTION: main 02-18 11:49:58.266: E/AndroidRuntime(8276): java.lang.ClassCastException: java.net.URL cannot be cast to java.lang.String 02-18 11:49:58.266: E/AndroidRuntime(8276): at iqual.fidol_final.ServerFileList$1.onItemClick(ServerFileList.java:72) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.widget.AdapterView.performItemClick(AdapterView.java:295) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.widget.AbsListView.performItemClick(AbsListView.java:1073) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2577) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.widget.AbsListView$1.run(AbsListView.java:3302) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.os.Handler.handleCallback(Handler.java:605) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.os.Handler.dispatchMessage(Handler.java:92) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.os.Looper.loop(Looper.java:154) 02-18 11:49:58.266: E/AndroidRuntime(8276): at android.app.ActivityThread.main(ActivityThread.java:4624) 02-18 11:49:58.266: E/AndroidRuntime(8276): at java.lang.reflect.Method.invokeNative(Native Method) 02-18 11:49:58.266: E/AndroidRuntime(8276): at java.lang.reflect.Method.invoke(Method.java:511) 02-18 11:49:58.266: E/AndroidRuntime(8276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 02-18 11:49:58.266: E/AndroidRuntime(8276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 02-18 11:49:58.266: E/AndroidRuntime(8276): at dalvik.system.NativeStart.main(Native Method) 

Código Java

 public class ServerFileList extends Activity implements OnBufferingUpdateListener, OnErrorListener, OnPreparedListener { Uri uri; URL urlAudio; ListView mListView; PlaySongAsy play; ProgressDialog pDialog; JSONParser jParser = new JSONParser(); MediaPlayer mp = new MediaPlayer(); private List<String> myList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.serverfilelist); mListView = (ListView) findViewById(R.id.listAudio); if (Const.server == 0) { new getAudiofromServer().execute(); } else { new getVideofromServer().execute(); } // new downloadAudio().execute(); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // playSong(urlAudio + myList.get(position)); play = (PlaySongAsy) new PlaySongAsy(myList.get(position) .replace(" ", "%20").trim()).execute(); } }); } class PlaySongAsy extends AsyncTask<String, Void, Boolean> { String baseURL; public PlaySongAsy(String baseURL) { this.baseURL = baseURL; } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); pDialog = ProgressDialog.show(ServerFileList.this, " Buffering...", "please wait..", false); pDialog.setCancelable(false); } @Override protected Boolean doInBackground(String... urls) { new Thread() { @Override public void run() { play(baseURL); } }.start(); return true; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); // progressDialog.dismiss(); } } private void play(String baseURL) { Uri myUri = Uri.parse(baseURL); try { if (mp == null) { this.mp = new MediaPlayer(); } else { mp.stop(); mp.reset(); } mp.setDataSource(this, myUri); // Go to Initialized state mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setOnPreparedListener(this); mp.setOnBufferingUpdateListener(this); mp.setOnErrorListener(this); mp.prepareAsync(); // mp.setVolume(5.F, 5.F); Log.d("", "LoadClip Done"); } catch (Throwable t) { Log.d("", t.toString()); } } public void updateProgress(int currentSize, int totalSize) { TextView mTextView = new TextView(ServerFileList.this); mTextView.setText(Long.toString((currentSize / totalSize) * 100) + "%"); } } 

El código:

 myList.get(position) 

Está implicitamente lanzando el elemento de myList a una String , ya que myList es una List<String> . Esto está fallando porque lograste insertar un objeto URL en myList .

Habilite las advertencias de "cast no verificado" y debería ver una advertencia en la que está insertando myList .

Dos posibles soluciones:

  1. Eliminar el molde no verificado. Parte de eso probablemente implicará llamar a .toString() en su URL antes de agregarlo a myList .

  2. O bien, cambie el tipo de myList a List<URL> y, a continuación, haga la llamada .toString() dentro de onItemClick .

El que usted vaya con depende del tipo que usted quisiera que myList tuviera.

Invoque el método toString() en el objeto URL para obtener el formulario de cadena. Consulte http://docs.oracle.com/javase/6/docs/api/java/net/URL.html#toString%28%29

Creo que myList contiene objetos incorrectos. Pones URI dentro de él, no Strings . Use el método toString en Uri s cuando llene la lista.

Encuentra dónde hacer esto:

 myList.add((String)uri); 

Y cambiar a:

 myList.add(uri.toString()); 

Su Excepción diciendo …

 java.lang.ClassCastException: java.net.URL cannot be cast to java.lang.String 

Que indicando con valentía, que está tratando de arrojar una URL a un objeto String … eso significa, baseURL es un objeto URL pero usted está tratando de baseURL a un objeto String , es por eso que sucede Exception .

Ahora, cambie lo siguiente …

 String baseURL; 

a

 Uri baseURL; 

Así como, en el que se hace referencia a baseURL como una String , cámbiela como Uri .

Intente eliminar todos los espacios innecesarios en su URL llamando a trim() . Por favor, remítase a la siguiente pregunta

Android: howto parse URL String con espacios al objeto URI?

  • Android: El servicio de intento anidado no se inicia después de llamar a Context.startService ()
  • ¿Pasar un argumento al llamar a setOnClickListener?
  • Acceso a variables por nombre en un bucle
  • Cómo resolver el java.lang.VerifyError: org / apache / poi / xssf / usermodel / XSSFWorkbook?
  • Detectar algoritmo de giro de 360 ​​grados
  • Quitar el prefijo de URL de String (http: /, www, etc.)
  • Detectar videollamada entrante en android
  • ¿Puedo crear una aplicación web para ser utilizada en teléfonos inteligentes sin Internet? ¿Cómo?
  • Android: Descargar un solo archivo en muchas partes
  • ¿Cuándo usar parcelable en android?
  • Integración multimedia con LibGDX
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.