6

Ho una lista di errori strana, alcuni apparentemente disconnessi ma non ho modo di dirlo perché non riesco nemmeno a caricare la mia app sul debug. È un'app molto semplice, 3 pulsanti radio in un gruppo radio e ognuno attiverà un brano diverso da riprodurre.Android - errore di apertura del file di traccia: nessun file o directory

Inizierò pubblicando il mio manifest, il mio file di attività e il layout, quindi pubblicheremo il log degli errori.

manifesto:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.cis298.lab2" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:label = "@string/app_name" 
      android:name = ".LayoutActivity"> 
      <intent-filter > 
       <action android:name = "android.intent.action.MAIN" /> 

       <category android:name = "android.intent.category.LAUNCHER" /> 

      </intent-filter> 
      ></activity> 
    </application> 

</manifest> 

LayoutActivity:

package com.cis298.lab2; 

import java.io.IOException; 

import com.cis298.lab2.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.media.MediaPlayer; 
import android.widget.RadioGroup; 

public class LayoutActivity extends Activity { 

    int song; 
    MediaPlayer mediaplayer = MediaPlayer.create(this, song); 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout); 
     try { 
      mediaplayer.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup); 
     radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       switch (checkedId){ 
       case R.id.dance: 
        song = R.raw.redalert; 
        mediaplayer.start(); 
        break; 
       case R.id.rap: 
        song = R.raw.cannedheat; 
        break; 
       case R.id.rock: 
        song = R.raw.movmou8105; 
        break;} 
      } 
     }); 
    } 
} 

la layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <RadioGroup 
     android:id="@+id/radiogroup" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical" > 

     <RadioButton 
      android:id="@+id/rock" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Play Rock" /> 

     <RadioButton 
      android:id="@+id/rap" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Play Rap" 
      android:checked="true"/> 

     <RadioButton 
      android:id="@+id/dance" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Play Dance" 
      android:textAlignment="center" /> 

    </RadioGroup> 

</RelativeLayout> 

Log:

02-21 20: 34: 05.0 44: D/AndroidRuntime (322): Arresto della macchina virtuale 02-21 20: 34: 05.044: W/dalvikvm (322): threadid = 1: thread in uscita con eccezione non rilevata (gruppo = 0x4001d800) 02-21 20:34 : 05.094: E/AndroidRuntime (322): FATAL EXCEPTION: main 02-21 20: 34: 05.094: E/AndroidRuntime (322): java.lang.RuntimeException: impossibile attività di istanza ComponentInfo {com.cis298. lab2/com.cis298.lab2.LayoutActivity}: java.lang.NullPointerException 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2585) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2 679) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.os.Handler.dispatchMessage (Gestore. java: 99) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.os.Looper.loop (Looper.java:123) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread.main (ActivityThread.java:4627) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a java.lang.reflect.Method.invokeNative (Native Metodo) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a java.lang.reflect.Method.invoke (Method.java:521) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a com.android.internal.os .ZygoteInit.main (ZygoteInit.java:626) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a dalvik.system.NativeStart.main (metodo nativo) 02-21 20: 34: 05.094: E/AndroidRuntime (322): causato da: java.lang.NullPointerException 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.content.ContextWrapper.getResources (ContextWrapper.java:80) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.media.MediaPlayer.create (MediaPlayer.java:641) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a com.cis298.lab2.LayoutActivity. (LayoutActivity.java:15) 02-21 20:34:05.094: E/AndroidRuntime (322): a java.lang.Class.newInstanceImpl (metodo nativo) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a java.lang.Class.newInstance (Classe .java: 1429) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.Instrumentation.newActivity (Instrumentation.java:1021) 02-21 20: 34: 05.094: E/AndroidRuntime (322): a android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2577) 02-21 20: 34: 05,094: E/AndroidRuntime (322): 11 ... more

Qualunque l'aiuto sarebbe molto apprezzato.

+0

Non hai inizializzato qualcosa nella tua attività. questo è tutto quello che posso dire da questo! – smk

+1

Che cos'è la riga 15 di LayoutActivity.java? –

+0

BTW C'era un extra> prima di I il tag attività vicino che ho rimosso e sto ancora ricevendo gli stessi errori. –

risposta

3

Provare a spostare mediaplayer = MediaPlayer.create(this, song); all'interno onCreate().

Poiché l'attività non è completamente inizializzata fino a onCreate(), questa potrebbe essere la causa dell'NPE.

Tuttavia, il problema successivo è che si crea il MediaPlayer con il canto dell'essere inizialmente 0 (int ha un valore predefinito di 0 quando si tratta di una variabile di istanza). Quindi, se lo spostamento di MediaPlayer.create risolve questo NPE, l'errore successivo sarà qualcosa su non essere in grado di trovare la risorsa. Pertanto, chiamare MediaPlayer.create una volta song in attesa di qualcosa utile.

Forse qualcosa del genere funzionerà.

public class LayoutActivity extends Activity { 

    int song; 
    MediaPlayer mediaPlayer; 

    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout); 

    RadioGroup radgrp = (RadioGroup) findViewById(R.id.radiogroup); 
    radgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
     switch (checkedId){ 
      case R.id.dance: 
      song = R.raw.redalert; 
      break; 
      case R.id.rap: 
      song = R.raw.cannedheat; 
      break; 
      case R.id.rock: 
      song = R.raw.movmou8105; 
      break; 
     } 


     mediaplayer = MediaPlayer.create(LayoutActivity.this, song); 
     try { 
      mediaplayer.prepare(); 
      mediaplayer.start(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
    }); 
    } 
} 

E se brano non viene utilizzato in qualsiasi altro luogo, si può conservare nel perimetro di onCheckedChanged().

+0

Questo era il mio problema (dovendo spostarlo nel metodo onCreate). Inoltre, mi occorrono 5 o più minuti per caricare l'APK ogni volta. L'ho esaminato e le persone si sono lamentate di circa 90 secondi, quindi qualcosa deve essere veramente sbagliato, qualche idea? –

+1

Siamo stati tutti nuovi, e la tua domanda è stata bella e dettagliata :-) con i nuovi utenti, mi collego sempre a quella meta domanda se hanno detto la mia risposta, dato che non tutti hanno familiarità con il funzionamento di SO. Comunque, benvenuto! –

Problemi correlati