0

2 つのアクティビティ間で複数の値を渡そうとしていますが、コードがクラッシュし、その理由がわかりません。コードは画像ボタンから呼び出されますが、アプリは停止するだけです。

if(v==image1){
    try {
        Calendar c = Calendar.getInstance();
        System.out.println("Current time => "+c.getTime());

        SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        String formattedDate = df.format(c.getTime());
        //now we have the time lets write it to the file
        File myFile = new File("/sdcard/.working/mx.txt");
        myFile.createNewFile();
        FileOutputStream fOut = new FileOutputStream(myFile, true);
        OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
        myOutWriter.append(formattedDate);
        myOutWriter.append(" :");
        myOutWriter.append(tv1.getText());
        myOutWriter.append(" ,  ");
        myOutWriter.close();
        fOut.close();
    }catch (Exception e) {
        Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
    }
    mx=mx++;
    Intent startabout = new Intent(RTO.this, RTOShooting.class); //this is about screen
    startabout.putExtra("mx", mx);
    startabout.putExtra("Callsign", tv1.getText());
    final int result=1;
    startActivityForResult(startabout, result);
    overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
}

受信コードは次のようになります (私がそこまで到達したことはありません...)

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rtoshooting);
    Bundle extras = getIntent().getExtras();
    if (extras !=null){
        int mx = extras.getInt("mx");
    }
}

誰かが私が明らかに欠けているものに私を導くことができますか?

LOGCAT出力は

02-27 11:44:46.461: W/dalvikvm(20231): threadid=1: thread exiting with uncaught exception (group=0x41053930)
02-27 11:44:46.471: E/AndroidRuntime(20231): FATAL EXCEPTION: main
02-27 11:44:46.471: E/AndroidRuntime(20231): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nexgen.threedashone.trainer/com.nexgen.threedashone.trainer.RTOShooting}: java.lang.NullPointerException
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2304)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2354)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.os.Looper.loop(Looper.java:137)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread.main(ActivityThread.java:5191)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at java.lang.reflect.Method.invokeNative(Native Method)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at java.lang.reflect.Method.invoke(Method.java:511)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at dalvik.system.NativeStart.main(Native Method)
02-27 11:44:46.471: E/AndroidRuntime(20231): Caused by: java.lang.NullPointerException
02-27 11:44:46.471: E/AndroidRuntime(20231):    at com.nexgen.threedashone.trainer.RTOShooting.onCreate(RTOShooting.java:40)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.Activity.performCreate(Activity.java:5104)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-27 11:44:46.471: E/AndroidRuntime(20231):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
02-27 11:44:46.471: E/AndroidRuntime(20231):    ... 11 more

また、次のような独自のバンドルを作成しようとしました。

        Bundle b = new Bundle();
        b.putString("Callsign", tv1.getText().toString());
        b.putInt("mx", mx);
        startabout.putExtras(b);

このように受け取ります:

    Bundle b = getIntent().getExtras();

    String callsign = b.getString("Callsign");

    int mx = b.getInt("mx");

しかし、非常によく似た logcat 出力でクラッシュします。tvcallsign.setText(コールサイン);

編集:これは各アクティビティの完全なコードです。きれいではありませんが、JavaとAndroidに取り掛かっています:

    package com.test.trainer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.res.AssetManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.NavUtils;

public class RTO extends Activity implements Chronometer.OnChronometerTickListener, OnClickListener {

     //define buttons etc
     private Button babout;
     private Button bhome;
    private ImageButton image1;
    private ImageButton image2;
    private ImageButton image3;
    private ImageButton image4;
    private ImageButton image5;
    private ImageButton image6;
    private ImageButton image7;
    private ImageButton image8; 
    private ImageButton image9; 
    private ImageButton image10;
    private ImageButton image11;
    private ImageButton image12;
    private ImageButton image13;
    private ImageButton image14;
    private ImageButton image15;
    private ImageButton image16;
    private ImageButton imagesetup;
    private ImageButton imageevent;
    private ImageButton imageend;

