2012-10-30 64 views
1

大家好我有这个问题,我不得不做出的AsyncTask因为这时从的Icecast错误NetworkOnMainThreadException服务的连接,因为我读围绕我说你把的AsyncTask来解决问题,或给予特权与的AsyncTask与服务器的连接

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

,但在任何情况下不工作,它崩溃我的应用程序,甚至没有告诉我一些错误,尽管在try-catch .. 你能给我什么样的解释?

提前感谢这里是代码:

import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.List; 
import java.util.Timer; 
import java.util.TimerTask; 

import net.moraleboost.streamscraper.ScrapeException; 
import net.moraleboost.streamscraper.Scraper; 
import net.moraleboost.streamscraper.Stream;  
import net.moraleboost.streamscraper.scraper.IceCastScraper; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MenuItem.OnMenuItemClickListener; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 


public class SwipeyTabsSampleActivity extends FragmentActivity { 
    private Button streamButton; 

    private ImageButton playButton; 

    private TextView textStreamed; 
    private TextView textSong; 

    private boolean isPlaying; 

    private StreamingMediaPlayer audioStreamer; 

    private static final String [] TITLES = { 
      "Live Stream", 
      "Palinsesto", 
      "Programmi", 
      "Eventi", 
    }; 

    private SwipeyTabs mTabs; 
    private ViewPager mViewPager; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 


      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_swipeytab); 

      mViewPager = (ViewPager) findViewById(R.id.viewpager); 
      mTabs = (SwipeyTabs) findViewById(R.id.swipeytabs); 

      SwipeyTabsPagerAdapter adapter = new SwipeyTabsPagerAdapter(this, 
          getSupportFragmentManager()); 
      mViewPager.setAdapter(adapter); 
      mTabs.setAdapter(adapter); 
      mViewPager.setOnPageChangeListener(mTabs); 
      mViewPager.setCurrentItem(0); 

      Inizializza(); 

      new AsyncTaskProc().execute(); 

    } 

    private void startStreamingAudio() { 
      try { 
        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar); 
        if (audioStreamer != null) { 
          audioStreamer.interrupt(); 
        } 


        audioStreamer = new StreamingMediaPlayer(this, textStreamed, playButton, streamButton,progressBar); 
        audioStreamer.startStreaming("http://r35798.ovh.net:8000/listen",1677, 214); 
        streamButton.setEnabled(false); 
      } catch (IOException e) {      
      } 

    } 
    private void Inizializza() 
    { 
      textStreamed = (TextView) findViewById(R.id.text_kb_streamed); 
      streamButton = (Button) findViewById(R.id.button_stream); 
      streamButton.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
          startStreamingAudio(); 
        }}); 


      playButton = (ImageButton) findViewById(R.id.button_play); 
      playButton.setEnabled(false); 
      playButton.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
          if (audioStreamer.getMediaPlayer().isPlaying()) { 
            audioStreamer.getMediaPlayer().pause(); 
            playButton.setImageResource(R.drawable.button_play); 
          } else { 
            audioStreamer.getMediaPlayer().start(); 

            audioStreamer.startPlayProgressUpdater(); 
            playButton.setImageResource(R.drawable.button_pause); 
          } 
          isPlaying = !isPlaying; 
        }}); 
    } 
    private class SwipeyTabsPagerAdapter extends FragmentPagerAdapter implements 
    SwipeyTabsAdapter { 

      private final Context mContext; 

      public SwipeyTabsPagerAdapter(Context context, FragmentManager fm) { 
        super(fm); 

        this.mContext = context; 
      } 

      @Override 
      public Fragment getItem(int position) { 
        return SwipeyTabFragment.newInstance(TITLES[position]); 
      } 

      @Override 
      public int getCount() { 
        return TITLES.length; 
      } 

      public TextView getTab(final int position, SwipeyTabs root) { 
        TextView view = (TextView) LayoutInflater.from(mContext).inflate(
            R.layout.swipey_tab_indicator, root, false); 
        view.setText(TITLES[position]); 
        view.setOnClickListener(new OnClickListener() { 
          public void onClick(View v) { 
            mViewPager.setCurrentItem(position); 
          } 
        }); 

        return view; 
      } 

    } 


    public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 

    } 

    public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 

    } 

    public void onPageSelected(int arg0) { 
      // TODO Auto-generated method stub 

    } 
    ////////////////////////////////////// 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
      menu.add("Uscita").setOnMenuItemClickListener(
          new OnMenuItemClickListener() { 
            public boolean onMenuItemClick(MenuItem item) { 
              Toast.makeText(getApplicationContext(), 
                  "Uscita Programma", Toast.LENGTH_SHORT).show(); 
              finish(); 
              System.exit(0); 

              return true; 
            } 
          }); 
      ; 


      return true; 
    } 


    class AsyncTaskProc extends AsyncTask<Void, String, Void> { 
      @Override 
      protected Void doInBackground(Void... unused) { 


        List<Stream> streams=null; 
        Scraper scraper = new IceCastScraper(); 

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy); 

        try { 
          streams = scraper.scrape(new URI("@@@@@@")); 
        } catch (ScrapeException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
          //Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show(); 
        } catch (URISyntaxException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
          //Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show(); 
        } 


        textSong =(TextView) findViewById(R.id.textViewCurrentSong); 

        try { 
          for (Stream stream: streams) { 

            textSong.setText((stream.getCurrentSong())); 
          } 
        } catch (Exception e) { 
          //Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show(); 

        } 


        return (null); 
      } 


    } 
} 

