2013-07-30 45 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... 
}