2016-05-24 23 views
1

My TextViewは設定した文字列を表示していません。 .getTextパラメータを持つ通常のsetTextメソッドは正常に動作しますが、私がWorkWithChemクラスと対話する部分は正しく動作しません。TextViewに文字列変数が表示されない

たとえば、化合物としてH2Oを入力して5モルを入力すると、モル数のテキストビューは5になりますが、グラムのテキストビューは空の文字列で表示されます。

私の推測では、onClickメソッド、xmlファイル、またはWorkWithChemクラスのif文と関係があります。

これは私が持っているものです。

申し訳ありませんがずさんなコードのために、事前に、私はこの(Java以外なおさらアンドロイド開発)

AndroidManifest XML

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.justin.firstapp"> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".ActivityTwo"> 
     android:label="@String/ActivityTwo"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 


</manifest> 

活動Javaファイル

package com.example.justin.firstapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import java.math.BigDecimal; 
import java.util.ArrayList; 

public class ActivityTwo extends AppCompatActivity { 

TextView textViewGrams, textViewMoles; 
EditText editTextCompound, editTextGrams, editTextMoles; 

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

    textViewGrams = (TextView) findViewById(R.id.textViewGrams); 
    textViewMoles = (TextView) findViewById(R.id.textViewMoles); 
    editTextCompound = (EditText) findViewById(R.id.editComp); 
    editTextGrams = (EditText) findViewById(R.id.editGrams); 
    editTextMoles = (EditText) findViewById(R.id.editMoles); 
    Button buttonCalculate = (Button) findViewById(R.id.buttonCalc); 

    buttonCalculate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(!editTextCompound.getText().equals(null)) { 

       ArrayList<Elements> comp = new WorkWithChem().compound(editTextCompound.getText().toString()); 


       if (!editTextGrams.getText().equals(null) && 
         !editTextMoles.getText().equals(null)) { 

        textViewMoles.setText(editTextMoles.getText()); 
        textViewGrams.setText(editTextGrams.getText()); 

       } else if (!editTextMoles.getText().equals(null)) { 

        textViewMoles.setText(editTextMoles.getText()); 

        textViewGrams.setText(WorkWithChem.getGrams(comp, new BigDecimal(WorkWithChem.stringToNumber(editTextGrams.getText().toString()).doubleValue())).toString()); 


       } else if (!editTextGrams.getText().equals(null)) { 

        textViewGrams.setText(editTextGrams.getText()); 

        textViewMoles.setText(WorkWithChem.getMoles(comp, new BigDecimal(WorkWithChem.stringToNumber(editTextMoles.getText().toString()).doubleValue())).toString()); 

       } 

      } 


     } 
    }); 
} 



} 

では比較的新しいですアクティビティxmlファイル

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.justin.firstapp.ActivityTwo"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@android:string/untitled" 
    android:id="@+id/textViewMoles" 
    android:textAlignment="center" 
    android:textSize="25dp" 
    android:layout_above="@+id/textViewGrams" 
    android:layout_alignParentEnd="true" 
    android:layout_toEndOf="@+id/textView4" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Total moles" 
    android:id="@+id/textView2" 
    android:layout_alignBottom="@+id/textViewMoles" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@android:string/untitled" 
    android:id="@+id/textViewGrams" 
    android:textAlignment="center" 
    android:textSize="25dp" 
    android:layout_alignBottom="@+id/textView4" 
    android:layout_alignEnd="@+id/textViewMoles" 
    android:layout_toEndOf="@+id/textView4" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Total grams" 
    android:id="@+id/textView4" 
    android:layout_centerVertical="true" 
    android:layout_alignParentStart="true" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editComp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:hint="Enter a compound" 
    android:layout_alignEnd="@+id/textViewMoles" 
    android:textAlignment="center" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editGrams" 
    android:layout_below="@+id/editComp" 
    android:layout_alignParentStart="true" 
    android:hint="Enter grams" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editMoles" 
    android:layout_below="@+id/editComp" 
    android:layout_alignEnd="@+id/editComp" 
    android:hint="Enter moles" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Calculate" 
    android:id="@+id/buttonCalc" 
    android:layout_below="@+id/editGrams" 
    android:layout_centerHorizontal="true" 
    android:onClick="thing"/> 