编辑:我在OnPostExecute(移动UI),现在这是

010-30 21:22:03.535: E/Trace(4973): error opening trace file: No such file or directory (2) 
10-30 21:22:05.145: E/AndroidRuntime(4973): FATAL EXCEPTION: AsyncTask #1 
10-30 21:22:05.145: E/AndroidRuntime(4973): java.lang.RuntimeException: An error occured while executing doInBackground() 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.lang.Thread.run(Thread.java:856) 
10-30 21:22:05.145: E/AndroidRuntime(4973): Caused by: java.lang.Error: Unresolved compilation problem: 
10-30 21:22:05.145: E/AndroidRuntime(4973):  org.apache.commons.logging.LogFactory cannot be resolved to a type 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.LoggerFactory.determineDefaultLoggerProvider(LoggerFactory.java:51) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.LoggerFactory.getDefaultLoggerProvider(LoggerFactory.java:39) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.LoggerFactory.getLoggerProvider(LoggerFactory.java:35) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.LoggerFactory.getLogger(LoggerFactory.java:27) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.Source.newLogger(Source.java:1645) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.htmlparser.jericho.Source.<init>(Source.java:109) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.moraleboost.streamscraper.parser.IceCastParser.parse(IceCastParser.java:67) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at net.moraleboost.streamscraper.scraper.IceCastScraper.scrape(IceCastScraper.java:65) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at com.uniradio.cesena.app.SwipeyTabsSampleActivity$AsyncTaskProc.doInBackground(SwipeyTabsSampleActivity.java:264) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at com.uniradio.cesena.app.SwipeyTabsSampleActivity$AsyncTaskProc.doInBackground(SwipeyTabsSampleActivity.java:1) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-30 21:22:05.145: E/AndroidRuntime(4973):  ... 5 more 

回答

0

,所以我”您没有提供您的logcat错误的新的logcat猜测,但我认为这个问题如下。

您正在试图操纵从doInBackground中的用户界面,这将导致您的应用程序崩溃。将你的AsyncTask必须例如执行到onPostExecute

任何更改UI:

textSong.setText((stream.getCurrentSong())); 
+0

谢谢,做保护无效onPostExecute(){textSong =(TextView的)findViewById(R.id.textViewCurrentSong);尝试{对(流流:流){textSong.setText((stream.getCurrentSong())); }}赶上(例外五){//Toast.makeText(getApplicationContext(),e.​​toString(),Toast.LENGTH_SHORT)。显示(); }}但是CRASH AT:streams = scraper.scrape(new URI(“@@@@@”)); HANDLER不工作 –

+0

我编辑的问题:) –

0

-保持UI work on UI threadNon-UI work on Non-UI线程是一个很好的做法,但是从HoneyComb版本在Android这个到来成为一项法律。

- Android应用程序在DUI(专用UI线程)的主线程上启动。

-您应该在非UI线程上保留Non-UI处理器密集型工作。

-使用ThreadHandler做到这一点,或者使用特制AsyncTask这也被称为无痛在Android的线程

现在的问题,你的情况:

-doInBackground()是这是使用处理非UI部分的方法,而你在这个执行textSong.setText((stream.getCurrentSong()));本身。 这是您的应用程序崩溃的主要原因。

-使用onPostExecute()方法做UI工作,所以保持设置文本的这种方法。

+0

谢谢,我这样做是 保护无效onPostExecute() \t \t { \t \t \t textSong =(TextView的)findViewById(R.id.textViewCurrentSong)!; \t \t \t尝试{ \t \t \t \t为(流流:流){ \t \t \t \t \t textSong.setText((stream.getCurrentSong())); \t \t \t \t} \t \t \t}赶上(例外五){ \t \t \t \t //Toast.makeText(getApplicationContext(),e.​​toString(),Toast.LENGTH_SHORT).show(); \t \t \t} \t \t \t \t } \t BUT CRASH AT: 流= scraper.scrape(新URI( “@@@@@”)); 处理程序不起作用 –

+0

我编辑问题! –