        TextView tv1;
        TextView tv2;
        TextView tv3;
        TextView tv4;
        TextView tv5;
        TextView tv6;
        TextView tv7;
        TextView tv8;
        TextView tv9;
        TextView tv10;
        TextView tv11;
        TextView tv12;
        TextView tv13;
        TextView tv14;
        TextView tv15;
        TextView tv16;

    public ListView lv1;
    public Chronometer mchrono;


    //define logic
    public int mx = 0;
    public int configured = 0;
    public int side = 0; //int to handle which colour buttons to use
    public int prijettype = 0; //int for primary  type
    public int secjettype = 0; //int for sec  type

    public int prijetnumber = 0; //int for primary  numbers
    public int secjetnumber = 0; //int for sec  numbers

    //hint array strings
    public String loadeddata;
    public String[] splitdata;

    public String callsign;      

    ContextWrapper mContext = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rto);
        getActionBar().setDisplayHomeAsUpEnabled(true);

     //define the buttons etc for use
        babout = (Button)findViewById(R.id.babout);   //about button
        bhome = (Button)findViewById(R.id.bhome);   //home button
        image1 = (ImageButton)findViewById(R.id.image1); 
        image2 = (ImageButton)findViewById(R.id.image2);
        image3 = (ImageButton)findViewById(R.id.image3); 
        image4 = (ImageButton)findViewById(R.id.image4); 
        image5 = (ImageButton)findViewById(R.id.image5); 
        image6 = (ImageButton)findViewById(R.id.image6); 
        image7 = (ImageButton)findViewById(R.id.image7); 
        image8 = (ImageButton)findViewById(R.id.image8); 
        image9 = (ImageButton)findViewById(R.id.image9); 
        image10 = (ImageButton)findViewById(R.id.image10); 
        image11 = (ImageButton)findViewById(R.id.image11);
        image12 = (ImageButton)findViewById(R.id.image12);
        image13 = (ImageButton)findViewById(R.id.image13);
        image14 = (ImageButton)findViewById(R.id.image14); 
        image15 = (ImageButton)findViewById(R.id.image15); 
        image16 = (ImageButton)findViewById(R.id.image16); 
        imageend = (ImageButton)findViewById(R.id.imageend);  //end mission
        imagesetup = (ImageButton)findViewById(R.id.imagesetup); //setup button
        imageevent = (ImageButton)findViewById(R.id.imageevent); //event button

   tv1 = (TextView) findViewById(R.id.tv1);
        tv2 = (TextView) findViewById(R.id.tv2);
        tv3 = (TextView) findViewById(R.id.tv3);
        tv4 = (TextView) findViewById(R.id.tv4);
        tv5 = (TextView) findViewById(R.id.tv5);
        tv6 = (TextView) findViewById(R.id.tv6);
        tv7 = (TextView) findViewById(R.id.tv7);
        tv8 = (TextView) findViewById(R.id.tv8);
        tv9 = (TextView) findViewById(R.id.tv9);
        tv10 = (TextView) findViewById(R.id.tv10);
        tv11 = (TextView) findViewById(R.id.tv11);
        tv12 = (TextView) findViewById(R.id.tv12);
        tv13 = (TextView) findViewById(R.id.tv13);
        tv14 = (TextView) findViewById(R.id.tv14);
        tv15 = (TextView) findViewById(R.id.tv15);
        tv16 = (TextView) findViewById(R.id.tv16);

        image1.setOnClickListener(this);
        image2.setOnClickListener(this);
        image3.setOnClickListener(this);
        image4.setOnClickListener(this);  
        image5.setOnClickListener(this);
        image6.setOnClickListener(this);   
        image7.setOnClickListener(this);
        image8.setOnClickListener(this);
        image9.setOnClickListener(this);
        image10.setOnClickListener(this);
        image11.setOnClickListener(this);
        image12.setOnClickListener(this);
        image13.setOnClickListener(this);  
        image14.setOnClickListener(this);   
        image15.setOnClickListener(this);
        image16.setOnClickListener(this); 
        imageend.setOnClickListener(this);
        imagesetup.setOnClickListener(this);
        imageevent.setOnClickListener(this);   

        settextviews();
            setimageviews();
            hidethem();
            arrayload();

 }//end oncreate

