2011-12-27 11 views
-1

12-27 16:57:11.711:E/AndroidRuntime(22081):原因:java.lang.ClassCastException:com.mygps.android.AlarmReceiver。java.lang.ClassCastException

これは私のlogcatエラーです。エラーとは何ですか?どのように私はそれを解決することができます。

サンプルコード:

public class MainActivity extends Activity { 
     private int currentIntervalChoice = 0; 

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

     setAppInfo(); 
     addButtonListeners(); 
     enableControls(); 
    } 

     private void addButtonListeners() { 
       ((Button)findViewById(R.id.start_logging)).setOnClickListener(btnClick); 
        ((Button)findViewById(R.id.logging_interval)).setOnClickListener(btnClick); 
     } 

     private void setAppInfo() { 
       TextView txtInfo = (TextView)findViewById(R.id.app_info); 

     txtInfo.setText(Html.fromHtml(getString(R.string.app_info))); 

     Linkify.addLinks(txtInfo, Linkify.ALL); 
     } 

     private void toggleLogging(boolean isStart, int interval){ 
       AlarmManager manager = (AlarmManager)getSystemService(Service.ALARM_SERVICE); 
      PendingIntent loggerIntent = PendingIntent.getBroadcast(this, 0,new Intent(this,AlarmReceiver.class), 0); 

      if(isStart){ 
        manager.cancel(loggerIntent); 

        AppSettings.setServiceRunning(this, false); 

        AppLog.logString("Service Stopped."); 
      } 
      else{ 
        setLogFileName(); 

        long duration = interval * 60 * 1000; 

        manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
            SystemClock.elapsedRealtime(), duration, loggerIntent); 

        AppSettings.setServiceRunning(this, true); 

        AppLog.logString("Service Started with interval " + interval + ", Logfile name: " + AppSettings.getLogFileName(this)); 
      } 
    } 

    private void enableControls(){ 
      boolean isServiceRunning = AppSettings.getServiceRunning(this); 
      String buttonText = getString(R.string.start_logging); 

      if(isServiceRunning){ 
        buttonText = getString(R.string.stop_logging); 

        ((Button)findViewById(R.id.logging_interval)).setEnabled(false); 
      } 
      else{ 
        ((Button)findViewById(R.id.logging_interval)).setEnabled(true); 
      } 

      ((Button)findViewById(R.id.start_logging)).setText(buttonText); 
    } 

    private void changeLoggingIntercal(){ 
      final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      final String loggingIntervals[] = { "5 minutes", "15 minutes", "30 minutes", "1 hour" }; 

    builder.setTitle(getString(R.string.logging_interval)); 
    builder.setSingleChoiceItems(loggingIntervals, currentIntervalChoice, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
          currentIntervalChoice = which; 

          setLoggingInterval(currentIntervalChoice); 

          dialog.dismiss(); 
        } 
      }); 

    builder.show(); 
    } 

    private void setLoggingInterval(int intervalChoice){ 
      int interval = 5; 

      switch(intervalChoice){ 
        case 0:   interval = 5; break; 
        case 1:   interval = 15; break; 
        case 2:   interval = 30; break; 
        case 3:   interval = 60; break; 
        default:  interval = 5; break; 
      } 

      AppSettings.setLoggingInterval(this, interval); 
    } 

    public void setLogFileName(){ 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      String dateString = sdf.format(new Date()); 
      String filename = "GPSLog." + dateString + ".kml"; 

      AppSettings.setLogFileName(this, filename); 
    } 

    private View.OnClickListener btnClick = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        switch(v.getId()) 
        { 
          case R.id.start_logging:{ 
            toggleLogging(AppSettings.getServiceRunning(MainActivity.this), 
                   AppSettings.getLoggingInterval(MainActivity.this)); 

            enableControls();  

            break; 
          } 
          case R.id.logging_interval:{ 
            changeLoggingIntercal(); 

            break; 
          } 
        } 
      } 
    }; 

}

Main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dip"> 


    <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:id="@+id/app_info" 
    android:layout_weight="1.0"/> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:padding="10dip"> 

    <Button 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/start_logging" 
      android:text="@string/start_logging" 
      android:layout_weight="1.0"/> 

    <Button 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/logging_interval" 
      android:text="@string/logging_interval" 
      android:layout_weight="1.0"/> 

</LinearLayout> 

logfile.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dip"> 


    <EditText 
     android:id="@+id/edit" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:hint="Enter log filename here." /> 

+0

正しいコードを投稿したかどうかわかりません。エラーの原因となる行は何ですか? –

+0

コードにキャスティングがありません。エラーが発生している行を見て、与えられたコード(おそらく、サブ関数enableControls()またはchangeLoggingIntercal()内に)を渡すことをお勧めします。 。 – AsTeR

+0

私のコードを編集しました。これは私が使っている完全なコードです。編集したコードを調べて、どこが間違っているのか教えてください。 。 –

答えて

0

これに関連するXMLレイアウトファイルと完全なlogcatを投稿してください。これは問題ではないかもしれないと私の提案は、((Button)findViewById(R.id.logging_interval))コントロールを参照する方法を止め、変数を使用することです。私は私があなたのボタンの

に問題があることを考える

<receiver android:name=".AlarmReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> 
</receiver> 

マニフェストファイルに警報受信機のクラスを追加するだけでAndroidがリキャストする試みとしてこれを解釈するとき、私は、エラーを見ているので、これを言うと

0

をフリークアウトonCreate()のボタンを取得し、必要なボタンのボタンを使用してください。

+0

私はxmlファイルを追加しました。レイアウトを見て、どこが間違っているのかを教えてください。 –

+0

この行を変更してくださいonCreate()のfindViewById(R.id.start_logging); –

+0

まだ使用していません。同じエラーです。 –

関連する問題