2013-04-21 1 views
1

Я очень новичок в Android & сейчас у меня возникла странная проблема в моем приложении. Это не дает мне никаких ошибок в консоли. Я просто пытаюсь проверить различные варианты уведомления о Android и по этой причине здесь мой написанный код:К сожалению, MyApp отключен в эмуляторе

class Home extends Activity { 

    Button notification; 
    Button progress; 
    private int ID=1; 
    ProgressDialog pd; 
    ProgressTask pt = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     notification=(Button)this.findViewById(R.id.start_notification); 
     notification.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       StartNotification(); 
      }}); 
     Button background = (Button)this.findViewById(R.id.change_background); 
     background.setOnClickListener(new OnClickListener() {  
      public void onClick(View v) { 
       showDialog(0); 

      }}); 
     progress.setOnClickListener(new OnClickListener() {  
      public void onClick(View v) { 
       showDialog(1); 

      }}); 
    } 
    @Override 
    protected Dialog onCreateDialog(int id) 
    { 
     final CharSequence[] items = {"Black","Red", "Green", "Blue", "Gray"}; 
     final String[] color = {"#202020","#D11919", "#339966", "#006699", "#818181"}; 
     switch(id) { 
     case 0: 
      return new AlertDialog.Builder(this) 

      .setTitle("Set Background Color") 
      .setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        View mainLayout = findViewById(R.id.activity_home); 
        View root = mainLayout.getRootView(); 
        new Color(); 
        root.setBackgroundColor(Color.parseColor(color[item])); 
        dismissDialog(0); 
       } 
      }).create(); 

     case 1: 
      pd = new ProgressDialog(Home.this); 
      pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      pd.setMessage("Downloading..."); 
      return pd; 


     } 
     return null; 
    } 

    @Override 
    protected void onPrepareDialog(int id, Dialog dialog) {  
     switch(id) { 
     case 1: 
      pd.setProgress(0); 
      pt = new ProgressTask(handler); 
      pt.start();    
     } 

    } 

    final Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      int count = msg.arg1; 
      pd.setProgress(count); 
      if (count >= 100){ 
       dismissDialog(1); 
       pt.setStatus(false); 
      } 
     } 
    }; 
    private class ProgressTask extends Thread { 
     Handler myHandler; 
     int count = 0; 
     boolean status = true; 

     ProgressTask(Handler _handler) { 
      myHandler = _handler; 
     } 

     public void run() {      

      while (status) { 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Message msg = myHandler.obtainMessage(); 
       msg.arg1 = count; 
       myHandler.sendMessage(msg); 
       count++; 
      } 
     } 

     public void setStatus(boolean m){ 
      status = m; 
     } 
    } 

    private void StartNotification() 
    { 
     Intent intent= new Intent(Home.this, NotificationView.class); 
     intent.putExtra("ID", ID); 
     PendingIntent pendingIntent=PendingIntent.getActivity(Home.this, 0, intent, 0); 
     NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     Notification notif = new Notification(
       R.drawable.ball,"Reminder: Game starts in 15 minutes", 
       System.currentTimeMillis()); 
     CharSequence from = "Sports Center"; 
     CharSequence message = "Game: L.A Lakers vs Miami Heat"; 
     notif.setLatestEventInfo(this, from, message, pendingIntent); 

     notif.vibrate = new long[] { 100, 250, 100, 500}; 

     nm.notify(ID, notif); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_home, menu); 
     return true; 
    } 

} 

И вот мой Log:

