2013-07-30 43 views
0

從EDITTEXT轉換字符串我試圖讓從字符串轉換爲二進制中的Android誤差在機器人

這是我的主要活動

public class MainActivity extends Activity { 
    Converter converter; 
    static EditText str; 
    TextView hasil; 
    Button convert; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    str = (EditText)findViewById(R.id.et_string); 
    hasil = (TextView)findViewById(R.id.txt_hasil); 

    final String kata =str.toString(); 
    convert = (Button)findViewById(R.id.btn_conv); 
    convert.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      converter = new Converter(); 
      converter.aksi1(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

}

,這是我的轉換器類

public class Converter extends MainActivity { 
    EditText str; 
    TextView hasil; 
    String kata = str.getText().toString(); 
    public void aksi1(){ 
      if (kata != null){ 

      byte[] bytes = kata.getBytes(); 
      StringBuilder binary = new StringBuilder(); 
      for(byte b : bytes){ 
       int val = b; 
       for (int i = 0; i < 8; i++){ 
        binary.append((val & 128) == 0 ? 0 : 1);// i dont know what this mean 
        val <<= 1; 
       } 
      } 
      hasil.setText(binary); 
     } 
     else{ 
      convert.setEnabled(false); 
     } 


} 

}

這個錯誤,當我運行代碼

07-30 15:17:39.798: E/AndroidRuntime(495): FATAL EXCEPTION: main 
07-30 15:17:39.798: E/AndroidRuntime(495): java.lang.NullPointerException 
07-30 15:17:39.798: E/AndroidRuntime(495): at com.example.strtobin.Converter.<init>(Converter.java:11) 
07-30 15:17:39.798: E/AndroidRuntime(495): at com.example.strtobin.MainActivity$1.onClick(MainActivity.java:34) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.view.View.performClick(View.java:2408) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.view.View$PerformClick.run(View.java:8816) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.os.Handler.handleCallback(Handler.java:587) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.os.Looper.loop(Looper.java:123) 
07-30 15:17:39.798: E/AndroidRuntime(495): at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-30 15:17:39.798: E/AndroidRuntime(495): at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 15:17:39.798: E/AndroidRuntime(495): at java.lang.reflect.Method.invoke(Method.java:521) 
07-30 15:17:39.798: E/AndroidRuntime(495): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-30 15:17:39.798: E/AndroidRuntime(495): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-30 15:17:39.798: E/AndroidRuntime(495): at dalvik.system.NativeStart.main(Native Method) 

與線11發生什麼我得到什麼?並且請告訴我這是什麼代碼的含義是 binary.append((VAL & 128)== 0?0:1)

很大感謝您的幫助... :)

+0

我真的建議學習Java和Android,而不是試圖建立與複製/粘貼應用程序。複製/粘貼編程需要給出好的結果,當你釋放它並且錯誤開始出現時你會做什麼? – Simon

+0

嗯,在3個月左右...,我能理解他們嗎?並有你的教程Java和Android,這是很容易理解...,如果你有..,我可以請求它?謝謝... :) –

回答

1

在轉換器的錯誤類 1:「STR」和「hasil」藏身超類變量的實例 2:他們沒有初始化 在MainActivity 1:「hasil」也不是一成不變的

這裏是工作的代碼

public class MainActivity extends Activity{ 
Converter converter; 
static EditText str; 
static TextView hasil; 
Button convert; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    str = (EditText)findViewById(R.id.et_string); 
    hasil = (TextView)findViewById(R.id.txt_hasil); 
    convert = (Button)findViewById(R.id.btn_conv); 
    convert.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      converter = new Converter(); 
      converter.aksi1(); 
     } 
    }); 
} 
public class Converter extends MainActivity { 
    String kata; 
    public void aksi1(){ 
      kata = str.getText().toString(); 

      if (kata != null){ 

      byte[] bytes = kata.getBytes(); 
      StringBuilder binary = new StringBuilder(); 
      for(byte b : bytes){ 
       int val = b; 
       for (int i = 0; i < 8; i++){ 
        binary.append((val & 128) == 0 ? 0 : 1);// i dont know what this mean 
        val <<= 1; 
       } 
      } 
      hasil.setText(""+binary.toString()); 
     } 
     else{ 
      convert.setEnabled(false); 
     } 
    } 
} 

}

+0

非常大的謝謝......,那個工作...,實際上我必須學習更多繼承,謝謝@ JD.com –

0

一個問題我看到的代碼是,TextView hasil永遠不會分配一個對象。之後在代碼中使用hasil對象。

public class Converter extends MainActivity { 
    EditText str; 

    TextView hasil; //Never assigned so hasil == null 

    String kata = str.getText().toString(); 
    public void aksi1(){ 
      if (kata != null){ 

      byte[] bytes = kata.getBytes(); 
      StringBuilder binary = new StringBuilder(); 
      for(byte b : bytes){ 
       int val = b; 
       for (int i = 0; i < 8; i++){ 
        binary.append((val & 128) == 0 ? 0 : 1);// i dont know what this mean 
        val <<= 1; 
       } 
      } 

      hasil.setText(binary); //Here hasil is being used but is null 

     } 
     else{ 
      convert.setEnabled(false); 
     } 
} 
} 
+0

我的意思是我只是想初始化hasil是textview,而textview是用來打印轉換器的結果。是必須分配一個值嗎? –

+0

@adhit_yogapratama確切地說,如果hasil是null調用它的一個方法,比如'setText'將會拋出一個NPE(空指針異常) –

0

你沒有在你的轉換器實例來初始化任何字段中,爲此創建一個參數的構造函數,並用它來創建轉換器的實例,如:

public class Converter{ 
    EditText str; 
    TextView hasil; 

public Converter(EditText str, TextView hasil){ 
this.str = str; 
this.hasil = hasil; 
} 
// DO OTHER STUFF... 
}