public void arrayload() {
}

public void settextviews() {

                    //load the asset files themselves
                    StringBuilder text = new StringBuilder();
                    try {
                         BufferedReader br = new BufferedReader(new FileReader("/sdcard/NexGen/RTOLOGS/.working/1.txt"));
                            String line;

                            while ((line = br.readLine()) != null) {
                                text.append(line);
                                text.append('\n');
                            }
                                //set the text we recovered to the TextView
                                tv1.setText(text);

                //load progress info
                StringBuilder text2 = new StringBuilder();
                     BufferedReader br2 = new BufferedReader(new FileReader("/sdcard/NexGen/RTOLOGS/.working/2.txt"));
                            String line2;
                                while ((line2 = br2.readLine()) != null) {
                                text2.append(line2);
                                text2.append('\n');
                            }
                            tv2.setText(new String(text2));
} //end try
                    catch (IOException ex) {
                        return;
                    }

public void setimageviews() {
//nothing here yet

}

    public void hidethem() {
        //nothing here yet

}

  public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v==bhome) {
            // TODO Auto-generated method stub
            Intent starthome = new Intent(RTO.this, Main.class); //this is about screen
        startActivity(starthome);
        overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
        }

        if (v==babout) {
            Intent startabout = new Intent(RTO.this, AboutScreen.class); //this is about screen
            startActivity(startabout);
            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
            }
        if(v==image1){
            mx=mx++;
            try {
                Calendar c = Calendar.getInstance();
                System.out.println("Current time => "+c.getTime());

                SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
                String formattedDate = df.format(c.getTime());
                //now we have the time lets write it to the file
                String fileName = String.valueOf(mx) +".txt";   
                File myFile = new File("/sdcard/test/LOGS/.working/mx/" +fileName);
                myFile.createNewFile();
                FileOutputStream fOut = new FileOutputStream(myFile, true);
                OutputStreamWriter myOutWriter = 
                                        new OutputStreamWriter(fOut);
                myOutWriter.append(formattedDate);
                myOutWriter.append(" :");
                myOutWriter.append(tv1.getText());
                myOutWriter.append(" ,  ");
                myOutWriter.close();
                fOut.close();
            }
            catch (Exception e) {
                Toast.makeText(getBaseContext(), e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }


            Bundle b = new Bundle();
            String callsign = (String)tv1.getText().toString();
            b.putString("Callsign", callsign);
            b.putInt("mx", mx);
            Intent startabout = new Intent(RTO.this, RTOShooting.class); //this is next screen
            startabout.putExtras(b);
            startActivity(startabout);
            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
            }   


 } //end onClick

//nothing below here yet
  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_rto, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void onChronometerTick(Chronometer chronometer) {
        // TODO Auto-generated method stub

    }

}

受信アクティビティは次のようになります。

package com.test.trainer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

public class RTOShooting extends Activity implements OnClickListener {

    private ImageButton image1;
    private ImageButton image2;
    private ImageButton image3;
    private ImageButton image3close;
    private ImageButton image3medium;
    private ImageButton image3short;

    public int MX;

TextView tvcallsign;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rtoshooting);
        Bundle b = getIntent().getExtras();
         String callsign = b.getString("Callsign");
          int mx = b.getInt("mx");
        MX = mx;
        tvcallsign.setText(callsign);


 tvcallsign = (TextView) findViewById(R.id.tvcallsign);

 } //end on create

 public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v==image1) {

        }
}

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_rtoshooting, menu);
        return true;
    }
4

1 に答える 1

0

コードと StackTrace が一致していると仮定すると、トレースに次の行が表示されます。

com.nexgen.threedashone.trainer.RTOShooting.onCreate (RTOShooting.java:40) で

RTOShooting で行を数えるだけで、次のようになります。

tvcallsign.setText(callsign);
tvcallsign = (TextView) findViewById(R.id.tvcallsign);

次の行で検索しようとしているオブジェクトのテキストを設定しようとしています。それらを交換すると、おそらくすべてがうまくいくはずです。

于 2013-03-02T12:17:50.480 に答える