在Android上运行Runnable的问题

时间:2016-06-08 00:03:37

标签: java android multithreading

我遇到了两个Runnable类DownloadVideo和ReadVideo2的调用问题。我想在我的Activity类Client中调用它们,但是我有一个错误:“无法在没有调用Looper.prepare()的线程内创建处理程序”

我在其他论坛上看到了答案,但在我的情况下我无法实现。

客户:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView) findViewById(R.id.textView1);

    Connexion connexion = new Connexion();
    connexion.execute();

}

// Connexion avec le serveur via Socket
private class Connexion extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... arg0) {

        ConcurrentLinkedDeque<OutputStream[]> list = new ConcurrentLinkedDeque<>(); //Useless at the moment

        DownloadVideo task = new DownloadVideo(list);
        Thread thread = new Thread(task);
        thread.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            //
        }
        ReadVideo2 task2 = new ReadVideo2(list);
        Thread thread2= new Thread(task2);
        thread2.start();

        return null;
    }
}

首播(下载视频):

public void run() {

    try {
        client = new Socket(IP_SERVER, 9002); // Creating the server socket.

        if (client != null) {
            // Reception video
            InputStream in = client.getInputStream();
            OutputStream out[] = new OutputStream[1];
            out[0] = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Movies/chrono2.mp4");
            byte buf[] = new byte[1024];

            int n;
            while ((n = in.read(buf)) != -1) {
                out[0].write(buf, 0, n);
                //Ajout dans la liste en queue
                list.addLast(out);
                //System.out.println("byte : " + out);
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            handler.post(this);
            in.close();
            out[0].close();

            client.close();
        } else {
            System.out.println("Pas de serveur lancé sur le port " + client.getLocalPort() + " ...");
        }
    } catch (UnknownHostException e) {
        System.out.println("Impossible de se connecter au serveur " + IP_SERVER);
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("Impossible de se connecter au serveur" + IP_SERVER);
        e.printStackTrace();
    }

第二次运行:

View v;
Handler handler = new Handler();
public void run(){
    ReadVideo rv = new ReadVideo();
    rv.launchVideo(v);
    handler.post(this);
}

ReadVideo活动:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    launchVideo(v);
}

public void launchVideo(View v) {
    try{
        // Chemin de la vidéo
        Uri videoUri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Movies/chrono2.mp4");

        // Nouvelle activité qui permet de visionner une donnée (dans notre cas, la vidéo)
        Intent intent = new Intent(Intent.ACTION_VIEW);

        // On spécifie la donnée de l'activité ainsi que le MIME (ex: application, text, image, audio, etc.)
        // On veut lancer l'APPLICATION MX Video Player donc le MIME est "application"
        intent.setDataAndType(videoUri, "application/x-mpegURL");

        intent.putExtra(EXTRA_VIDEO_LIST, new Parcelable[] {videoUri});    // Permet d'éviter de lire toutes les vidéos du dossier du chemin envoyé


        //intent.setPackage(MXVP);    // Limite les applications possibles à celle de MX Video Player
        startActivity(intent);
    }
    catch( ActivityNotFoundException e2){
        //  displayToast(getResources().getString(R.string.error_unknownMX)); // Erreur, on affiche un message à l'utilisateur
        // Log.e( "Error", getResources().getString(R.string.error_unknownMX));
    }
}

谢谢你,对不起代码:/

0 个答案:

没有答案