2012-02-04 4 views
0

나는 비슷한 질문을했지만,이 문제를 일으키기 위해서는 여러 가지 일이 잘못 될 수 있다고 읽었습니다. 그리고 이것이 내 첫 번째 안드로이드 (및 Java) 응용 프로그램으로, 아마도 그들 대부분을했을 것입니다. 도와 주셔서 미리 감사드립니다.StartActivity (Android)의 NullPointerException

스택

Thread [<1> main] (Suspended (exception NullPointerException)) 
GMSerial_CleanActivity(Activity).startActivityForResult(Intent, int) line: 3190 
GMSerial_CleanActivity(Activity).startActivity(Intent) line: 3297 
GMSerial_CleanActivity.output(String, String, String, TextView) line: 49  
GMSerial_CleanActivity$1.onCheckedChanged(CompoundButton, boolean) line: 35 
ToggleButton(CompoundButton).setChecked(boolean) line: 125 
ToggleButton.setChecked(boolean) line: 72 
ToggleButton(CompoundButton).toggle() line: 87 
ToggleButton(CompoundButton).performClick() line: 99  
View$PerformClick.run() line: 14105 
ViewRootImpl(Handler).handleCallback(Message) line: 605 
ViewRootImpl(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 4424  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 511 
ZygoteInit$MethodAndArgsCaller.run() line: 784 
ZygoteInit.main(String[]) line: 551 
NativeStart.main(String[]) line: not available [native method] 

홈페이지 코드 (로그 캣 무작위 어떤 이유로 이클립스 작동을 중지하기로 결정)

package com.greymatterrobotics.gmserial; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.ToggleButton; 
import android.widget.TextView; 
import android.widget.EditText; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 



public class GMSerial_CleanActivity extends Activity { 

    static public final char cr = (char) 13; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     final GMSerial_CleanActivity GMSerial = new GMSerial_CleanActivity(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ToggleButton toggleSend = (ToggleButton) findViewById(R.id.toggleSend); 
     final TextView textLog = (TextView) findViewById(R.id.textLog); 
     final EditText editBaud = (EditText) findViewById(R.id.editBaud); 
     final EditText editDelay = (EditText) findViewById(R.id.editDelay); 
     //final CheckBox checkInvert = (CheckBox) findViewById(R.id.checkInvert); 

     toggleSend.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked){ 
        GMSerial.output(editBaud.getText().toString(), "Hello World", editDelay.getText().toString(), textLog); 
       } 

      } 
     }); 

    } 

    public void output(String baud, String data, String delay, TextView log) { 
     Intent serialout = new Intent(); 
     serialout.setClassName("com.greymatterrobotics.gmserial", "com.greymatterrobotics.gmserial.Output"); 
     serialout.putExtra("BAUD", baud); 
     serialout.putExtra("DATA", data); 
     serialout.putExtra("CHD", delay); 
     startActivity(serialout); 
     log.setText(log.getText().toString() + cr + data); 
    } 
} 

출력 코드 (spiritplumber으로 [에] gmail.com)

package com.greymatterrobotics.gmserial; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.SystemClock; 

public class Output extends Activity { 

    static public final char cr = (char) 13; // because i don't want to type that in every time 
    static public final char lf = (char) 10; // because i don't want to type that in every time 
    public String datatosend = ""; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     AudioSerialOutMono.activate(); 
     try{ 
      Bundle bundle = getIntent().getExtras(); 
      if (bundle.containsKey("BAUD")) 
       AudioSerialOutMono.new_baudRate = Integer.parseInt(bundle.getString("BAUD")); 
      if (bundle.containsKey("CHD")) 
       AudioSerialOutMono.new_characterdelay = Integer.parseInt(bundle.getString("CHD")); 
      if (bundle.containsKey("DATA")) 
       datatosend = (bundle.getString("DATA")); 
      AudioSerialOutMono.UpdateParameters(true); 
      AudioSerialOutMono.output(datatosend+cr+lf); 

      while (AudioSerialOutMono.isPlaying()) 
      { 
       SystemClock.sleep(50); 
      } 
     }catch(Exception e){e.printStackTrace();} 


//  android.os.Process.killProcess(android.os.Process.myPid()); // NUKE 
     super.onCreate(savedInstanceState); 
     this.finish(); 
    } 
} 

의 AndroidManifest.xml

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

    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".GMSerial_CleanActivity" 
      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=".Output" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

답변

0

Android에서 활동의 라이프 사이클은 시스템에 의해 자동으로 처리됩니다. 즉, GMSerial_CleanActivity 활동의 새 인스턴스를 생성해서는 안됩니다. output 메서드를 직접 호출해야합니다. GMSerial.output으로 전화하지 마십시오.

또한 output 메서드에서 새로운 활동을 시작하려면 아래 코드를 사용하는 것이 좋습니다. (코드 스 니펫이 맞을 수 있습니다. Eclipse를 손에 들고 테스트 할 수 없습니다.)

Intent serialout = new Intent(); 
    serialout.setClass(this, Output.Class); 
0

은 모두 활동에 메인 텐트 필터를 가지고 있지보십시오.