</RelativeLayout> 

package com.example.justin.firstapp; 

import java.math.*; 
import java.util.*; 

public class WorkWithChem{ 

public static boolean isCapitol(char c){ 
    if(c == 'A' || c == 'B' || c == 'C' || c == 'D' || c == 'E' || c == 'F' || c == 'G' || c == 'H' || c == 'I' || c == 'J' || c == 'K' || c == 'L' || c == 'M' || c == 'N' || c == 'O' || c == 'P' || c == 'Q' || c == 'R' || c == 'S' || c == 'T' || c == 'U' || c == 'V' || c == 'W' || c == 'X' || c == 'Y' || c == 'Z') 
     return true; 
    return false; 
} 

public static ArrayList<Elements> compound (String str){ 

    ArrayList<Elements> elements = new ArrayList(); 

    String temp = str.toString(); 

    for(int i = 1; i < str.length(); i++){ 

     if(isCapitol(str.charAt(i))){ 

      if(containsDigit(str)){ 

       for(int addCounter = Integer.parseInt(extractNumber(str)); addCounter > 0; addCounter--){ 

        elements.add(Elements.getBySymbol(str.substring(0, str.indexOf(extractNumber(str))))); 
       } 

      }else{ 

       elements.add(Elements.getBySymbol(str.substring(0, i))); 
      } 

      temp = temp.substring(i); 
     } 
    } 

    elements.add(Elements.getBySymbol(temp)); 

    return elements; 
} 

public static BigDecimal getGrams(BigDecimal moles, BigDecimal molarMass){ 

    return moles.multiply(molarMass); 
} 

public static BigDecimal getGrams(ArrayList<Elements> compound, BigDecimal moles){ 
    BigDecimal ans = new BigDecimal(0); 

    for(Elements e : compound){ 

     BigDecimal temp = new BigDecimal(e.getAtomicMass().doubleValue()); 

     ans.equals(ans.add(temp.multiply(moles))); 
    } 

    return ans; 

} 

public static BigDecimal getMolarMass(ArrayList<Elements> compound){ 
    BigDecimal ans = new BigDecimal(0); 

    for(Elements e : compound){ 
     ans.equals(ans.add(e.getAtomicMass())); 
    } 

    return ans; 

} 

public static final boolean containsDigit(String s) { 
    boolean containsDigit = false; 

    if (s != null && !s.isEmpty()) { 
     for (char c : s.toCharArray()) { 
      if (containsDigit = Character.isDigit(c)) { 
       break; 
      } 
     } 
    } 

    return containsDigit; 
} 

public static BigDecimal stringToNumber(String str){ 
    String s = extractNumber(str); 

    return new BigDecimal(str); 

} 

public static String extractNumber(String str) { 

    if(str == null || str.isEmpty()) 
     return ""; 

    StringBuilder sb = new StringBuilder(); 
    boolean found = false; 
    for(char c : str.toCharArray()){ 
     if(Character.isDigit(c) || c == '.'){ 
      sb.append(c); 
      found = true; 
     } else if(found){ 
      // If we already found a digit before and this char is not a digit, stop looping 
      break; 
     } 
    } 

    return sb.toString(); 
} 

public static BigDecimal getMoles(BigDecimal grams, BigDecimal molarMass){ 

    return grams.multiply(molarMass); 
} 

public static BigDecimal getMoles(ArrayList<Elements> compound, BigDecimal molarMass){ 
    BigDecimal ans = new BigDecimal(0); 

    for(Elements e : compound){ 

     BigDecimal temp = new BigDecimal(e.getAtomicMass().doubleValue()); 

     ans.equals(ans.add(temp.multiply(molarMass))); 
    } 

    return ans; 

} 


public static void main(String[] args){ 
    ArrayList<Elements> list = compound("O"); 

    BigDecimal mass = new BigDecimal(0); 
    BigDecimal moles = new BigDecimal(2); 



    for(int i = 0; i < list.size(); i++){ 
     mass = mass.add(list.get(i).getAtomicMass()); 
    } 


    System.out.println(getGrams(moles, mass)); 

    for(Elements e : list){ 
     System.out.println(e); 
    } 

} 
} 

