0

アプリケーションを ma Galaxy S2 で実行したいのですが、このエラーが見つかりました。logcat を投稿します。何が問題なのか教えてください。そしてそれを解決する方法は?ありがとう

05-07 11:23:38.820: D/AndroidRuntime(8900): Shutting down VM
05-07 11:23:38.820: W/dalvikvm(8900): threadid=1: thread exiting with uncaught exception (group=0x40c3f1f8)
05-07 11:23:38.820: E/AndroidRuntime(8900): FATAL EXCEPTION: main
05-07 11:23:38.820: E/AndroidRuntime(8900): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.aaaaa/com.example.aaaaa.MainActivity}: java.lang.NullPointerException
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1892)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.os.Looper.loop(Looper.java:137)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread.main(ActivityThread.java:4507)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at java.lang.reflect.Method.invokeNative(Native Method)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at java.lang.reflect.Method.invoke(Method.java:511)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at dalvik.system.NativeStart.main(Native Method)
05-07 11:23:38.820: E/AndroidRuntime(8900): Caused by: java.lang.NullPointerException
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.view.View.<init>(View.java:2721)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.view.View.<init>(View.java:2769)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.widget.TextView.<init>(TextView.java:573)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.widget.TextView.<init>(TextView.java:566)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.widget.TextView.<init>(TextView.java:561)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at com.example.aaaaa.MainActivity.<init>(MainActivity.java:28)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at java.lang.Class.newInstanceImpl(Native Method)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at java.lang.Class.newInstance(Class.java:1319)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.Instrumentation.newActivity(Instrumentation.java:1026)
05-07 11:23:38.820: E/AndroidRuntime(8900):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1883)
05-07 11:23:38.820: E/AndroidRuntime(8900):     ... 11 more

これは MainActivity.java です MainActivity に TextView がないため、エラーが発生していると思いますがTextView view = new TextView(this);、別のクラス (setting.java) の textview からデータを抽出したい

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;

public class MainActivity extends MapActivity {

       String num;
       TextView view = new TextView(this);


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

          Bundle extra = getIntent().getExtras();
          num = extra.getString("label");



          final TextView view = new TextView(this);
          Uri uriSMSURI = Uri.parse("content://sms/inbox");
          Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
          String sms = "";
          while (cur.moveToNext()) {

              String spn ="+21629188153";
              String phNum =cur.getString(2);
              if (spn.equals(phNum)){
              sms +=cur.getString(12); 
                              }      
              }

             String a =sms.substring(0,10);
             String b =sms.substring(11,21); 

              MapView maMap;
            MapController monControler;

               maMap = (MapView)findViewById(R.id.myGmap);
                maMap.setBuiltInZoomControls(true);

                GeoPoint point = new GeoPoint (microdegrees(Double.parseDouble(a)),microdegrees(Double.parseDouble(b)));

                MonOverlay object = new MonOverlay(getResources().getDrawable(R.drawable.marker_voisinage_rouge));
                object.addPoint(point);
                maMap.getOverlays().add(object);
                maMap.setSatellite(true);

                monControler = maMap.getController();
                monControler.setZoom(12);
                monControler.setCenter(point);

                Button monBouton = (Button)findViewById(R.id.envoie_sms);

                monBouton.setOnClickListener(new View.OnClickListener() {

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

                            Intent monIntent = new Intent(MainActivity.this,SendSms.class);
                            startActivity(monIntent);

                    }
                } );

                Button mnBouton = (Button)findViewById(R.id.setting);

                mnBouton.setOnClickListener(new View.OnClickListener() {

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

                        setContentView(R.layout.setting);

                    }
                } );

                Button myBouton = (Button)findViewById(R.id.aff);

                myBouton.setOnClickListener(new View.OnClickListener() {

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

                          view.setText(num);
                          setContentView(view);

                    }
                } );
      }










            private int microdegrees (double value){
                return (int)(value*1000000);
            }

            @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_main, menu);
                return true;
            }

            @Override
            protected boolean isRouteDisplayed() {
                // TODO Auto-generated method stub
                return false;
            }
            public class MonOverlay extends ItemizedOverlay<OverlayItem>{

                List<GeoPoint> points = new ArrayList<GeoPoint>();

                public MonOverlay(Drawable arg0) {
                    super(boundCenterBottom(arg0));
                    // TODO Auto-generated constructor stub
                }

                @Override
                protected OverlayItem createItem(int i) {
                    GeoPoint point = points.get(i);
                    return new OverlayItem(point,"titre","description");
                }

                @Override
                public int size() {

                    return points.size();
                }

                public void addPoint (GeoPoint point){
                    this.points.add(point);
                    populate();
                }

            } 


}

これはs1 = num.getText().toString();Setting.java で、MainActivity.javaに渡したい

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class setting extends Activity {
    Button sauvg;
    EditText    num;
    String s1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting);
        sauvg = (Button)findViewById(R.id.ok);
        num = (EditText)findViewById(R.id.editText1);

        sauvg.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v)
            {
                Intent t = new Intent(setting.this, MainActivity.class);
                s1 = num.getText().toString();
                t.putExtra("label",s1);
                startActivity(t);


                // TODO Auto-generated method stub

            }
        });

}
}
4

1 に答える 1

2

エラーは次のとおりです。

public class MainActivity extends MapActivity {

   String num;
   TextView view = new TextView(this); // <- HERE

そこにビューを作成することはできませんが、次のonCreateように作成をメソッドに移動する必要があります。

public class MainActivity extends MapActivity {

   String num;
   TextView view;


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

      this.view = new TextView(this);
      Bundle extra = getIntent().getExtras();

変数名には注意してください。「view」という名前が 2 つありますが、これはエラーではありません (1 つは のローカル変数、もう 1 つはonCreateインスタンス変数です) が、エラーを起こしやすいです。

ちなみに、他のActivityのTextViewに直接アクセスすることはできません。アクティビティ間でデータを共有したい場合は、Intents または Message&Handler を使用する必要があります

編集

アプリの起動時に MainActivity が最初に起動されるアクティビティである場合、アプリがクラッシュする可能性があります。これは、次のように、呼び出し元のインテントを使用する前にエクストラがあるかどうかを確認する必要があるために発生します。

Bundle extra = getIntent().getExtras();
if (extra != null) {
   num = extra.getString("label");
}
于 2013-05-07T10:53:03.300 に答える