04-21 16:55:03.829: I/dalvikvm(907): threadid=3: reacting to signal 3 
04-21 16:55:03.966: I/dalvikvm(907): Wrote stack traces to '/data/anr/traces.txt' 
04-21 16:55:04.265: I/dalvikvm(907): threadid=3: reacting to signal 3 
04-21 16:55:04.545: D/dalvikvm(907): newInstance failed: Lcom/example/statusbar/Home; not accessible to Landroid/app/Instrumentation; 
04-21 16:55:04.545: I/dalvikvm(907): Wrote stack traces to '/data/anr/traces.txt' 
04-21 16:55:04.555: D/AndroidRuntime(907): Shutting down VM 
04-21 16:55:04.555: W/dalvikvm(907): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
04-21 16:55:04.595: E/AndroidRuntime(907): FATAL EXCEPTION: main 
04-21 16:55:04.595: E/AndroidRuntime(907): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.statusbar/com.example.statusbar.Home}: java.lang.IllegalAccessException: access to class not allowed 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.os.Looper.loop(Looper.java:137) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-21 16:55:04.595: E/AndroidRuntime(907): at java.lang.reflect.Method.invokeNative(Native Method) 
04-21 16:55:04.595: E/AndroidRuntime(907): at java.lang.reflect.Method.invoke(Method.java:511) 
04-21 16:55:04.595: E/AndroidRuntime(907): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-21 16:55:04.595: E/AndroidRuntime(907): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-21 16:55:04.595: E/AndroidRuntime(907): at dalvik.system.NativeStart.main(Native Method) 
04-21 16:55:04.595: E/AndroidRuntime(907): Caused by: java.lang.IllegalAccessException: access to class not allowed 
04-21 16:55:04.595: E/AndroidRuntime(907): at java.lang.Class.newInstanceImpl(Native Method) 
04-21 16:55:04.595: E/AndroidRuntime(907): at java.lang.Class.newInstance(Class.java:1319) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
04-21 16:55:04.595: E/AndroidRuntime(907): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 
04-21 16:55:04.595: E/AndroidRuntime(907): ... 11 more 
04-21 16:55:04.775: I/dalvikvm(907): threadid=3: reacting to signal 3 
04-21 16:55:04.826: I/dalvikvm(907): Wrote stack traces to '/data/anr/traces.txt' 
04-21 16:55:05.155: I/dalvikvm(907): threadid=3: reacting to signal 3 
04-21 16:55:05.175: I/dalvikvm(907): Wrote stack traces to '/data/anr/traces.txt' 
04-21 16:55:07.255: I/Process(907): Sending signal. PID: 907 SIG: 9 

Что может быть проблема?

ответ

0

В коде есть две проблемы.

1- Составьте класс public, чтобы вы могли получить к нему доступ. 2- Вы забыли добавить

progress = (Button)this.findViewById(R.id.progress); 

Вот почему вы получаете NullPointer Теперь вы хорошо идти!

+0

Спасибо @auicsc за внимание. Я забыл включить кнопку FindViewById прогресса. – user2304819

+1

Это, должно быть, было так трудно прочитать [мой * 2 * час старый комментарий] (http://stackoverflow.com/questions/16133775/unappro-myapp-has-stopped-in-emulator/16133825#comment23047245_16133825) и поверните это в ответ. –

5

Поскольку трассировки стека говорит:

java.lang.IllegalAccessException: access to class not allowed 

Это означает, что

class Home extends Activity { 

должен быть

public class Home extends Activity { 

Мероприятия должны быть public классы иначе Android не сможет доступ к ним.

+0

Спасибо за ваш быстрый ответ. Я уже пробовал это, но нет удачи. Теперь это новый журнал, добавленный в консоль вместо java.lang.IllegalAccessException: доступ к классу не разрешен. "04-21 17: 08: 47.755: E/AndroidRuntime (998): java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.example.statusbar/com.example.statusbar.Home}: java.lang.NullPointerException" – user2304819

+2

Привет После долгого времени. Рад снова видеть вас в SO. – Pragnani

+2

@ user2304819 Ну, первая проблема решена, но теперь одна из ваших переменных - «null», и вы пытаетесь получить к ней доступ, в результате чего появился NPE. Переменная 'progress', кажется, остается' null', так как 'findViewById()' не был вызван для нее. Там может быть больше переменных. Поскольку ваш класс несколько велик, используйте операторы отладки и отладчик, чтобы понять все. Это важный навык для изучения. –