2012-10-30 3 views
1

안녕하십니까.이 문제가 발생했습니다. IceCast에서 서비스에 대한 연결 오류 NetworkOnMainThreadException이 발생하므로 AsyncTask를 만들어야합니다. 문제를 해결하기 위해 AsyncTask를 사용하거나서버 연결을 사용하는 AsyncTask

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

하지만 어떤 상황에서도 작동하지 않으며, 심지어는 시도 - 캐치에도 불구하고 내게 뭔가 오류를 말하지 않고 내 응용 프로그램을 충돌 .. 당신은 나에게 무엇에 대한 설명을 줄 수 있습니까?

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

새로운 로그 캣은 m 추측하지만 문제는 다음과 같다고 생각합니다.

doInBackground에서 UI를 조작하려고하면 앱이 다운됩니다. 당신의 AsyncTask 예를 들어 onPostExecute

으로 수행해야하는 UI를 변경 이동 :

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

고마워, 내가 그것을 할 보람 onPostExecute() {textSong = (TextView) findViewById (R.id.textViewCurrentSong); try {for (스트림 스트림 : 스트림) {textSong.setText ((stream.getCurrentSong())); }} catch (Exception e) {//Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).보여 주다(); }}하지만 CRASH AT : streams = scraper.scrape (새 URI ("@@@@@")); HANDLER 내가 질문을 수정 –

+0

작동하지 않습니다 :) –

0

- UI work on UI threadNon-UI work on Non-UI 스레드를 유지가 좋은 방법입니다하지만 안드로이드 이에 대한 HoneyComb 버전의 도착에서 법이되었다.

- 안드로이드 응용 프로그램은 기본 스레드 인 DUI (전용 UI 스레드)에서 시작됩니다.

- 비 UI 스레드에서 비 UI 처리기를 집중적으로 사용해야합니다.

- Handler 사용 Thread 그것을 할, 또는 특별히 고통 안드로이드에 스레딩으로도 알려져있다 AsyncTask 만들어진 사용할 수 있습니다. 귀하의 경우

지금 문제는 :

-doInBackground() 비 UI 부분을 처리 할 수 ​​사용되는 방법입니다, 당신은 자신이에 textSong.setText((stream.getCurrentSong()));을 실행하고 있습니다. 이것은 응용 프로그램 충돌의 주요 원인입니다.

- 사용 onPostExecute() 방법은 UI 작업을, 그래서이 방법에서 텍스트의 설정을 유지합니다.

+0

덕분에, 내가 그것을 보호 무효 onPostExecute() \t \t { \t \t \t textSong = (텍스트 뷰) 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 캐치 (예외 E) { \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

질문을 편집합니다! –

관련 문제