看上去很简单的练习,但这不知怎的毁了我的程序。试图检索用户输入到EditText字段的字符串。当我按下提交按钮时,我就崩溃了。再次感谢!
下面是代码和LogCat信息:
public class FindEventsActivity extends Activity implements LocationListener {
GeoPoint searchFrom;
private static final int USE_CURRENT_COORDINATES = 0;
private static final int ENTER_CITY = 1;
private static final int ENTER_ZIP = 2;
private static final int USE_MAP = 3;
private static final int RESULT_FROM_MAP = 1;
Context context;
String cityState;
Geocoder geocoder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_events);
context = this;
setClickListeners();
}
private void setClickListeners() {
RelativeLayout locationBox = (RelativeLayout) findViewById(R.id.locationBox);
locationBox.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
final CharSequence[] methods = {"Use Current Location", "Enter City / State" , "Enter Zip Code", "Use Map"};
AlertDialog.Builder chooser = new AlertDialog.Builder(FindEventsActivity.this);
chooser.setTitle("Choose Your Search Location Method").setItems(methods, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int position) {
switch (position) {
case USE_CURRENT_COORDINATES:
searchFrom = getCurrentCoordinates();
break;
case ENTER_CITY:
searchFrom = getFromCityState();
break;
}
}
});
chooser.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.find_events, menu);
return true;
}
private GeoPoint getCurrentCoordinates() {
if (isGooglePlay()) {
Location lastKnownLocation = getLastKnownLocation();
int lat = (int) (lastKnownLocation.getLatitude() * 1E6);
int lng = (int) (lastKnownLocation.getLongitude() * 1E6);
return new GeoPoint(lat, lng);
}
return null;
}
public void submitButtonOnClick(View view) {
System.err.println("inside onTouch");
EditText city_entry = (EditText) view.findViewById(R.id.city_entry);
Spinner state = (Spinner) findViewById(R.id.state_spinner);
System.err.println("here");
System.err.println(city_entry.getText().toString());
System.err.println("city string captured");
System.err.println(state.getSelectedItem().toString());
cityState = city_entry.getText().toString() + ", " + state.getSelectedItem().toString();
Toast.makeText(getApplicationContext(), cityState, Toast.LENGTH_LONG).show();
}
private GeoPoint getFromCityState() {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.city_state_entry, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
//setContentView(R.layout.city_state_entry);
//Button submitButton = (Button) findViewById(R.id.submitButton);
System.err.println("About to create onClickListener");
// create alert dialog
AlertDialog alertDialog = builder.create();
alertDialog.show();
return null;
}
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
private Location getLastKnownLocation() {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
/* Verify that the gps is turned on */
if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
String provider = locationManager.getBestProvider(criteria, true);
if (provider == null) {
onProviderDisabled(null);
}
Location location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 300000, 5000, this);
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
return location;
}
return null;
}
private void buildAlertMessageNoGps() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
private boolean isGooglePlay() {
/* This function checks to make sure that the Google Play service is installed on the user's phone */
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (status != ConnectionResult.SUCCESS) {
((Dialog) GooglePlayServicesUtil.getErrorDialog(status, this, 10)).show();
//Toast.makeText(this, "Google Play Services is not available. Check your setup.", Toast.LENGTH_SHORT).show();
return false;
}
return true;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/city_state_entry"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/background"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/city_state_title"
android:textColor="#000000"
android:layout_gravity="center_horizontal"
android:paddingBottom="10dip"
/>
<TextView
android:id="@+id/enter_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/enter_city" />
<EditText
android:id="@+id/city_entry"
android:inputType="textCapWords"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/enter_state"
android:layout_marginTop="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/select_state" />
<Spinner
android:id="@+id/state_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/state_abbreviations" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_gravity="center_horizontal"
android:paddingBottom="10dp">
<Button
android:id="@+id/submitButton"
style="@style/ButtonText"
android:onClick="submitButtonOnClick"
android:layout_gravity="center_horizontal"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@drawable/blue_button"
android:text="@string/submit" />
</LinearLayout>
</LinearLayout>05-19 :23:23:56.703: W/System.err(4744):内部onTouch 05-19 19:56.703: W/System.err(4744):这里05- 19 :23:56.703: D/AndroidRuntime(4744):关闭VM 05-19 19:23:56.703: W/dalvikvm(4744):threadid=1:线程发出未知异常(group=0x4001d5a0) 05-19 19:23:56.713: E/AndroidRuntime(4744):致命例外:主05- 19 :23:56.713: E/AndroidRuntime(4744):java.lang.IllegalStateException:无法执行活动的方法05- 19 :23:56.713: E/AndroidRuntime(4744):at android.view.查看$1.onClick(View.java:2191) 05- 19 :23:56.713: 56.713: E/AndroidRuntime(4744):at java.lang.IllegalStateException 05-19 19:23:56.713: 56.713: E/AndroidRuntime(4744 )):在android.view.View$PerformClick.run(View.java:9293) 05-19 19:23:56.713: E/AndroidRuntime(4744):在android.os.Handler.handleCallback(Handler.java:587) 05-19 19:23:56.713: E/AndroidRuntime(4744):android.os.Handler.dispatchMessage(Handler.java:92) 05-19 19:23:56.713: E/AndroidRuntime(4744):at android.os.Looperandroid.app.ActivityThread.main(ActivityThread.java:4369) (Looper.java:150) 05-19 19:23:56.713: E/AndroidRuntime(4744):at .loop 05-19 19:23:56.713: E/AndroidRuntime(4744):at java.lang.reflect.Method.invokeNative(原生方法) 05- 19 :23:56.713: E/AndroidRuntime(4744):at java.lang.reflect.Method.invoke(Method.java:507)05- 19 :23 :23:56.713: E/AndroidRuntime(4744):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:846) 05-19 19:19:56.713: E/AndroidRuntime(4744):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 05-19 :19:56.713: E/AndroidRuntime(4744):dalvik.system.NativeStart.main(原生方法) 05-19 19:23:23:23:23:23:23:23:23:23::56.713: E/AndroidRuntime(4744):由java.lang.reflect.InvocationTargetException 05-19 19:23:56.713引起: E/AndroidRuntime(4744):at java.lang.reflect.Method.invokeNative(原生方法) 05- 19 :23:56.713: E/AndroidRuntime(4744):at java.lang.reflect.Method.invokeNative 05-19 19:23:56.713: E/AndroidRuntime(4744):at查看$1.onClick(View.java:2186) 05- 19 :23:56.713: E/AndroidRuntime(4744):. 11多11-19 19:23:56.713: E/AndroidRuntime(4744):原因: java.lang.NullPointerException 05- 19 :23:56.713: E/AndroidRuntime(4744):at java.lang.NullPointerException 05-19 19:23:56.713: e/AndroidRuntime(4744):. 14
发布于 2013-05-20 14:19:00
编辑文本是对话框的一部分,因此不是活动的子元素,也不是按下的按钮的子元素(这是onclick方法的View参数。
所以你需要掌握它(如把它分配给你的活动领域(快速和肮脏))。这反过来会给你一些旋转等问题,但这是另一个话题。把它变成一个领域应该能让你有个地方。
发布于 2013-05-20 01:43:16
您是如何调用方法submitButtonOnClick的?认为没有找到view。调用该视图时,将视图传递给方法submitButtonOnClick,然后尝试以下操作.
而不是..。
EditText city_entry = (EditText) findViewById(R.id.city_entry);试着..。
EditText city_entry = (EditText) view.findViewById(R.id.city_entry); 发布于 2013-05-20 06:30:59
而不是用这个
System.err.println(city_entry.getText().toString());试试这种方法
System.err.println(""+city_entry.getText().toString());https://stackoverflow.com/questions/16641377
复制相似问题