2015-09-15 34 views
1

我是新的Android和我有問題我希望和身體幫助我在它 現在我試圖顯示從服務器使用ivy的MP3填充把我有問題,當點擊播放文件 這裏是我的代碼:顯示Mp3在ListView從服務器錯誤

public class MainActivity extends Activity { 

    URL urlAudio; 
    ListView mListView; 
    ProgressDialog pDialog; 
    private 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.activity_main); 

     mListView = (ListView) findViewById(R.id.listAudio); 
     new getAudiofromServer().execute(); 
     new downloadAudioFromServer().execute(); 

     mListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       String url = null; 
       Object o = myList.get(position); 
       url = o.toString().replace(" ", "%20").trim(); 
        playSong(urlAudio + myList.get(position)); 
      }});} 


    private void playSong(String songPath) { 
     try { 
      mp.reset(); 
      mp.setDataSource(songPath); 
      mp.prepare(); 
      mp.start(); 
     } catch (IOException e) { 
      Log.v(getString(R.string.app_name), e.getMessage()); 
     } 
    } 

    private class downloadAudioFromServer extends 
      AsyncTask<String, Integer, String> { 
     @Override 
     protected String doInBackground(String... url) { 
      int count; 

      try { 
       URL url1 = new URL("http://server/1/"); 
       URLConnection conexion = url1.openConnection(); 
       conexion.connect(); 
       int lenghtOfFile = conexion.getContentLength(); 
       InputStream input = new BufferedInputStream(url1.openStream()); 
       OutputStream output = new FileOutputStream(
         Environment.getExternalStorageDirectory() + "/Sounds/"); 
       byte data[] = new byte[1024]; 
       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        publishProgress((int) (total * 100/lenghtOfFile)); 
        output.write(data, 0, count); 
       } 

       output.flush(); 
       output.close(); 
       input.close(); 
      } catch (Exception e) { 
      } 
      return null; 
     } 
    } 

    class getAudiofromServer extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Getting File list from server, Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected String doInBackground(String... arg0) { 
      try { 
       urlAudio = new URL("http://server/1/"); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      ApacheURLLister lister1 = new ApacheURLLister(); 
      try { 
       myList = lister1.listAll(urlAudio); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     protected void onPostExecute(String file_url) { 
      if (pDialog.isShowing()) { 
       pDialog.dismiss(); 
      } 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        MainActivity.this, android.R.layout.simple_list_item_1, 
        myList); 
      adapter.notifyDataSetChanged(); 
      mListView.setAdapter(adapter); 
      mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      mListView.setCacheColorHint(Color.TRANSPARENT); 
     } 
    } 
} 

,我的記錄是:

09-15 09:28:40.630: E/AndroidRuntime(17264): FATAL EXCEPTION: main 
09-15 09:28:40.630: E/AndroidRuntime(17264): java.lang.ClassCastException: java.net.URL cannot be cast to java.lang.String 
09-15 09:28:40.630: E/AndroidRuntime(17264): at com.Infinityapp.naghmaty.MainActivity$1.onItemClick(MainActivity.java:56) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.widget.AbsListView.performItemClick(AbsListView.java:1128) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2826) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.widget.AbsListView$1.run(AbsListView.java:3585) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.os.Handler.handleCallback(Handler.java:725) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.os.Looper.loop(Looper.java:153) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at android.app.ActivityThread.main(ActivityThread.java:5299) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at java.lang.reflect.Method.invokeNative(Native Method) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at java.lang.reflect.Method.invoke(Method.java:511) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
09-15 09:28:40.630: E/AndroidRuntime(17264): at dalvik.system.NativeStart.main(Native Method) 

回答

0

這裏:

playSong(urlAudio + myList.get(position)); 

線路引起問題。所以得到URL的字符串表示,因爲將兩個字符串的是:

playSong(urlAudio.toString() + myList.get(position)); 
+0

同樣的問題我只想當我點擊listview中的項目來播放mediaplayer中的選定項目 –

0

1.

這有幾個問題:

這主要是:

Object o = myList.get(position); 
url = o.toString().replace(" ", "%20").trim(); 
playSong(urlAudio + myList.get(position)); 

與此相同:

Object o = myList.get(position); 
playSong(urlAudio + myList.get(position)); 

字符串url是一個局部變量,您在此處初始化url = o.toString().replace(" ", "%20").trim();,但從不使用。

所以我不確定你想要做什麼,更新列表?請張貼在一個單獨的問題(平均每個職位的一個問題)

2.

// Object o = myList.get(position).toString(); 
// url = o.replace(" ", "%20").trim(); 
playSong(urlAudio.toString() + myList.get(position).toString());  

我認爲它是創建對象o的浪費。將其解析爲字符串,然後將其與url串聯起來以形成字符串。並將列表項目解析爲字符串。

// again I'm only guessing your intentions. 
String o = myList.get(position).toString(); 
url = o.replace(" ", "%20").trim(); 
playSong(urlAudio.toString() + url) 

讓我知道,如果這有助於。

相關問題