我有这样的代码。 这是在创建
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mgr=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener ll=new mylocatoinlis();
mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,3600l,0,ll);
}
这是位置监听器类
protected class mylocatoinlis implements LocationListener {
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(location!=null)
{
double plong=location.getLongitude();
double plate=location.getLatitude();
//Log.i("MyLocation",Double.toString(plate)+" "+Double.toString(plong));
ingformation(plate,plong);
}
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
这是json包装函数
public void ingformation(double plate, double plong) {
// TODO Auto-generated method stub
try
{
client=new DefaultHttpClient();
StringBuilder url1=new StringBuilder(URL);
url1.append(plate+","+plong+".json");
HttpGet get=new HttpGet(url1.toString());
HttpResponse r=client.execute(get);
int status=r.getStatusLine().getStatusCode();
if(status==200){
HttpEntity e=r.getEntity();
String data=EntityUtils.toString(e);
obj= new JSONObject(data);
main=obj.getJSONObject("current_observation");
maintemp=main.getJSONObject("display_location");
tv1.setText(" "+maintemp.getString("city"));
tv3.setText(" "+main.getString("weather"));
tv2.setText(" "+main.getString("temp_c")+" C");
String imageName=main.getString("icon_url");
//String imageName1.append("nt_"+imageName);
//im.setImageURI(Uri.parse(url1.toString()+imageName));
if(imageName!="")
{
wv.setVisibility(View.VISIBLE);
wv.loadUrl(imageName);
}
else
{
wv.setVisibility(View.INVISIBLE);
}
//wv.loadUrl(imageName);
}
}catch(Exception e)
{
Log.e("JSON Parser", "Unable to connect" + e.toString());
}
}
如果我通过DDMS传递位置,则会出现 NetworkOnMainThread 异常等错误。 请帮我,我卡住了b / w位置和json。
答案 0 :(得分:0)
您需要在单独的线程中进行网络操作(HTTPGet
)。使用Async Task效果最佳。
修改强>
例如,添加此内部类:
class MyTask extends AsyncTask<Double, Void, Void>
{
MyCallback callback;
public MyTask(Callback callback)
{
this.callback = callback;
}
@Override
public Void doInBackground(Double... coordinates)
{
double plong = coordinates[0];
double plat = coordinates[1];
//...Complete task
return null;
}
@Override
public void onPostExecute()
{
callback.go();
}
}
public interface Callback
{
//override to handle actions after task completes
public void go();
}
答案 1 :(得分:0)
你需要使用AsyncTask,因为你不能在主线程(进程)中使用网络进程,搜索异步任务