2017-11-26 4 views
0

Ich habe diesen Code, um Zahlenformat von meinem EditText-Eingang zu erkennen.Nur Nummer nicht Komma in Bearbeitungstext auf Prozess

public class NumberTextWatcher implements TextWatcher { 

    private DecimalFormat df; 
    private DecimalFormat dfnd; 
    private boolean hasFractionalPart; 

    private EditText et; 

    public NumberTextWatcher(EditText et) 
    { 
     df = new DecimalFormat("#,###.##"); 
     df.setDecimalSeparatorAlwaysShown(true); 
     dfnd = new DecimalFormat("#,###"); 
     this.et = et; 
     hasFractionalPart = false; 
    } 

    @SuppressWarnings("unused") 
    private static final String TAG = "NumberTextWatcher"; 

    @Override 
    public void afterTextChanged(Editable s) 
    { 
     et.removeTextChangedListener(this); 

     try { 
      int inilen, endlen; 
      inilen = et.getText().length(); 

      String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), ""); 
      Number n = df.parse(v); 
      int cp = et.getSelectionStart(); 
      if (hasFractionalPart) { 
       et.setText(df.format(n)); 
      } else { 
       et.setText(dfnd.format(n)); 
      } 
      endlen = et.getText().length(); 
      int sel = (cp + (endlen - inilen)); 
      if (sel > 0 && sel <= et.getText().length()) { 
       et.setSelection(sel); 
      } else { 
       // place cursor at the end? 
       et.setSelection(et.getText().length() - 1); 
      } 
     } catch (NumberFormatException nfe) { 
      // do nothing? 
     } catch (ParseException e) { 
      // do nothing? 
     } 

     et.addTextChangedListener(this); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
     if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()))) 
     { 
      hasFractionalPart = true; 
     } else { 
      hasFractionalPart = false; 
     } 
    } 

} 

Und dann rufen Sie es in Aktivität.

JumlahTrx = (EditText)findViewById(R.id.editJumlah); 
JumlahTrx.addTextChangedListener(new NumberTextWatcher(JumlahTrx)); 

Und es wird 5000, wenn ich das Feld eingeben. Was ich will ist, wenn ich auf Knopf den Wert 5000 5000 werde und dann in meine Datenbank einfügen. Weil ich INT in meiner Datenbank einstelle.

Jede Hilfe wird nett sein.

Dank

====================== UPDATE

diesen Code hinzufügen

String data = JumlahTrx.getText().toString(); 
data=data.replaceAll(",",""); 
int value=Integer.parseInt(data); 
JumlahTrx.setText(value); 

und bekam diesen Fehler, wenn auf die Schaltfläche klicken, um es in der Datenbank zu speichern

11-26 20:27:54.441 2609-2609/com.androidjson.serverupdate_androidjsoncom E/AndroidRuntime: FATAL EXCEPTION: main Process: com.androidjson.serverupdate_androidjsoncom, PID: 2609 android.content.res.Resources$NotFoundException: String resource ID #0x61a8 at android.content.res.Resources.getText(Resources.java:335) at android.widget.TextView.setText(TextView.java:4555) at com.androidjson.serverupdate_androidjsoncom.MainActivity.StudentRegistration(MainActivity.java:120) at com.androidjson.serverupdate_androidjsoncom.MainActivity$1.onClick(MainActivity.java:53) at android.view.View.performClick(View.java:5657) at android.view.View$PerformClick.run(View.java:22453) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6236) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)

============== UPDATE 2 ================= ===

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    JenisTrx = (EditText)findViewById(R.id.editJenis); 
    KeteranganTrx = (EditText)findViewById(R.id.editKeterangan); 
    JumlahTrx = (EditText)findViewById(R.id.editJumlah); 
    JumlahTrx.addTextChangedListener(new NumberTextWatcher(JumlahTrx)); 


    RegisterStudent = (Button)findViewById(R.id.buttonSubmit); 
    ShowStudents = (Button)findViewById(R.id.buttonShow); 

    RegisterStudent.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      // Checking whether EditText is Empty or Not 
      CheckEditTextIsEmptyOrNot(); 

      if(CheckEditText){ 

       // If EditText is not empty and CheckEditText = True then this block will execute. 

       StudentRegistration(JenisTrxHolder,KeteranganTrxHolder, JumlahTrxHolder); 

      } 
      else { 

       // If EditText is empty then this block will execute . 
       Toast.makeText(MainActivity.this, "Please fill all form fields.", Toast.LENGTH_LONG).show(); 

      } 

     } 
    }); 

    ShowStudents.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 


      Intent intent = new Intent(getApplicationContext(),ShowAllStudentsActivity.class); 

      startActivity(intent); 

     } 
    }); 
} 

