报错老是显示那个getLocationInfo()方法的 response那里 就是excute(httpGet) 不懂..不知道如何解决...
java代码:
public class LocationTest extends Activity implements LocationListener
{
/** Calledwhen the activity is first created. */
private LocationManager lm;
private TextView tvOutput;
private String best;
private String phoneNum = "";
private double lat = 0.00;
private double lng = 0.00;
private String address = "Not Found Location!";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_test);
lm = (LocationManager) this.getSystemService(LOCATION_SERVICE); // 从系统服务中获得位置管理器
tvOutput = (TextView) findViewById(R.id.textView1);
Intent intent = getIntent();
if(intent!=null)
{
phoneNum= intent.getStringExtra("phoneNum");
getMyLocation(phoneNum);
}
} public void getMyLocation(String phonen)
{
log("location providers");
String message = "";
dumpProviders(); // 输出所有位置提供者(network,gps等)
Criteria criteria = new Criteria(); // 定义规则
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 精确位置
best = lm.getBestProvider(criteria, true); // 获得最合适的提供者
log("\n best provider is :" + best);
Location location = lm.getLastKnownLocation(best); // 获得最后可知的位置
if(location!=null){
lat = location.getLatitude();
lng = location.getLongitude();
address =LocationTest.getLocationInfo(lat,lng);
message = address+";"+"lat:"+lat+";"+"lon:"+lng;
if(phonen!=null){
sendSMS(phonen, message);
}
dumpLocation(location);
}else{
message = address+";"+"lat:"+lat+";"+"lon:"+lng;
if(phonen!=null){
sendSMS(phonen, message);
}
}
}
public void sendSMS(String phonenumber,String msg){//发送短信的类
PendingIntent pi=PendingIntent.getActivity(this, 0, new Intent(this,LocationTest.class), 0);
SmsManager sms=SmsManager.getDefault();
sms.sendTextMessage(phonenumber, null, msg, pi, null);//发送信息到指定号码
}/*add by dingbinbin*/
public static String getLocationInfo(double lat, double lng) {
String httpurl = "";
String httplan = "zh-CN"; // "en-US" "zh-CN" ;
httpurl = String.format(
"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&language="
+ httplan + "&sensor=true", lat, lng);
HttpGet httpGet = new HttpGet(httpurl);
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
String adr = "";
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
BufferedReader br = new BufferedReader(
new InputStreamReader(stream));
String line = null;
while ((line = br.readLine()) != null) {
stringBuilder.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
adr = jsonSax(stringBuilder.toString());
return adr;
} public static String jsonSax(String in) {
String address = "";
try {
JSONTokener tokener = new JSONTokener(in);
JSONObject results = (JSONObject) tokener.nextValue();
if (!results.getString("status").equals("OK")) {
return "No location found";
}
JSONObject result_results = (JSONObject) results.getJSONArray(
"results").get(0);
JSONArray ja = result_results.getJSONArray("address_components");
address = "";
for (int i = ja.length() - 1; i >= 0; i--) {
JSONObject result_address = (JSONObject) ja.get(i);
JSONArray types = (JSONArray) result_address.get("types");
if (!types.get(0).toString().equals("postal_code")) {
address = address + " "
+ result_address.getString("long_name");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return address;
}
/*add by dingbinbin*/
// 获得所有提供者信息
public void dumpProviders()
{
List<String> list = lm.getAllProviders();
for (String string : list)
{
dumpProvider(string);
} } // 输出到TextView
private void log(String string)
{
tvOutput.append(string + "\n");
} // 获得每个位置提供者
public void dumpProvider(String provider)
{
LocationProvider lp = lm.getProvider(provider);
StringBuffer sb = new StringBuffer();
sb.append("\n位置提供者名称:" + lp.getName());
sb.append("\n提供者是否可用:" + lm.isProviderEnabled(provider));
sb.append("\n 是否精确位置:" + lp.getAccuracy());
sb.append("\n是否省电模式:" + lp.getPowerRequirement());
sb.append("\n 是否需要网路:" + lp.requiresNetwork());
sb.append("\n 是否需要无线网络:" + lp.requiresCell());
sb.append("\n 是否需要GPS:" + lp.requiresSatellite());
log(sb.toString());
} public void dumpLocation(Location location)
{
if (location == null)
{
log("\n[Locationunknowen]");
return;
}
log("\nLocation is:" +location.toString());
} // 位置改变时获得坐标
@Override
public void onLocationChanged(Location arg0)
{
dumpLocation(arg0);
} // 暂停时删除更新位置
@Override
protected void onPause()
{
super.onPause();
lm.removeUpdates(this);
} // 恢复时请求更新位置
protected void onResume()
{
super.onResume();
//绑定临听
lm.requestLocationUpdates(best, 1500, 1, this);
} public void onProviderDisabled(String arg0)
{
log("\nprovider disabled :" + arg0);
} public void onProviderEnabled(String arg0)
{
log("\nprovider enabled :" + arg0);
} // 状态改变时
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
log("\nstatus changed:provider:" + arg0 + ",status=" + arg1 + ",extra="+ arg2);
}
}
logcat:
11-12 04:07:34.240: E/Trace(1333): error opening trace file: No such file or directory (2)
11-12 04:07:34.910: E/AndroidRuntime(1333): FATAL EXCEPTION: main
11-12 04:07:34.910: E/AndroidRuntime(1333): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.location/com.example.location.LocationTest}: android.os.NetworkOnMainThreadException
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.Looper.loop(Looper.java:137)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.lang.reflect.Method.invokeNative(Native Method)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.lang.reflect.Method.invoke(Method.java:511)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-12 04:07:34.910: E/AndroidRuntime(1333): at dalvik.system.NativeStart.main(Native Method)
11-12 04:07:34.910: E/AndroidRuntime(1333): Caused by: android.os.NetworkOnMainThreadException
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.getLocationInfo(LocationTest.java:105)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.getMyLocation(LocationTest.java:72)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.onCreate(LocationTest.java:54)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.Activity.performCreate(Activity.java:5008)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
java代码:
public class LocationTest extends Activity implements LocationListener
{
/** Calledwhen the activity is first created. */
private LocationManager lm;
private TextView tvOutput;
private String best;
private String phoneNum = "";
private double lat = 0.00;
private double lng = 0.00;
private String address = "Not Found Location!";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_test);
lm = (LocationManager) this.getSystemService(LOCATION_SERVICE); // 从系统服务中获得位置管理器
tvOutput = (TextView) findViewById(R.id.textView1);
Intent intent = getIntent();
if(intent!=null)
{
phoneNum= intent.getStringExtra("phoneNum");
getMyLocation(phoneNum);
}
} public void getMyLocation(String phonen)
{
log("location providers");
String message = "";
dumpProviders(); // 输出所有位置提供者(network,gps等)
Criteria criteria = new Criteria(); // 定义规则
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 精确位置
best = lm.getBestProvider(criteria, true); // 获得最合适的提供者
log("\n best provider is :" + best);
Location location = lm.getLastKnownLocation(best); // 获得最后可知的位置
if(location!=null){
lat = location.getLatitude();
lng = location.getLongitude();
address =LocationTest.getLocationInfo(lat,lng);
message = address+";"+"lat:"+lat+";"+"lon:"+lng;
if(phonen!=null){
sendSMS(phonen, message);
}
dumpLocation(location);
}else{
message = address+";"+"lat:"+lat+";"+"lon:"+lng;
if(phonen!=null){
sendSMS(phonen, message);
}
}
}
public void sendSMS(String phonenumber,String msg){//发送短信的类
PendingIntent pi=PendingIntent.getActivity(this, 0, new Intent(this,LocationTest.class), 0);
SmsManager sms=SmsManager.getDefault();
sms.sendTextMessage(phonenumber, null, msg, pi, null);//发送信息到指定号码
}/*add by dingbinbin*/
public static String getLocationInfo(double lat, double lng) {
String httpurl = "";
String httplan = "zh-CN"; // "en-US" "zh-CN" ;
httpurl = String.format(
"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&language="
+ httplan + "&sensor=true", lat, lng);
HttpGet httpGet = new HttpGet(httpurl);
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
String adr = "";
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
BufferedReader br = new BufferedReader(
new InputStreamReader(stream));
String line = null;
while ((line = br.readLine()) != null) {
stringBuilder.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
adr = jsonSax(stringBuilder.toString());
return adr;
} public static String jsonSax(String in) {
String address = "";
try {
JSONTokener tokener = new JSONTokener(in);
JSONObject results = (JSONObject) tokener.nextValue();
if (!results.getString("status").equals("OK")) {
return "No location found";
}
JSONObject result_results = (JSONObject) results.getJSONArray(
"results").get(0);
JSONArray ja = result_results.getJSONArray("address_components");
address = "";
for (int i = ja.length() - 1; i >= 0; i--) {
JSONObject result_address = (JSONObject) ja.get(i);
JSONArray types = (JSONArray) result_address.get("types");
if (!types.get(0).toString().equals("postal_code")) {
address = address + " "
+ result_address.getString("long_name");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return address;
}
/*add by dingbinbin*/
// 获得所有提供者信息
public void dumpProviders()
{
List<String> list = lm.getAllProviders();
for (String string : list)
{
dumpProvider(string);
} } // 输出到TextView
private void log(String string)
{
tvOutput.append(string + "\n");
} // 获得每个位置提供者
public void dumpProvider(String provider)
{
LocationProvider lp = lm.getProvider(provider);
StringBuffer sb = new StringBuffer();
sb.append("\n位置提供者名称:" + lp.getName());
sb.append("\n提供者是否可用:" + lm.isProviderEnabled(provider));
sb.append("\n 是否精确位置:" + lp.getAccuracy());
sb.append("\n是否省电模式:" + lp.getPowerRequirement());
sb.append("\n 是否需要网路:" + lp.requiresNetwork());
sb.append("\n 是否需要无线网络:" + lp.requiresCell());
sb.append("\n 是否需要GPS:" + lp.requiresSatellite());
log(sb.toString());
} public void dumpLocation(Location location)
{
if (location == null)
{
log("\n[Locationunknowen]");
return;
}
log("\nLocation is:" +location.toString());
} // 位置改变时获得坐标
@Override
public void onLocationChanged(Location arg0)
{
dumpLocation(arg0);
} // 暂停时删除更新位置
@Override
protected void onPause()
{
super.onPause();
lm.removeUpdates(this);
} // 恢复时请求更新位置
protected void onResume()
{
super.onResume();
//绑定临听
lm.requestLocationUpdates(best, 1500, 1, this);
} public void onProviderDisabled(String arg0)
{
log("\nprovider disabled :" + arg0);
} public void onProviderEnabled(String arg0)
{
log("\nprovider enabled :" + arg0);
} // 状态改变时
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
log("\nstatus changed:provider:" + arg0 + ",status=" + arg1 + ",extra="+ arg2);
}
}
logcat:
11-12 04:07:34.240: E/Trace(1333): error opening trace file: No such file or directory (2)
11-12 04:07:34.910: E/AndroidRuntime(1333): FATAL EXCEPTION: main
11-12 04:07:34.910: E/AndroidRuntime(1333): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.location/com.example.location.LocationTest}: android.os.NetworkOnMainThreadException
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.Looper.loop(Looper.java:137)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.lang.reflect.Method.invokeNative(Native Method)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.lang.reflect.Method.invoke(Method.java:511)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-12 04:07:34.910: E/AndroidRuntime(1333): at dalvik.system.NativeStart.main(Native Method)
11-12 04:07:34.910: E/AndroidRuntime(1333): Caused by: android.os.NetworkOnMainThreadException
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-12 04:07:34.910: E/AndroidRuntime(1333): at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-12 04:07:34.910: E/AndroidRuntime(1333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.getLocationInfo(LocationTest.java:105)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.getMyLocation(LocationTest.java:72)
11-12 04:07:34.910: E/AndroidRuntime(1333): at com.example.location.LocationTest.onCreate(LocationTest.java:54)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.Activity.performCreate(Activity.java:5008)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-12 04:07:34.910: E/AndroidRuntime(1333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
解决方案 »
- 新人求助两个个问题 关于android开发。。。。求高手指点下
- 手机客户端访问电脑中的servlet,url怎么写?
- 求教高手:如何在NDKr5下用单独的静态库编译出动态库
- 如何使源码编译的模拟器使用SDcard
- [Android]怎样得到Google AdSense account?
- Android平台相关有哪些方面可以研究?
- 有没有人做过app自助生成平台,模板如何实现切换?
- android开发 将查询出来的数据导出为Excel
- 還是搞不懂 import static 與 import 有何不同之處!
- 在使用opencv出现
- android项目中的bin目录下的奇怪现象
- android 读取 XML
”删掉试试。再检查一下你的URL是否正确
我debug了,就是 response = client.execute(httpGet); 这步出问题,根本就没得相应就停止了,URL也没问题呀..
从代码分析,你将getMyLocation放在了oncreater中执行了,印证了以上我所说的情况。
解决方法:
尝试将网络访问HttpClient部分代码放入AsyncTask或者自己新开的线程中运行即可。