2016-08-30 56 views
0

我有一個非常基本的應用程序運行,它告訴我們定義是否正確。主要活動只有一個textView和一個editText。當我嘗試運行模擬器時,它說該應用程序已停止。任何想法有什麼不對?在此先感謝Android Studio:未啓動帶編輯文本的活動

主要活動

package com.example.owner.epsilon; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.MenuItem; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

public class MainActivity extends AppCompatActivity { 

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

    LinearLayout layout = new LinearLayout(this); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_physics); 

    final EditText answer = (EditText)layout.findViewById(R.id.answer); 
    String userAnswer = answer.getText().toString(); 

    if(userAnswer.contains("remain"+"force"+"constant"+"velocity")){ 
     System.out.print("Correct"); 
    } 
    else{ 
     System.out.print("Incorrect"); 
    } 


} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

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:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Newton's First Law" 
     android:id="@+id/definitionTextView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="52dp" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/answer" 
     android:layout_below="@+id/definitionTextView" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="114dp" /> 
</RelativeLayout> 

堆棧跟蹤:

Waiting for device. 
Device connected: emulator-5554 
Device emulator-5554 is online, waiting for processes to start up.. 
Device emulator-5554 is online, waiting for processes to start up.. 
Device is ready: emulator-5554 
Target device: emulator-5554 
Uploading file 
    local path:  C:\Users\Owner\AndroidStudioProjects\Epsilon\app\build\outputs\apk\app-debug.apk 
remote path: /data/local/tmp/com.example.owner.epsilon 
Installing com.example.owner.epsilon 
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.owner.epsilon" 

PKG:/data/local/tmp/com.example.owner。 epsilon

Device disconnected: emulator-5554 
Launching application: com.example.owner.epsilon/com.example.owner.epsilon.MainActivity. 
DEVICE SHELL COMMAND: am start -D -n "com.example.owner.epsilon/com.example.owner.epsilon.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 
Error: Adb refused a command 
+0

什麼是你得到的錯誤? – lsiva

+0

發佈堆棧跟蹤。另外,您是否在清單中聲明瞭該活動? – RafaelC

+0

錯誤是「adb拒絕命令」。我會尋找一個堆棧跟蹤。 –

回答

0

首先,你打電話onSaveInstanceState()兩次。沒有bueno。你也打電話setContentView()兩次。也沒有bueno。

其次,你爲什麼要在你的onCreate()內聲明一個LinearLayout?這是不必要的。當您致電setContentView(R.layout.activity_physics)您現在可以永久參考該佈局。

第三,您抓取對EditText的引用,然後立即嘗試在onCreate()中獲取用戶的答案,這將不起作用,因爲此時用戶還沒有看到該屏幕。您需要在應用中使用某種「提交」按鈕,以便用戶在查看自己的答案時可以點擊。

嘗試的代碼更改爲此:

private EditText answer; 
private Button submit; 

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

    answer = (EditText)findViewById(R.id.answer); 
    submit = (Button)findViewById(R.id.submit); 
    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String userAnswer = answer.getText().toString(); 
      if(userAnswer.contains("remain"+"force"+"constant"+"velocity")){ 
       Toast.makeText(this, "Correct", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(this, "Incorrect", Toast.LENGTH_LONG).show();    } 
     } 
    }); 
} 

請務必將按鈕添加到您的xml文件,並給它的ID「提交」。

祝你好運。

+0

我試過這個,但它不工作。你的代碼是完全正確的我需要檢查日誌以瞭解發生了什麼。 –

+0

@EoinCoogan它可能是'contains(...)'函數,我不認爲它可以讓你連接這樣的術語......現在看起來它正在搜索「stillforceconstantvelocity」。你可能需要做'如果useranswer.contains(「保持」)&& useranswer.contains(「force」)&& ....' – privatestaticint

+0

我現在已經包含了堆棧跟蹤。 –

0

您沒有在正確的佈局上找到視圖。

變化

final EditText answer = (EditText)layout.findViewById(R.id.answer); 

final EditText answer = (EditText)findViewById(R.id.answer); 
0

此行只是的LinearLayout類的一個實例:

LinearLayout layout = new LinearLayout(this); 

所以,如果你請求一個子視圖,你在這做line:

final EditText answer = (EditText)layout.findViewById(R.id.answer); 

該應用程序將崩潰,因爲您的「佈局」爲空,並且不包含您請求的EditText!

添加到這一點,如果你對「MainActivity」主要佈局是「activity_main.xml中」,你應該只使用:現在

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

,爲的EditText,您請求的內容EditText創建「MainActivity」時總是返回一個空字符串(如果您尚未設置EditText的默認值)。您應該給予用戶在EditText框上輸入內容的時間,然後您可以檢索EditText的內容。

只是想給你一些提示,可以幫助你在你將來的應用程序。 使用由@privatestaticint給出的代碼,它應該工作正常:)