public void StudentRegistration(final String S_Jenis, final String S_Keterangan, final String S_Jumlah){ 

    class StudentRegistrationClass extends AsyncTask<String,Void,String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog = ProgressDialog.show(MainActivity.this,"Loading Data",null,true,true); 
     } 

     @Override 
     protected void onPostExecute(String httpResponseMsg) { 

      super.onPostExecute(httpResponseMsg); 
      String a = JumlahTrx.getText().toString(); 
      a=a.replaceAll(",",""); 
      JumlahTrx.setText(a); 
      System.out.println(a); 
      progressDialog.dismiss(); 

      Toast.makeText(MainActivity.this,httpResponseMsg.toString(), Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 

      hashMap.put("JenisTrx",params[0]); 

      hashMap.put("KeteranganTrx",params[1]); 

      hashMap.put("JumlahTrx",params[2]); 

      finalResult = httpParse.postRequest(hashMap, HttpURL); 

      return finalResult; 
     } 
    } 

    StudentRegistrationClass studentRegistrationClass = new StudentRegistrationClass(); 

    studentRegistrationClass.execute(S_Jenis,S_Keterangan,S_Jumlah); 
} 

public void CheckEditTextIsEmptyOrNot(){ 

    JenisTrxHolder = JenisTrx.getText().toString(); 
    KeteranganTrxHolder = KeteranganTrx.getText().toString(); 
    JumlahTrxHolder = JumlahTrx.getText().toString(); 

    if(TextUtils.isEmpty(JenisTrxHolder) || TextUtils.isEmpty(KeteranganTrxHolder) || TextUtils.isEmpty(JumlahTrxHolder)) 
    { 

     CheckEditText = false; 

    } 
    else { 

     CheckEditText = true ; 
    } 

} 
+0

Fehler Sie erhalten ist völlig gerechtfertigt. Es ist ungültig, 'TextView :: setText' mit beliebigen Integer-Werten aufzurufen. Bitte lesen Sie, was diese Methode wirklich macht und erwartet. –

Antwort

1

können Sie verwenden replace oder replaceAll Funktion, bevor die Daten in die Datenbank Für Beispiel

String data = "5,000"; 
data= data.replaceAll(",",""); 

Int value = Integer.parseInt(data); 

Shop speichern, die

auf Ihre Datenbank schätzen

Aktualisiert

in Ihrem doInBackGround

ändern

hashMap.put("JumlahTrx",params[2]); 

Um

String a = params[2]; 
a=a.replaceAll(",",""); 
hashMap.put("JumlahTrx",a); 
+0

Erstelle diesen JumallahTrx = JumlahTrx.getText(). ToString(). ReplaceAll (",", ""); und erhalten Fehler Fehler: (117, 62) Fehler: inkompatible Typen: String kann nicht in EditText konvertiert werden –

+0

Warum sind Sie ihm JumlahTrx zuweisen? – Munir

+0

Sehen Sie meine verbesserte Antwort. Sie müssen diese Aufgabe nur ausführen, bevor der Wert in der Datenbank gespeichert werden muss, um ein Geschäft in einem Bearbeitungstext zu speichern – Munir

0

Wie gesagt, Sie Was ich will, ist, wenn ich auf die Schaltfläche klicken Sie auf den Wert 5000 werden 5000. Wenn dies nur die Voraussetzung ist, habe ich eine alternative Lösung. Versuchen Sie diese

String a="5,00,000"; 

a=a.replaceAll(",",""); 

int num=Integer.parseInt(a); 
+0

diesen Code erstellen String a = JumlahTrx.getText(). ToString(); a = a.replaceAll (",", ""); int Nummer = Integer.parseInt (a); JumlahTrx.setText (num); und erhalten Fehler –

+0

Fehler ist, weil Sie Ganzzahl anstelle von Zeichenfolge festlegen. Entfernen Sie einfach den Schritt der Ganzzahlkonvertierung. Zeichenfolge a = JumlahTrx.getText(). ToString(); a = a.replaceAll (",", ""); JumlahTrx.setText (a); –

+0

Ihr Code funktioniert perfekt. Aber nachdem ich auf die Schaltfläche klicke, um die Daten 25.000 und nur 25, die in meiner Datenbank speichern statt 25000 –

Verwandte Themen