2013-03-09 50 views
0

我是Android的新開發人員,不幸的是我的第一個應用程序給出錯誤。我正在開發一個簡單的溫度轉換器。第一個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)); 
     } 
    } 
} 

我查了大量的線程在這裏,但力GET解決方案呢。

+4

什麼是錯誤發表您的logcat跟蹤所有的 – DjHacktorReborn 2013-03-09 18:40:20

+0

首先,什麼是錯誤? Logcat輸出在哪裏 – 2013-03-09 18:40:34

+0

哪裏是你的錯誤? :) – cara 2013-03-09 18:40:40

回答

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。

0

試試這個。

您必須在調用setContentView方法後調用findViewById一次。

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"和上次在button在佈局中設置的android:onClick="doconvert"爲@ user113215編輯答案。

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); 

    } 
相關問題