一般来说,在 Java 和 OOP 方面,我是一个真正的菜鸟。我的应用程序崩溃时遇到问题,我认为这是因为我的主要活动杂乱无章,而且我的整个程序结构不正确。谁能建议我如何清理以下代码以使事情运行更顺畅并拥有更好的应用程序结构?我认为我需要将事物分成不同的类并将大部分功能保留在不同的类中,但我是新手,真的不确定。当我在手机上运行应用程序时,我不断收到 ANR 错误(keyDispatchingTimedOut 错误),我认为是我的无组织代码导致了这种情况。任何帮助都会很棒!谢谢。
package com.example.www;
public class MainActivity extends Activity {
Button mCloseButton;
Button mOpenButton;
MultiDirectionSlidingDrawer mDrawer;
private Button send_button;
EditText msgTextField;
private LocationManager locManager;
private LocationListener locListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature( Window.FEATURE_NO_TITLE );
setContentView(R.layout.main);
mDrawer.open();
final SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
final String phone = shared.getString("PHONE", "");
String usr_id = shared.getString("USR_ID", null);
if(phone == null) {
TextView text = (TextView)findViewById(R.id.textView1);
text.setText("Please Enter Your Phone Number");
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Please Enter Your Phone Number");
alert.setMessage("You must enter your phone number in order to use this application");
final EditText input = new EditText(this);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if (value.length() == 10) {
Editor editor = shared.edit();
editor.putString("PHONE", value);
editor.commit();
}
}
});
alert.show();
}
Button profile = (Button) findViewById(R.id.button1);
profile.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
}
});
if (usr_id == null) {
char[] chars = "abcdefghijklmnopqrstuvwxyzABSDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
Random r = new Random(System.currentTimeMillis());
char[] id = new char[8];
for (int i = 0; i < 8; i++) {
id[i] = chars[r.nextInt(chars.length)];
}
usr_id = new String(id);
Editor editor = shared.edit();
editor.putString("USR_ID", usr_id);
editor.commit();
}
final String usr_id1 = shared.getString("USR_ID", "none");
send_button = (Button)findViewById(R.id.button2);
send_button.setOnClickListener(new OnClickListener() {
private boolean running = false;
private CountDownTimer timer;
public void onClick(View v) {
if(!running)
{
running = true;
timer = new CountDownTimer(4000, 1000) {
@Override
public void onFinish() {
send_button.setText("GPS Sent");
startLocation();
sendId(usr_id1, phone);
}
@Override
public void onTick(long sec) {
send_button.setText("CANCEL (" + sec / 1000 + ")");
}
}.start();
}
else
{
timer.cancel();
send_button.setText("Send GPS");
running = false;
}
}
});
}
private void startLocation()
{
//get a reference to the LocationManager
locManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//get the last known position
Location loc =
locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//show the last known position
//showPosition(loc);
//checked to receive updates from the position
locListener = new LocationListener() {
public void onLocationChanged(Location location) {
showPosition(location);
}
public void onProviderDisabled(String provider){
//labelState.setText("Provider OFF");
}
public void onProviderEnabled(String provider){
//labelState.setText("Provider ON ");
}
public void onStatusChanged(String provider, int status, Bundle extras){
//Log.i("", "Provider Status: " + status);
//labelState.setText("Provider Status: " + status);
}
};
locManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
private void showPosition(Location loc) {
if(loc != null)
{
Log.i("", String.valueOf(loc.getLatitude() + " - " + String.valueOf(loc.getLongitude())));
send(loc);
}
}
private void send(Location loc)
{
String lat = String.valueOf(loc.getLatitude());
String lon = String.valueOf(loc.getLongitude());
SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
final String usr_id2 = shared.getString("USR_ID", "none");
if (lat != "0" && lon != "0")
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/test/example1.php");
//HttpPost httppost = new HttpPost("http://kblapdesk.com/myers27/receive.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); //changed to 4
nameValuePairs.add(new BasicNameValuePair("lat", lat)); //changed "message" to "lat" changed "msg" to "lat"
nameValuePairs.add(new BasicNameValuePair("lon", lon)); //added this line
nameValuePairs.add(new BasicNameValuePair("id", usr_id2));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
else
{
// display message if text fields are empty
Toast.makeText(getBaseContext(),"All field are required",Toast.LENGTH_SHORT).show();
}
}
private void sendId(String usr_id1, String phone)
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/test/example.php");
//HttpPost httppost = new HttpPost("http://kblapdesk.com/myers27/receive_user.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); //changed to 4
nameValuePairs.add(new BasicNameValuePair("id", usr_id1));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
//msgTextField.setText(""); // clear text box
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
mCloseButton.setOnClickListener( new OnClickListener() {
public void onClick( View v )
{
mDrawer.animateClose();
}
});
mOpenButton.setOnClickListener( new OnClickListener() {
public void onClick( View v )
{
if( !mDrawer.isOpened() )
mDrawer.animateOpen();
}
});
}
@Override
public void onContentChanged()
{
super.onContentChanged();
mCloseButton = (Button) findViewById( R.id.button_open );
mOpenButton = (Button) findViewById( R.id.button_open );
mDrawer = (MultiDirectionSlidingDrawer) findViewById( R.id.drawer );
}
}