2015-12-09 65 views
-1

我有一個應用程序使用3個獨立的類將信息傳遞到主活動,該信息將信息傳遞到數組中,該數組將隨後在第一個字母爲類型。編碼似乎都在那裏,並在理論工作像它應該...但是試圖鍵入字母,我得到這個時候,而不是表現出任何狀態列表:在面向對象的類中添加getName()方法

Click here to show what happens on the emulator, weird error

我敢肯定,我需要在我嘗試解決問題時看到的狀態類的某個地方添加getName()方法,然後將其調用到主要活動中,但我在哪裏或如何掙扎,但我不是在多類中經驗過多,並且def不習慣getName()方法。或者,如果有人對如何傳遞名稱而不是整個州級(我認爲是導致問題的原因)提出了另一個建議,我很樂意聽到/看到它!

代碼如下:

main.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" 
 
    xmlns:app="http://schemas.android.com/apk/res-auto" 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" 
 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
 
    tools:showIn="@layout/activity_main" tools:context=".MainActivity"> 
 

 
    <Spinner 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/spinner" 
 
     android:layout_below="@+id/button" 
 
     android:layout_alignParentEnd="true" 
 
     android:textAlignment="center" /> 
 

 
    <TextView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="Look for States below" 
 
     android:id="@+id/textView" 
 
     android:textSize="30dp" 
 
     android:layout_alignParentTop="true" 
 
     android:layout_centerHorizontal="true" /> 
 

 
    <Button 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="Search States" 
 
     android:id="@+id/button" 
 
     android:onClick="buttonOnClick" 
 
     android:layout_below="@+id/searchBox" 
 
     android:layout_centerHorizontal="true" /> 
 

 
    <EditText 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/searchBox" 
 
     android:textSize="35dp" 
 
     android:layout_centerHorizontal="true" 
 
     android:paddingBottom="15dp" 
 
     android:hint="Type a Letter" 
 
     android:layout_below="@+id/textView" /> 
 

 

 
</RelativeLayout>

City.java

public class City { 
 
    String name; 
 
    int population; 
 

 
    public City() { 
 
} 
 

 
public City(int pop, String city_name){ 
 

 
    name = city_name; 
 
    population = pop; 
 

 
} 
 

 
public String getName(){ 
 

 
    return name; 
 

 
} 
 

 

 
}

capital.java

public class Capital extends City { 
 

 
    public Capital(int pop,String name){ 
 
     super(pop, name); 
 
    } 
 
}

state.java

public class State { 
 

 
    City capital; 
 
    String name; 
 

 
    public State (String stateName, String capitalName, int pop){ 
 

 
     name = stateName; 
 

 
     Capital cap = new Capital(pop, capitalName); 
 
     capital = cap; 
 
    } 
 

 

 
    public boolean startWith(char s) { 
 
     return s == name.charAt(0); 
 

 
    } 
 

 

 

 
}

,最後我mainactivity.java

import android.os.Bundle; 
 
import android.support.design.widget.FloatingActionButton; 
 
import android.support.design.widget.Snackbar; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.support.v7.widget.Toolbar; 
 
import android.view.View; 
 
import android.view.Menu; 
 
import android.view.MenuItem; 
 
import android.widget.Adapter; 
 
import android.widget.AdapterView; 
 
import android.widget.ArrayAdapter; 
 
import android.widget.Button; 
 
import android.widget.SearchView; 
 
import android.widget.TextView; 
 
import android.widget.EditText; 
 
import android.widget.Spinner; 
 
import android.widget.Toast; 
 

 
import java.util.ArrayList; 
 

 
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 
 

 
    Button stateLook; 
 
    Spinner spinner; 
 
    ArrayAdapter<CharSequence> adapter; 
 
    EditText searchBox; 
 

 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 
     stateLook = (Button) findViewById(R.id.button); 
 
     searchBox = (EditText) findViewById(R.id.searchBox); 
 

 
    }; 
 

 

 

 
    public void buttonOnClick(View v) { 
 
     Button button = (Button) v; 
 
     Spinner spinner = (Spinner) findViewById(R.id.spinner); 
 

 
     ArrayList states = new ArrayList(); 
 
     states.add(new State("Alabama", "Montgomery", 205764)); 
 
     states.add(new State("Alaska", "Juneau", 31275)); 
 
     states.add(new State("Arizona", "Phoenix", 1445632)); 
 
     states.add(new State("Arkansas", "Little Rock", 193524)); 
 
     states.add(new State("California", "Sacramento", 466488)); 
 
     states.add(new State("Colorado", "Denver", 600158)); 
 
     states.add(new State("Connecticut", "Hartford", 124775)); 
 
     states.add(new State("Delaware", "Dover", 36047)); 
 
     states.add(new State("Florida", "Tallahassee", 181412)); 
 
     states.add(new State("Georgia", "Atlanta", 420003)); 
 
     states.add(new State("Hawaii", "Honolulu", 337256)); 
 
     states.add(new State("Idaho", "Boise", 205671)); 
 
     states.add(new State("Illinois", "Springfield", 116250)); 
 
     states.add(new State("India", "Indianapolis", 829718)); 
 
     states.add(new State("Iowa", "Des Moines", 203433)); 
 
     states.add(new State("Kansas", "Topeka", 127473)); 
 

 

 

 

 
     char s; 
 
     s = searchBox.getText().charAt(0); 
 
     ArrayList stateArray = new ArrayList(); 
 
     if (searchBox.getText().length() == 1) { 
 
      for (int i = 0; i < states.size(); i++) { 
 

 
       State state = (State) states.get(i); 
 

 
       ///char s1 = state.charAt(0); 
 

 
       if (state.startWith(s)) { 
 
        stateArray.add(state); 
 
       } 
 
      } 
 
     } 
 

 

 

 

 
     ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, stateArray); 
 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
 
     spinner.setAdapter(adapter); 
 
     spinner.setOnItemSelectedListener(this); 
 

 

 

 

 
    } 
 

 

 
    @Override 
 
    public boolean onCreateOptionsMenu(Menu menu) { 
 
     // Inflate the menu; this adds items to the action bar if it is present. 
 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
 
     return true; 
 
    } 
 

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

 
    @Override 
 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
 
     TextView myText = (TextView) view; 
 
     Toast.makeText(this, "You Selected "+ myText.getText(), Toast.LENGTH_SHORT).show(); 
 
    } 
 

 
    @Override 
 
    public void onNothingSelected(AdapterView<?> parent) { 
 

 
    } 
 
}

回答

0

您看到的錯誤是從toString方法。在課堂上覆蓋這個來產生你想要的輸出。

或更改

if (state.startWith(s)) { 
    stateArray.add(state.getName()); // create getName method in State (like) getName in Cuty 
} 
+0

非常感謝您!這就是訣竅! – Cynesra

+0

我會高興你,但我沒有這樣做的選票,所以一旦我代表它會通過(所以它告訴我) – Cynesra