0

私は Android の新しい開発者ですが、残念ながら最初のアプリでエラーが発生しています。私は単純な温度変換器を開発しています。

これらはファイルです。

AndroidManifest.xml:

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
<activity
    android:name="com.example.tempconv.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
</application>

</manifest>

activity_main.xml:

<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=".MainActivity" >

<EditText
    android:id="@+id/ipdata"
    android:hint="Enter temperature"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="22dp"
    android:ems="10" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/ipdata"
    android:layout_below="@+id/ipdata"
    android:layout_marginTop="15dp"
    android:text="Select Conversion" />

<RadioButton
    android:id="@+id/ctof"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="18dp"
    android:text="Celsius to Feherenhit" />

<RadioButton
    android:id="@+id/ftoc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/ctof"
    android:layout_below="@+id/ctof"
    android:text="Feherenhit to Celsius" />

<EditText
    android:id="@+id/opdata"
    android:hint="Hit below button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/ftoc"
    android:layout_marginTop="54dp"
    android:ems="10" />

<Button
    android:id="@+id/doconvert"
    android:onClick="docon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/opdata"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:text="convert" />

</RelativeLayout>

MainActivity.java:

package com.example.tempconv;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;

public class MainActivity extends Activity {

    RadioButton RD1 = (RadioButton) findViewById(R.id.ctof);
    RadioButton RD2 = (RadioButton) findViewById(R.id.ftoc);
    EditText input = (EditText) findViewById(R.id.ipdata);
    EditText output = (EditText) findViewById(R.id.opdata);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @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 void doconvert(View v) {

        float data = Float.parseFloat(input.toString());

        if (RD1.isChecked()){

            float c;
            c = (data-32)*(5/9);
            output.setText(String.valueOf(c));
        }

        else if (RD2.isChecked()){

            float f;
            f=(data*(9/5))+32;
            output.setText(String.valueOf(f));
        }   
    }
}

ここで多くのスレッドを確認しましたが、まだ解決策がありません。

4

3 に答える 3

1

findViewById()より早くすることはできませんonCreate()。これは、まだレイアウトがロードされておらず、ビューが存在しないためです。

つまり、このコードは次のようになります。

public class MainActivity extends Activity {
    RadioButton RD1 = (RadioButton) findViewById(R.id.ctof);
    RadioButton RD2 = (RadioButton) findViewById(R.id.ftoc);
    EditText input = (EditText) findViewById(R.id.ipdata);
    EditText output = (EditText) findViewById(R.id.opdata);

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

次のようにする必要があります。

public class MainActivity extends Activity {
    public RadioButton RD1, RD2;
    public EditText input, output;

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

        RD1 = (RadioButton) findViewById(R.id.ctof);
        RD2 = (RadioButton) findViewById(R.id.ftoc);
        input = (EditText) findViewById(R.id.ipdata);
        output = (EditText) findViewById(R.id.opdata);
    }

input.toString()テキスト ボックスに入力された値ではありません。そのためには、 が必要ですinput.getText().toString()


あなたのactivity_main.xmlファイルで<Button ... android:onClick="docon">は、ボタンをクリックするとメソッドが起動されることを意味しますdocon()doconvert()メソッドの名前を変更するか、XML を編集する必要があります。

于 2013-03-09T18:41:14.630 に答える
0

これを試して。

メソッドを呼び出しfindViewByIdた後、一度呼び出す必要があります。setContentView

private RadioButton RD1
private RadioButton RD2 
private EditText input;
private EditText output;    

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    RD1 = (RadioButton) findViewById(R.id.ctof);
    RD2 = (RadioButton) findViewById(R.id.ftoc);
    input = (EditText) findViewById(R.id.ipdata);
    output = (EditText) findViewById(R.id.opdata);
}

この行を doconvert メソッドで編集します。

float data = Float.parseFloat(input.getText().toString());

レイアウトで編集します。

<EditText
    android:id="@+id/ipdata"
    android:hint="Enter temperature"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="22dp"
    android:ems="10" 
    android:inputType="number"/>   <<<Add this line to force user to enter the numeric value.

この入力タイプを数値に設定します。これは、ユーザーがedittext同様のテキストに何でも入力できるためNumberFormatException、この行にもスローされます。

float data = Float.parseFloat(input.getText().toString());

したがって、ユーザーは数値を入力してから設定し、android:inputType="number"最後に @ user113215 編集された回答としてレイアウトに設定する必要があります。android:onClick="doconvert"button

于 2013-03-09T18:42:10.183 に答える
0

これを動かして

RadioButton RD1 = (RadioButton) findViewById(R.id.ctof);
RadioButton RD2 = (RadioButton) findViewById(R.id.ftoc);
EditText input = (EditText) findViewById(R.id.ipdata);
EditText output = (EditText) findViewById(R.id.opdata);

このような

RadioButton RD1
RadioButton RD2 
EditText input;
EditText output;   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     RD1 = (RadioButton) findViewById(R.id.ctof);
        RD2 = (RadioButton) findViewById(R.id.ftoc);
        input = (EditText) findViewById(R.id.ipdata);
        output = (EditText) findViewById(R.id.opdata);

    }
于 2013-03-09T18:42:29.863 に答える