2012-04-04 11 views
0

Android用のアプリケーションに新しいアップデートをテストしているときに、アプリケーションが "optionsmenu"(私が知っているもの)を起動しようとするとクラッシュします。ここでは、コードがあります:開くとアプリケーションがクラッシュする

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     Toast.makeText(this, "GPS'n är aktiverad på din mobilenhet", Toast.LENGTH_SHORT).show(); 
    }else{ 
     showGPSDisabledAlertToUser(); 
    } 

    setContentView(R.layout.about); 
    Button b = (Button) findViewById(R.id.menuItem1); 
    b.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
     Intent i = new Intent(nowActivity.this, About.class); 
     startActivity(i); 
     } 
    }); 
} 

そしてLogCat:

04-04 00:50:27.324: D/LocationManager(870): Constructor: service = [email protected] 
04-04 00:50:27.374: D/AndroidRuntime(870): Shutting down VM 
04-04 00:50:27.374: W/dalvikvm(870): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
04-04 00:50:27.374: E/AndroidRuntime(870): Uncaught handler: thread main exiting due to uncaught exception 
04-04 00:50:27.384: E/AndroidRuntime(870): java.lang.RuntimeException: Unable to start activity ComponentInfo{weather.right.now/weather.right.nowActivity}: java.lang.NullPointerException 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.os.Looper.loop(Looper.java:123) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-04 00:50:27.384: E/AndroidRuntime(870): at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 00:50:27.384: E/AndroidRuntime(870): at java.lang.reflect.Method.invoke(Method.java:521) 
04-04 00:50:27.384: E/AndroidRuntime(870): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-04 00:50:27.384: E/AndroidRuntime(870): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-04 00:50:27.384: E/AndroidRuntime(870): at dalvik.system.NativeStart.main(Native Method) 
04-04 00:50:27.384: E/AndroidRuntime(870): Caused by: java.lang.NullPointerException 
04-04 00:50:27.384: E/AndroidRuntime(870): at weather.right.nowActivity.onCreate(nowActivity.java:37) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-04 00:50:27.384: E/AndroidRuntime(870): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
04-04 00:50:27.384: E/AndroidRuntime(870): ... 11 more 
04-04 00:50:27.404: I/dalvikvm(870): threadid=7: reacting to signal 3 
04-04 00:50:27.424: E/dalvikvm(870): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 

私は現在、私がここで間違っているのか分からないので、適切なAndroidアプリケーションを構築するために学んでいます。何が間違っているか知っていますか?

ありがとうございます!

EDIT:About.java

package weather.right; 

import weather.right.now.R; 
import android.app.Activity; 
import android.os.Bundle; 

public class About extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.about); 
    } 

} 

EDIT:nowActivity.java

package weather.right; 

// import java.util.Calendar; 

import weather.right.now.R; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.location.LocationManager; 
import android.net.Uri; 
import android.os.Bundle; 
// import android.view.Menu; 
// import android.view.MenuInflater; 
// import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class nowActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
      Toast.makeText(this, "GPS'n är aktiverad på din mobilenhet", Toast.LENGTH_SHORT).show(); 
     }else{ 
      showGPSDisabledAlertToUser(); 
     } 

     setContentView(R.layout.about); 
     Button b = (Button) findViewById(R.id.menuItem1); 
     b.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
      Intent i = new Intent(nowActivity.this, About.class); 
      startActivity(i); 
      } 
     }); 
    } 

    @Override 
    public void onBackPressed() { 
     System.exit(0); 
     return; 
    } 
/* 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     MenuInflater menuInflater = getMenuInflater(); 
     menuInflater.inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     // Calendar c = Calendar.getInstance(); 
     // int year = c.get(Calendar.YEAR); 

     // Handle item selection 
     switch (item.getItemId()) 
     { 
     case R.id.menuItem1: 
      // Toast.makeText(nowActivity.this, "Copyright " + year + " Erik Edgren", 3000).show(); 
      setContentView(R.layout.about); 
      return true; 
     case R.id.menuItem2: 
      System.exit(0); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 
    */ 



    public void goToSo(View view) { 
     goToUrl("http://erik-edgren.nu/weather"); 
     System.exit(0); 
    } 

    private void goToUrl(String url) { 
     Uri uriUrl = Uri.parse(url); 
     Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl); 
     startActivity(launchBrowser); 
     System.exit(0); 
    } 



    private void showGPSDisabledAlertToUser(){ 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
      alertDialogBuilder.setMessage("GPS-mottagaren är inte aktiverad på din mobil. För att tjänsten ska kunna hitta dig, måste den vara aktiverad.") 
     .setCancelable(false) 
     .setPositiveButton("Gå till inställningarna", 
       new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, int id){ 
         Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         startActivity(callGPSSettingIntent); 
         System.exit(0); 
       } 
     }); 
     alertDialogBuilder.setNegativeButton("Stäng", 
       new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, int id){ 
        dialog.cancel(); 
        System.exit(0); 
       } 
     }); 
    AlertDialog alert = alertDialogBuilder.create(); 
    alert.show(); 
    } 
} 

EDIT:のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="weather.right.now" 
    android:versionCode="1" 
    android:versionName="1.1" > 

    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

    <application 
     android:icon="@drawable/sun_icon" 
     android:label="@string/app_name" > 
     <activity 
      android:name="weather.right.nowActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

    <application 
     android:icon="@drawable/sun_icon" 
     android:label="@string/app_name" > 
     <activity 
      android:name="weather.right.About" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

