我對Java和Android有點新,並且遇到類和活動的麻煩。我正在清理我的代碼,並將大量的代碼從MainActivity移到不同的類中,但我只能通過創建新的活動而不是類來使應用程序工作。將活動更改爲類 - Android
- 我需要留在主視圖,只是使用類的方法
- 從主要活動按鈕,倒計時,然後調用LocationActivity。
- LocationActivity找到GPS座標,然後將它們發送到SendActivity。
這是我能夠使它工作的唯一方法,因爲我只需要啓動locationListener,所以我只是在onCreate部分啓動它。
MainActivity.java
public class MainActivity extends Activity {
Button mCloseButton;
Button mOpenButton;
MultiDirectionSlidingDrawer mDrawer;
private Button send_button;
Button sendButton;
EditText msgTextField;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
send_button = (Button)findViewById(R.id.button2);
mDrawer.open();
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();
}
});
final SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
final String first = shared.getString("FIRSTNAME", "");
final String last = shared.getString("LASTNAME", "0");
///////Profile Button////////////////
Button profile = (Button) findViewById(R.id.button1);
profile.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
}
});
///////////////////////////////////
//////Generate ID//////////////////
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();
}
//////////////////////////////////
////////Send Alert////////////////
///////Begin Timer///////////////
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("SENT");
startActivity(new Intent(MainActivity.this, LocationActivity.class));
SendUserActivity.sendId(usr_id1, first, last);
}
@Override
public void onTick(long sec) {
send_button.setText("CANCEL (" + sec/1000 + ")");
}
}.start();
}
else
{
timer.cancel();
send_button.setText("Send!");
running = false;
}
}
});
}
///////////////////////////////////
@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);
}
}
LocationActivity.java
package com.alex.www;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
public class LocationActivity extends Activity {
private LocationManager locManager;
private LocationListener locListener;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startLocation();
}
void startLocation()
{
SharedPreferences shared = getSharedPreferences("PEOPLE_PREFERENCES", MODE_PRIVATE);
final String usr_id2 = shared.getString("USR_ID", "none");
//get a reference to the LocationManager
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//checked to receive updates from the position
locListener = new LocationListener() {
public void onLocationChanged(Location location) {
SendActivity.send(location, usr_id2);
}
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);
}
};
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
}
SendActivity.java
package com.alex.www;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SendActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static void send(Location loc, String usr_id2)
{
Log.i("", String.valueOf(loc.getLatitude() + " - " + String.valueOf(loc.getLongitude())));
String lat = String.valueOf(loc.getLatitude());
String lon = String.valueOf(loc.getLongitude());
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/test/example.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("lat", lat));
nameValuePairs.add(new BasicNameValuePair("lon", lon));
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
}
}
}
儘量尊重,先學習Java,同時不要學習Android的負擔。我相信你不會理解這個建議,但是一旦你對Java有了一個明確的理解,你就會明白這對你來說是最好的行動方式。 – mah 2012-02-28 12:34:38