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.
- CameraManager en dispositivos que funcionan con menos de Lollipop
- Animación Android startOffset roto o buggy?
- Creación de una casilla de verificación de tres estados en android
- Convierta el tiempo dado en formato String a segundos en Android
- LibGDX. Dibujar texto multilínea
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) + "%"); } }
- Serialice una matriz de ints para enviar usando KSOAP2
- ¿Cómo usar mkdirs de manera segura en Java?
- ¿La manera más rápida de leer largo del archivo?
- Dibuja un círculo en una vista (android)
- Filtro ListActvity para ArrayAdapter personalizado
- Cómo evitar la animación de conflictos con la rotación de dispositivos en android?
- ¿Pasar un contexto de una actividad a una clase estática mantener esa actividad para siempre? ¿Pérdida de memoria?
- El método getSupportFragmentManager () no está definido
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:
-
Eliminar el molde no verificado. Parte de eso probablemente implicará llamar a
.toString()
en suURL
antes de agregarlo amyList
. -
O bien, cambie el tipo de
myList
aList<URL>
y, a continuación, haga la llamada.toString()
dentro deonItemClick
.
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?
- Espere a que termine el comando en RootTools
- ¿Es la mejor práctica para las tareas de red repetidas?