EDIT

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

    <TextView 
     android:layout_width="252dp" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:text="@string/about" /> 

</LinearLayout> 
+0

idはあなたの約レイアウトにありますか?あなたのレイアウトに関するあなたの気持ちを伝えますか?なぜなら、あなたのIDがそのレイアウトにないなら、それは常にあなたにnullpointer例外をスローするからです。 – Raykud

+0

私の編集を参照してください:)多分何かを変更するのを忘れてしまったでしょう。私はそう望みますが、私はアプリケーションを起動するときにエラーが発生すると予想しています。 – Erik

+0

main.xmlを投稿できますか?それは、menuItem1の権利を含むとされているXMLファイルのようですか? – ByteMe

答えて

2

about.xmlあなたがログにCaused by: java.lang.NullPointerExceptionを言うラインを参照していますか?右のそれを下回る。これは、あなたのnowActivityのライン37でスローされるNullPointerExceptionがあることを意味ラインat weather.right.nowActivity.onCreate(nowActivity.java:37)

です。その行をダブルクリックすると、Activityが開き、エラーがスローされている場所に直接移動します。だから、すべてのことを念頭に置いてください。

あなたのonCreateメソッドでsetContentViewを2回使用しています。 About.classabout.xmlを使用するようです。また、Exceptionが投げられていると思われる場合は、あなたのMenuが原因であると思われる場合は、OPに関連するので、そのコードを投稿する必要があります。

37About.classの開始に関係しています。 Manifestにタグが設定されており、に使用しているLayoutの一部にButtonが含まれていることをご確認ください。

あなたが最初に起動したい、またはあなたのアプリの引き出しの内側に表示されます1、私は投稿 Intent-Filterタグを含める必要がありますが、他の Activitiesは、それらの特定のタグを含める必要はありません、いくつかの必要があるかもしれませんどちら Activity
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="weather.right.now" 
android:versionCode="1" 
android:versionName="1.1" > 

<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<application 
    android:icon="@drawable/sun_icon" 
    android:label="@string/app_name" > 
    <activity 
     android:name="weather.right.nowActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="weather.right.About" 
     android:label="@string/app_name" /> 
</application> 

</manifest> 

Intent-Filterでも。また、AndroidManifestのすべてがONE<manifest></manifest>タグとONE<application></application>の中に入る必要があります。

+0

ヘッドアップありがとう! :)私は次回、私はいくつかのエラーが発生していることを覚えています。 37行目のエラーメッセージをダブルクリックすると、私はこの行に戻ります: 'b.setOnClickListener(new View.OnClickListener(){'。)ユーザが「About」ボタンをクリックしたときに新しいウィンドウを作りたい"あなたの携帯電話のメニューボタンを押したときに表示されるメニューのリンク。私の' nowActivity.java'ファイルと 'About.java'ファイルを編集してください。 – Erik

+0

私の答えで述べたことを試してみてください。 2回目の 'setContentView'呼び出しを削除し、' About.class'を 'Manifest'で参照し、' Button'、 'menuItem1'が' main.xml'の一部であることを確認してください。 – adneal

+0

'私が '' Manifest' "を使って何を意味するのか分かりません"#:。msgstr " – Erik

0

この行を変更してみてください:Intent i = new Intent(getApplicationContext(), About.class);

ため

Intent i = new Intent(nowActivity.this, About.class); 

、あなたは、フラグメント使用している場合:

Intent i = new Intent(getActivity().getApplicationContext(), About.class); 

OKあなたがView.onOnclickListernerを使用しているが...削除してみてください単語の表示。 :)これは次のようになります。

b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 

あなたのレイアウトにボタンIDがあることを確認してください。 注:最後にsetContentViewが使用されているため、setContentView(R.layout.about);、ボタンのIDはである必要があります。はそのレイアウトになります。

+0

ありがとうございますが、 'Intent i = new Intent(getApplicationContext()、About.class);に行を変更しました;'私の突然のクラッシュを変更しませんでしたapplication:/ – Erik

+0

ok私は自分の答えを編集したので、試してみることができます。 – Raykud

+0

ありがとうございましたが、問題は解決しませんでした:/ – Erik

0

ここにコードを見てください。かなり奇妙なsetContentViewを2回呼び出すことができます。私は約ボックスが表示されるようにしようとしているが、私はあなただけは本当にただsetContentView(R.layout.main);

は、今も私はButton b = (Button) findViewById(R.id.menuItem1);がnullであるので、あなたのNullPointerExceptionは推測するつもりですたかったと仮定すると、電話を持っているだろうと推測しています。メニュー/フォルダにメニューXMLファイルを作成してメニューを作成したと思います。あなたが実際に探しているのはlayout/main.xmlのボタンで、android:id="menuItem1"です。存在すればそれを見つけるでしょう、そうでなければnullを返します。このコードは、メニューXMLから作成されたことを意味します。その場合は、これを処理する方法です。

// Load the menu into the activity. Add this code to the activity class. 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.example_menu, menu); 
    return true; 
} 

// Handler for menu selections. 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

    case R.id.menuItem1: { 
    // do work. 
    } break; 
    default: 
    return super.onOptionsItemSelected(item); 
    } 

    return true; 
} 
+0

ありがとう、私の前のトピックを参照してください:) http://stackoverflow.com/questions/10003123/pressing-the-go-back-button-closes-the-application – Erik

関連する問題