此代码正在打印json解析器异常 在这段代码中,我想将纬度发送到服务器,但它会继续向我显示两个错误:
你能告诉我我的错误吗?
以下是我的相关代码:
package com.example.gpstracking;
public class AndroidGPSTrackingActivity extends Activity {
Button btnShowLocation;
String lat = "";
String lng = "";
// GPSTracker class
GPSTracker gps;
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
// JSONParser jsonParser = new JSONParser();
private static String url_create_product = "http://dyandroidapps.netii.net/"
+ "android_db/DB_Functncreate1.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
// show location button click event
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// create class object
gps = new GPSTracker(AndroidGPSTrackingActivity.this);
// check if GPS enabled
if (gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
lat = Double.toString(latitude);
lng = Double.toString(longitude);
Toast.makeText(
getApplicationContext(),
"Your Location is " + "- \nLat: " + latitude
+ "\nLong: " + longitude, Toast.LENGTH_LONG)
.show();
new CreateNewProduct().execute();
// postData(lat, lng);
} else {
// can't get location
// GPS or Network is not enabled
// Ask user to enable GPS/network in settings
gps.showSettingsAlert();
}
}
});
}
/*
* public void postData(String lat, String lng) { // Create a new HttpClient
* and Post Header HttpClient httpclient = new DefaultHttpClient();
*
* HttpPost httppost = new
* HttpPost("http://dyandroidappa.netii.net/android_db/create_product.php");
*
* try {
*
* // Execute HTTP Post Request // HttpResponse response =
* httpclient.execute(htget); HttpResponse response =
* httpclient.execute(httppost); // String resp =
* response.getStatusLine().toStrinkatyg(); try this // now //
* Toast.makeText(this, resp, 5000).show();
*
* } catch (ClientProtocolException e) { Toast.makeText(this, "Error",
* 5000).show(); } catch (IOException e) { Toast.makeText(this, "Error",
* 5000).show(); } }
*/
class CreateNewProduct extends AsyncTask<String, String, String> {
// * Before starting background thread Show Progress Dialog
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AndroidGPSTrackingActivity.this);
pDialog.setMessage("Sending markers..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// * Creating product
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("lat", lat));
params.add(new BasicNameValuePair("lng", lng));
// params.add(new BasicNameValuePair("description", description));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_create_product,
"POST", params);
// check log cat from response
Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
Toast.makeText(getApplicationContext(), "Data Posted",
Toast.LENGTH_SHORT).show();
// closing this screen
finish();
} else {
// failed to create product
Toast.makeText(getApplicationContext(), "Data not Posted",
Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json Exception",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Only Exception",
Toast.LENGTH_SHORT).show();
}
return null;
}
// After completing background task Dismiss the progress dialog
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.cancel();
}
}
}
我的jsonparser类是
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if (method == "POST") {
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//HttpPost httpPost = new HttpPost(url);
// httpPost.setHeader("Content-type","application/json");
httpPost.setHeader("Content-type","application/json");
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if (method == "GET") {
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Content-type","application/json");
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
我的logcat是
06-27 18:13:28.160: E/JSON Parser(2583): Error parsing data org.json.JSONException: End of input at character 0 of
06-27 18:13:28.170: W/dalvikvm(2583): threadid=11: thread exiting with uncaught exception (group=0x41b132b8)
06-27 18:13:28.180: E/AndroidRuntime(2583): FATAL EXCEPTION: AsyncTask #1
06-27 18:13:28.180: E/AndroidRuntime(2583): java.lang.RuntimeException: An error occured while executing doInBackground()
06-27 18:13:28.180: E/AndroidRuntime(2583): at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.lang.Thread.run(Thread.java:856)
06-27 18:13:28.180: E/AndroidRuntime(2583): Caused by: java.lang.NullPointerException
06-27 18:13:28.180: E/AndroidRuntime(2583): at com.example.gpstracking.AndroidGPSTrackingActivity$CreateNewProduct.doInBackground(AndroidGPSTrackingActivity.java:131)
06-27 18:13:28.180: E/AndroidRuntime(2583): at com.example.gpstracking.AndroidGPSTrackingActivity$CreateNewProduct.doInBackground(AndroidGPSTrackingActivity.java:1)
06-27 18:13:28.180: E/AndroidRuntime(2583): at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-27 18:13:28.180: E/AndroidRuntime(2583): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-27 18:13:28.180: E/AndroidRuntime(2583): ... 4 more
06-27 18:13:35.250: E/WindowManager(2583): Activity com.example.gpstracking.AndroidGPSTrackingActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42554568 that was originally added here
06-27 18:13:35.250: E/WindowManager(2583): android.view.WindowLeaked: Activity com.example.gpstracking.AndroidGPSTrackingActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42554568 that was originally added here
06-27 18:13:35.250: E/WindowManager(2583): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:418)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:322)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:234)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.Window$LocalWindowManager.addView(Window.java:559)
06-27 18:13:35.250: E/WindowManager(2583): at android.app.Dialog.show(Dialog.java:300)
06-27 18:13:35.250: E/WindowManager(2583): at com.example.gpstracking.AndroidGPSTrackingActivity$CreateNewProduct.onPreExecute(AndroidGPSTrackingActivity.java:109)
06-27 18:13:35.250: E/WindowManager(2583): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
06-27 18:13:35.250: E/WindowManager(2583): at android.os.AsyncTask.execute(AsyncTask.java:534)
06-27 18:13:35.250: E/WindowManager(2583): at com.example.gpstracking.AndroidGPSTrackingActivity$1.onClick(AndroidGPSTrackingActivity.java:64)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.View.performClick(View.java:4295)
06-27 18:13:35.250: E/WindowManager(2583): at android.view.View$PerformClick.run(View.java:17456)
06-27 18:13:35.250: E/WindowManager(2583): at android.os.Handler.handleCallback(Handler.java:615)
06-27 18:13:35.250: E/WindowManager(2583): at android.os.Handler.dispatchMessage(Handler.java:92)
06-27 18:13:35.250: E/WindowManager(2583): at android.os.Looper.loop(Looper.java:174)
06-27 18:13:35.250: E/WindowManager(2583): at android.app.ActivityThread.main(ActivityThread.java:4952)
06-27 18:13:35.250: E/WindowManager(2583): at java.lang.reflect.Method.invokeNative(Native Method)
06-27 18:13:35.250: E/WindowManager(2583): at java.lang.reflect.Method.invoke(Method.java:511)
06-27 18:13:35.250: E/WindowManager(2583): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
06-27 18:13:35.250: E/WindowManager(2583): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
06-27 18:13:35.250: E/WindowManager(2583): at dalvik.system.NativeStart.main(Native Method)
06-27 18:13:35.290: D/dalvikvm(2583): GC_CONCURRENT freed 189K, 10% free 9914K/11015K, paused 13ms+2ms, total 58ms
如果需要其他代码,我只有一个代码发布在这里,请建议我
package com.example.gpstracking;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
// Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
/**
* Stop using GPS listener Calling this function will stop using GPS in your
* app
* */
public void stopUsingGPS() {
if (locationManager != null) {
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
* */
public double getLatitude() {
if (location != null) {
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function to get longitude
* */
public double getLongitude() {
if (location != null) {
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
/**
* Function to check GPS/wifi enabled
*
* @return boolean
* */
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function to show settings alert dialog On pressing Settings button will
* lauch Settings Options
* */
public void showSettingsAlert() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS is settings");
// Setting Dialog Message
alertDialog
.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button
alertDialog.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
}
答案 0 :(得分:0)
我不确定,但也许问题在于:
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("lat", lat));
params.add(new BasicNameValuePair("lng", lng));
在你的主要行为中,我没有看到你设置这些&#39; lat&#39;和&#39; lng&#39;变量(有注释行):
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// lat = Double.toString(latitude);
// lng = Double.toString(longitude);
因此,正如开头所宣布的那样,这两者总是一样的:
String lat = "";
String lng = "";
除此之外,你的131行还有一个NullPointerException。请发布。