在我的项目中,我试图通过使用将我当前的位置发布到服务器LocationManager
。为此,我通过使用OnLocationChanged
位置管理器中的方法获得了纬度和经度值。同样在按钮单击事件中,我尝试使用地理编码器功能将经纬度值转换为地址。但它使我的应用程序崩溃。
按钮点击代码:
public void onClick(View v) {
btnflag++;
if(btnflag==1)
{
String providergps = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(providergps.contains("gps"))
{
//Check If Internet present
// isNetworkAvailable(h, 2000);
CheckConnectivity check = new CheckConnectivity();
Boolean conn = check.checkNow(getApplicationContext());
Boolean conn1=AsyncClass.result;
if(conn==true && conn1==true){
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider,0,0,Disclaimer.this);
Toast.makeText(getApplicationContext(), latlan, Toast.LENGTH_LONG).show();
Global.setlatlan(latlan);
currentdetail();
//Hit the Server fot getting Device Information
SettingsService set = new SettingsService();
SettingsService.loadingProgress = GUIStaticMethod
.returnProgressBar(Disclaimer.this);
GUIStaticMethod.mProgressDialog.setOnDismissListener(new OnDismissListener() {
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
String Settingres = Global.getResult();
//Toast.makeText(getApplicationContext(), Settingres, Toast.LENGTH_LONG).show();
List<Details> contacts = db.getAllContacts();
//check for setting result(Device Information) If Null
if(Settingres.equalsIgnoreCase("Web Service Invalid"))
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Error",
"Your Server Request is Not Responding.Try Again...", false);
}
else if(Settingres.equals(null)==true)
{
Toast.makeText(getApplicationContext(), "check DB", Toast.LENGTH_LONG).show();
boolean val =contacts.isEmpty();
if((contacts.isEmpty())==true)
{
Toast.makeText(getApplicationContext(),"Your Application Settings Not Loaded", Toast.LENGTH_LONG).show();
}
else
{
for (Details cn : contacts) {
String log = "APP ID: "+cn.getAPPID()+" ,Unique ID: " + cn.getUniqueID() + " ,Driver Name: " + cn.getDriverName()+ " ,Vehicle Name: " + cn.getVehicleName()+ " ,Mobile number: " + cn.getPhoneNumber()+ " ,Subscrition number: " + cn.getSubscription()+ " ,Email: " + cn.getEmail_id()+ " ,Perm_Location: " + cn.getPermLocation();
Log.d("Name: ", log);
Toast.makeText(getApplicationContext(), log,Toast.LENGTH_LONG).show();
}
}
}
// If Device Informtion Not Avail In Server Store Device Information to Server
else if(Settingres.equals("Device Not Updated")==true)
{
//Insert Device Info To Server by Calling SettingsDB Activity
SettingsService1.status="INSERT";
SettingDB.flag=0;
SettingDB.notflag=1;
btnflag=0;
Intent setting = new Intent(Disclaimer.this,SettingDB.class);
startActivity(setting);
}
//If Device Information is Available
else
{
//Store ii to Local Setting DB If newly present
if((contacts.isEmpty())==true)
{
db.addDetails(new Details(Settingres));
}
//Store ii to Local Setting DB If Already Exist(Drop Existing Table)
else
{
db.dropAllTable(getApplicationContext());
db.addDetails(new Details(Settingres));
}
/*Get the Device Information from local Database
for storing Device status to server like AppOpen,Find,Route Accept,
Route complete,Route Time Interval*/
List<Details> contacts1 = db.getAllContacts();
for (Details cn : contacts1) {
String log = "APP ID: "+cn.getAPPID()+" ,Unique ID: " + cn.getUniqueID() + " ,Driver Name: " + cn.getDriverName()+ " ,Vehicle Name: " + cn.getVehicleName()+ " ,Mobile number: " + cn.getPhoneNumber()+ " ,Subscrition number: " + cn.getSubscription()+ " ,Email: " + cn.getEmail_id()+ " ,Perm_Location: " + cn.getPermLocation();
Log.d("Name: ", log);
// Store App ID Globally
Global.setAppID(cn.getAPPID());
}
new CheckExpires().execute(Global.Appid);
CheckExpires.loadingProgress = GUIStaticMethod.returnProgressBar(Disclaimer.this);
GUIStaticMethod.mProgressDialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
String res = Global.getResult();
if(res.equalsIgnoreCase("Web Service Invalid"))
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Error",
"Your Server Request is Not Responding.Try Again...", false);
}
//String val1[]= res.split("string=");
if(res.equalsIgnoreCase("Valid"))
{
//Getting Time Info at which time App Open
CurrentTime tim = new CurrentTime();
/*Store the Device status as App Open on to server By Calling
* PostCurrentLocation Server*/
LocationService curadrloc = new LocationService("App Open");
//It stops location Manager
//Calling Main Screen Activity
GeneratNotification();
btnflag=0;
Intent mainscr = new Intent(Disclaimer.this, MainScreen.class);
startActivity(mainscr);
SharedPreferences AutoAns = getSharedPreferences(PREFS_NAMES, 0);
SharedPreferences.Editor answer = AutoAns.edit();
answer.putString("AutoAnswer","TRUE");
answer.commit();
finish();
}
else if(res.equalsIgnoreCase("Expired"))
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Disclaimer.this);
// Setting Dialog Title
alertDialog.setTitle("Alert Dialog");
// Setting Dialog Message
alertDialog.setMessage("If You Want to Continue Enter Coupon Code...");
// Setting Positive "Yes" Button
alertDialog.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
// Write your code here to invoke YES event
btnflag=0;
dialog.cancel();
}
});
// Setting Negative "NO" Button
alertDialog.setNegativeButton("COUPON CODE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Write your code here to invoke NO event
CheckConnectivity check = new CheckConnectivity();
Boolean conn = check.checkNow(Disclaimer.this);
//Boolean nwstatus = check.isNetworkAvailable(Disclaimer.this);
//Boolean conn1=isConnected();
if(conn == true){
final EditText input = new EditText(Disclaimer.this);
input.setSingleLine(true);
input.setRawInputType(InputType.TYPE_CLASS_NUMBER);
input.setHint("");
Pattern pattern = Pattern.compile(".+[0-9]+");
Matcher appmat = pattern.matcher(input.getText().toString());
boolean appmatch = appmat.matches();
AlertDialog.Builder share = new AlertDialog.Builder(Disclaimer.this);
share.setView(input);
share.setTitle("Enter Coupon Code");
share.setPositiveButton("Confirm"
,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
CheckConnectivity check = new CheckConnectivity();
//Boolean conn1=isConnected();
Boolean conn = check.checkNow(Disclaimer.this);
if(conn == true){
if(input.getText().toString().length() == 0)
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Invalid Entry",
"This Field can not be Blank.Try Again!!!", false);
}
else if(input.getText().toString().length()!= 8)
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Invalid Entry",
"This Field must have 8 digits.Try Again!!!", false);
}
else if(input.getText().toString().length() > 0 && input.getText().toString().length()==8)
{
//** Web Service Information to enter Coupen Code into Table for Extending Validation
String temp = input.getText().toString();
new CoupenMethod().execute(temp);
CoupenMethod.loadingProgress = GUIStaticMethod
.returnProgressBar(Disclaimer.this);
GUIStaticMethod.mProgressDialog.setOnDismissListener(new OnDismissListener() {
public void onDismiss(DialogInterface dialog) {
String result = Global.getResult();
if(result.equalsIgnoreCase("Web Service Invalid"))
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Error",
"Your Server Request is Not Responding.Try again.", false);
}
else if(result.equals("Invalid"))
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Error",
"Entered Coupen Code is Invalid.", false);
}
else if(result.equals(null))
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "Error",
"Entered Coupen Code is Invalid.", false);
}
else
{
String res[]=result.split("-");
String webres=res[1];
btnflag=0;
showAlertDialog1(Disclaimer.this, "Congratulations",
"Your Activation "+webres, false);
}
}
});
}
}
else
{
btnflag=0;
showAlertDialog1(Disclaimer.this, "No Internet Connection",
"You don't have internet connection.", false);
}
}
});
share.setNegativeButton("Cancel",null);
share.show();
}
else
{
btnflag=0;
showAlertDialog(Disclaimer.this, "No Internet Connection",
"You don't have internet connection.", false);
}
}
});
// Showing Alert Message
alertDialog.show();
}
else if(res.equalsIgnoreCase(null))
{
showAlertDialog1(Disclaimer.this, "Error",
"Your Request is Invalid.Try Again...", false);
}
btnflag=0;
}
});
}
}
});
}
//If Internet is not Present shows Alert
else{
btnflag=0;
showAlertDialog(Disclaimer.this, "No Internet Connection",
"You don't have internet connection.", false);
}
}
else
{
AlertDialog.Builder call1 = new Builder(Disclaimer.this);
call1.setTitle("GPS is settings");
call1.setMessage("GPS is not enabled. Do you want to go to settings menu?");
call1.setCancelable(false);
call1.setPositiveButton(
"Cancel",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int which) {
btnflag=0;
dialog.cancel();
}
});
call1.setNegativeButton(
"Settings",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int which) {
btnflag=0;
// Application goes to Home Screen
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
call1.show();
}
}
}
//Alert Dialog Information for Internet purpose
public void showAlertDialog(Context context, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
//alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.phone", "com.android.phone.Settings");
startActivity(intent);
}
});
// Showing Alert Message
alertDialog.show();
}
});
CurrentDetail Method :
public void currentdetail()
{
Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
try {
List<Address> address = geocoder.getFromLocation(lat,lang, 1);
if(address != null) {
Address returnedAddress = address.get(0);
StringBuilder strReturnedAddress = new StringBuilder();
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
String curadr = strReturnedAddress.toString();
Global.setCurrAddress(curadr);
}
else{
Global.setCurrAddress("No Address Defined");
}
}
catch (IOException e)
{
Global.setCurrAddress("No Address Defined");
e.printStackTrace();
}
}
但是当我单击一个按钮时,它显示如下错误
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.slet.routemytrips.beta.Disclaimer.currentdetail(Disclaimer.java:803)
at com.slet.routemytrips.beta.Disclaimer$2.onClick(Disclaimer.java:204)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14109)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
笔记:
它专门用于某些类型的设备,例如 Galaxy S4、Galaxy Note 2
此外,当我检查经纬度值时,它会显示类似 (13.1270,803.2701) 的值