そして最後の要素の列挙

WorkWithChemクラス

package com.example.justin.firstapp; 

import java.util.HashMap; 
import java.util.Map; 
import java.math.*; 


public enum Elements { 

/* SYMBOL NAME ATOMIC_WEIGHT ELECTRONEGATIVITY */ 
H("Hydrogen", 1.00794f, 2.1f), He("Helium", 4.0026f, 0), Li("Lithium", 
     6.941f, 0.98f), Be("Beryllium", 9.01218f, 1.57f), B("Boron", 
     10.811f, 2.04f), C("Carbon", 12.011f, 2.55f), N("Nitrogen", 
     14.0067f, 3.04f), O("Oxygen", 15.9994f, 3.44f), F("Fluorine", 
     18.9984f, 3.98f), Ne("Neon", 20.1797f, 0), Na("Sodium", 22.98977f, 
     0.93f), Mg("Magnesium", 24.305f, 1.31f), Al("Aluminum", 26.98154f, 
     1.61f), Si("Silicon", 28.0855f, 1.9f), P("Phosphorus", 30.97376f, 
     2.19f), S("Sulfur", 32.066f, 2.58f), Cl("Chlorine", 35.4527f, 3.16f), Ar(
     "Argon", 39.948f, 0), K("Potassium", 39.0983f, 0.82f), Ca(
     "Calcium", 40.078f, 1), Sc("Scandium", 44.9559f, 1.36f), Ti(
     "Titanium", 47.88f, 1.54f), V("Vanadium", 50.9415f, 1.63f), Cr(
     "Chromium", 51.996f, 1.66f), Mn("Manganese", 54.938f, 1.55f), Fe(
     "Iron", 55.847f, 1.83f), Co("Cobalt", 58.9332f, 1.88f), Ni(
     "Nickel", 58.6934f, 1.91f), Cu("Copper", 63.546f, 1.9f), Zn("Zinc", 
     65.39f, 1.65f), Ga("Gallium", 69.723f, 1.81f), Ge("Germanium", 
     72.61f, 2.01f), As("Arsenic", 74.9216f, 2.18f), Se("Selenium", 
     78.96f, 2.55f), Br("Bromine", 79.904f, 2.96f), Kr("Krypton", 83.8f, 
     0), Rb("Rubidium", 85.4678f, 0.82f), Sr("Strontium", 87.62f, 0.95f), Y(
     "Yttrium", 88.9059f, 1.22f), Zr("Zirconium", 91.224f, 1.33f), Nb(
     "Niobium", 92.9064f, 1.6f), Mo("Molybdenum", 95.94f, 2.16f), Tc(
     "Technetium", 98, 1.9f), Ru("Ruthenium", 101.07f, 2.2f), Rh(
     "Rhodium", 102.9055f, 2.28f), Pd("Palladium", 106.42f, 2.2f), Ag(
     "Silver", 107.868f, 1.93f), Cd("Cadmium", 112.41f, 1.69f), In(
     "Indium", 114.82f, 1.78f), Sn("Tin", 118.71f, 1.96f), Sb(
     "Antimony", 121.757f, 2.05f), Te("Tellurium", 127.6f, 2.1f), I(
     "Iodine", 126.9045f, 2.66f), Xe("Xenon", 131.29f, 2.6f), Cs(
     "Cesium", 132.9054f, 0.79f), Ba("Barium", 137.33f, 0.89f), La(
     "Lanthanum", 138.9055f, 1.1f), Ce("Cerium", 140.12f, 1.12f), Pr(
     "Praseodymium", 140.9077f, 1.13f), Nd("Neodymium", 144.24f, 1.14f), Pm(
     "Promethium", 145, 1.13f), Sm("Samarium", 150.36f, 1.17f), Eu(
     "Europium", 151.965f, 1.2f), Gd("Gadolinium", 157.25f, 1.2f), Tb(
     "Terbium", 158.9253f, 1.1f), Dy("Dysprosium", 162.5f, 1.22f), Ho(
     "Holmium", 164.9303f, 1.23f), Er("Erbium", 167.26f, 1.24f), Tm(
     "Thulium", 168.9342f, 1.25f), Yb("Ytterbium", 173.04f, 1.1f), Lu(
     "Lutetium", 174.967f, 1.27f), Hf("Hafnium", 178.49f, 1.3f), Ta(
     "Tantalum", 180.9479f, 1.5f), W("Tungsten", 183.85f, 2.36f), Re(
     "Rhenium", 186.207f, 1.9f), Os("Osmium", 190.2f, 2.2f), Ir(
     "Iridium", 192.22f, 2.2f), Pt("Platinum", 195.08f, 2.28f), Au(
     "Gold", 196.9665f, 2.54f), Hg("Mercury", 200.59f, 2), Tl(
     "Thallium", 204.383f, 2.04f), Pb("Lead", 207.2f, 2.33f), Bi(
     "Bismuth", 208.9804f, 2.02f), Po("Polonium", 209, 2), At(
     "Astatine", 210, 2.2f), Rn("Radon", 222, 0), Fr("Francium", 223, 
     0.7f), Ra("Radium", 226.0254f, 0.89f), Ac("Actinium", 227, 1.1f), Th(
     "Thorium", 232.0381f, 1.3f), Pa("Protactinium", 231.0359f, 1.5f), U(
     "Uranium", 238.029f, 1.38f), Np("Neptunium", 237.0482f, 1.36f), Pu(
     "Plutonium", 244, 1.28f), Am("Americium", 243, 1.3f), Cm("Curium", 
     247, 1.3f), Bk("Berkelium", 247, 1.3f), Cf("Californium", 251, 1.3f), Es(
     "Einsteinium", 252, 1.3f), Fm("Fermium", 257, 1.3f), Md(
     "Mendelevium", 258, 1.3f), No("Nobelium", 259, 1.3f), Lr(
     "Lawrencium", 262, 0), Rf("Rutherfordium", 261, 0), Db("Dubnium", 
     262, 0), Sg("Seaborgium", 263, 0), Bh("Bohrium", 262, 0), Hs(
     "Hassium", 265, 0), Mt("Meitnerium", 266, 0), Uun("ununnilium", 
     269, 0), Uuu("unununium", 272, 0), Uub("ununbium", 277, 0); 

static final class Holder { 
    /** Maps the atomic number to the Elements */ 
    static final Map<Integer, Elements> map_atomicNumber = new HashMap<Integer, Elements>(); 
    /** Maps the symbol to the Elements */ 
    static final Map<String, Elements> map_symbol = new HashMap<String, Elements>(); 
} 


private Elements(String fullName, float atomicMass, float electroNegativity) { 

    this.fullName = fullName; 
    this.atomicMass = new BigDecimal(atomicMass); 
    this.electroNegativity = new BigDecimal(electroNegativity); 

    Elements.Holder.map_atomicNumber.put(this.getAtomicNumber(), this); 
    Elements.Holder.map_symbol.put(this.name(), this); 
} 

private final String fullName; 
private final BigDecimal atomicMass; 
private final BigDecimal electroNegativity; 


public int getAtomicNumber() { 
    return this.ordinal() + 1; 
} 


public String getSymbol() { 
    return this.name(); 
} 


public String getFullName() { 
    return this.fullName; 
} 


public BigDecimal getAtomicMass() { 
    return this.atomicMass; 
} 


public BigDecimal getElectroNegativity() { 
    return this.electroNegativity; 
} 


public String toString() { 
    return name() + "[fullName=\"" + this.fullName + "\", atomicMass=\"" 
      + this.atomicMass + "\", electroNegativity=\"" 
      + this.electroNegativity + "\"]"; 
} 


public static Elements getByAtomicNumber(int atomicNumber) { 
    return Elements.Holder.map_atomicNumber.get(atomicNumber); 
} 


public static Elements getBySymbol(String symbol) { 
    return Elements.Holder.map_symbol.get(symbol); 
} 


public static String getSymbolByAtomicNumber(int atomicNumber) { 

    Elements e = Elements.Holder.map_atomicNumber.get(atomicNumber); 
    if (e != null) 
     return e.getSymbol(); 
    else 
     return null; 
} 


public static int getAtomicNumberBySymbol(String symbol) { 

    Elements e = Elements.Holder.map_atomicNumber.get(symbol); 
    if (e != null) 
     return e.getAtomicNumber(); 
    else 
     return 0; 
} 


public static boolean exists(String symbol) { 
    if (null != Elements.Holder.map_symbol.get(symbol)) 
     return true; 
    else 
     return false; 
} 


public static boolean exists(int atomicNumber) { 
    if (Elements.Holder.map_symbol.get(atomicNumber) != null) 
     return true; 
    else 
     return false; 
} 


public static String toCorrectSymbol(String symbol) { 

    String correct_symbol = ""; 

    correct_symbol += Character.toUpperCase(symbol.charAt(0)); 

    if (symbol.length() == 2) { 
     correct_symbol += Character.toLowerCase(symbol.charAt(1)); 

    } else if (symbol.length() == 3) { 
     correct_symbol += Character.toLowerCase(symbol.charAt(1)); 
     correct_symbol += Character.toLowerCase(symbol.charAt(2)); 
    } 

    return correct_symbol; 
} 
} 
+1

