报错老是显示那个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)
 

解决方案 »

  1.   

    太长了, 且格式太乱。看了一眼错误, 感觉楼主可以把“e.printStackTrace();
    ”删掉试试。再检查一下你的URL是否正确
      

  2.   


    我debug了,就是 response = client.execute(httpGet); 这步出问题,根本就没得相应就停止了,URL也没问题呀..
      

  3.   

    从log分析,你的问题应该是网络操作放在了主线程中进行了,这在4.0系统是是不允许的。
    从代码分析,你将getMyLocation放在了oncreater中执行了,印证了以上我所说的情况。
    解决方法:
    尝试将网络访问HttpClient部分代码放入AsyncTask或者自己新开的线程中运行即可。