なぜ 'getText()'を 'String'にしていませんか? 'getText()。toString()'に変換しようとしましたか?試してみて、結果が何であるか教えてください。 –

+0

おそらく、あなたがヌルではなく「空の」文字列を受け取っていることでしょう。それらもチェックしてください。空の 'TextView'や' EditText'をチェックするときは 'TextUtils.isEmpty()'を使うことをお勧めします。 –

+1

@McAwesomvilleです。あなたは右にずっとスクロールしなければなりません。あなたが、そのちょうどgetTextであり、コードの狂った長い行ではないところについて話しているのでない限り。それがあなたが話していることであれば、その行はそのままで、それは問題を引き起こしている別のものです –

答えて

0

私がnullを返すことはありません空白のEditText上のgetText()を信じている - それは空の文字列を返します。したがって、両方のフィールドがnullでない場合の最初のチェックは、常にです。グラムは空の文字列なので、TextViewに配置されます。代わりにEditTextの長さを確認してみてください

if (!(editTextGrams.getText().length() == 0) && !(editTextMoles.getText().length() == 0)) { 

これはあなたの問題を解決すると思います。モルからグラムを得るときには計算に注意してください。モル数からグラムを得る場合は、editTextGrams.getText()を使ってグラムを計算していますが、すでにフィールドが空白であることを確認しているようですその場合は、editTextMolesを使用する必要があります。基本的には、2つのelse/ifのケースで変数をフリップフロップにしていると思います。

+0

おかげさまで私はそれを乱していて、その計算の間違いを見ました。今モル数はグラムが動作しますが、グラムからモルズフォースはアプリケーションを閉じます。何らかの理由でデバッグが実行されず、エラーを検索することに戻ります –

関連する問題