求高手!!androidstudio写的Handler后面出错了

github_22522617 2015-05-14 10:41:40
package com.example.my.locationtest;

import android.app.Activity;
import android.content.Context;
import android.content.Entity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.net.HttpCookie;
import java.util.List;
import java.util.logging.Handler;
import java.util.logging.LogRecord;


public class MainActivity extends Activity {
private TextView positionView;
private LocationManager locationManager;
private String provider;
public static final int SHOW_LOCATION = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
positionView = (TextView) findViewById(R.id.position);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
List<String> providerList = locationManager.getProviders(true);
if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
} else if (providerList.contains(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;
} else {
Toast.makeText(this, "no location to use", Toast.LENGTH_SHORT).show();
return;
}
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
showLocation(location);
}
locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);
}

protected void onDestroy() {
super.onDestroy();
if (locationManager != null) {
locationManager.removeUpdates(locationListener);
}
}

LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
showLocation(location);
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}
};

private void showLocation(final Location location) {
new Thread(new Runnable() {
@Override
public void run() {
try {
StringBuilder url = new StringBuilder();
url.append("http://maps.googleapis.com/maps/api/geocode/json?latlng=");
url.append(location.getLatitude());
url.append(location.getLongitude());
url.append("&sensor=false");
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url.toString());
httpGet.addHeader("Accept-Language", "zh-CN");
HttpResponse httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity, "UTF-8");
JSONObject jsonObject = new JSONObject(response);
JSONArray resultArray = jsonObject.getJSONArray("result");
if (resultArray.length() > 0) {
JSONObject subObject = resultArray.getJSONObject(0);
String address = subObject.getString("formatted_address");
Message message = new Message();
message.what = SHOW_LOCATION;
message.obj = address;
handler.sendMessage(Message);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}

Handler handler = new Handler() {
@Override
public void close() {

}

@Override
public void flush() {

}

@Override
public void publish(LogRecord logRecord) {

}
};
Handler handler = new Handler() {

public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_LOCATION:
String currentPostion = (String) msg.obj;
positionView.setText(currentPostion);
break;
default:
break;
}
}
};


}


这是完整代码,handler.没有sendmessage(),不知道怎么回事
...全文
1244 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinxuetao 2017-03-24
  • 打赏
  • 举报
回复
感谢,帮大忙了
时代逆子 2016-05-09
  • 打赏
  • 举报
回复
确实是os这个包。。。。
wendwen 2016-04-15
  • 打赏
  • 举报
回复
import android.os.Handler; 要用这个,删除另一个自动导入的包
VictorJWP 2015-10-05
  • 打赏
  • 举报
回复
小伙子估计你是导错包了,我也有类似的情况,导的应该是os那个包
xiaoshu666 2015-08-26
  • 打赏
  • 举报
回复
我的怎么不让我选择啊,直接就给加了。import java.util.logging.Handler;这个包。怎么切换呢
云顶无境 2015-07-03
  • 打赏
  • 举报
回复
引用 12 楼 jycboy 的回复:
楼主你多能了个Handler吧。
Handler handler = new Handler() {
        @Override
        public void close() {
 
        }
 
        @Override
        public void flush() {
 
        }
 
        @Override
        public void publish(LogRecord logRecord) {
 
        }
    };
这个Handler应该不是你要用的,他是android.util.。。.Hanlder
 Handler handler = new Handler() {
 
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SHOW_LOCATION:
                    String currentPostion = (String) msg.obj;
                    positionView.setText(currentPostion);
                    break;
                default:
                    break;
            }
        }
    };
这个Handler才是你想用的,也就是android.os包中的。 另外想详细了解Handler,Message可以去看我的博客:http://blog.csdn.net/jycboy/article/details/46445677
非常感谢,就是引用包错误了。我也刚碰到这个问题,应该是没留意AS提示多个import选择,楼主应该也是这个问题,就是handler.后面AS补全没有sendMessage()的问题。把之前import的那个java包删掉,AS会提示多个选择,重新选择android.os包就可以出来了。
超超boy 2015-06-26
  • 打赏
  • 举报
回复
楼主你多能了个Handler吧。
Handler handler = new Handler() {
        @Override
        public void close() {
 
        }
 
        @Override
        public void flush() {
 
        }
 
        @Override
        public void publish(LogRecord logRecord) {
 
        }
    };
这个Handler应该不是你要用的,他是android.util.。。.Hanlder
 Handler handler = new Handler() {
 
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SHOW_LOCATION:
                    String currentPostion = (String) msg.obj;
                    positionView.setText(currentPostion);
                    break;
                default:
                    break;
            }
        }
    };
这个Handler才是你想用的,也就是android.os包中的。 另外想详细了解Handler,Message可以去看我的博客:http://blog.csdn.net/jycboy/article/details/46445677
github_22522617 2015-05-15
  • 打赏
  • 举报
回复
没明白啊,能说详细点吗
黄小楼 2015-05-14
  • 打赏
  • 举报
回复
Message message = new Message(); message.what = SHOW_LOCATION; message.obj = address; handler.sendMessage(Message); 大小写啊。骚年!
github_22522617 2015-05-14
  • 打赏
  • 举报
回复
这是截图
github_22522617 2015-05-14
  • 打赏
  • 举报
回复
handler.sendEmptyMessage()后面sendEmptyMessage是红色的
janloven 2015-05-14
  • 打赏
  • 举报
回复
handler.sendEmptyMessage()
github_22522617 2015-05-14
  • 打赏
  • 举报
回复
  Handler handler = new Handler() {
        @Override
        public void close() {

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord logRecord) {

        }
    };
    Handler handler = new Handler() {

        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SHOW_LOCATION:
                    String currentPostion = (String) msg.obj;
                    positionView.setText(currentPostion);
                    break;
                default:
                    break;
            }
        }
    };
是这一段有问题,new handler之后出来 Handler handler = new Handler() {
  @Override
        public void close() {

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord logRecord) {

        }
    };
我的public void handleMessage(Message msg) { switch (msg.what) { case SHOW_LOCATION: String currentPostion = (String) msg.obj; positionView.setText(currentPostion); break; default: break; } }是不是要加在后面,我是新手不懂啊
Birds2018 2015-05-14
  • 打赏
  • 举报
回复
//不知道你的错误是那个?

public void onLocationChanged(Location location) {
            showLocation(location);//这个地方可能导致多次执行,这样的话可能有多个线程创建,你需要添加一个标识位,如果线程执行完成了,再重新执行这个方法。
 }
没有执行 可能是 if (httpResponse.getStatusLine().getStatusCode() == 200) 这个不成立,你看看异常是否有打印
windfury_plus 2015-05-14
  • 打赏
  • 举报
回复
引用 9 楼 github_22522617 的回复:
这里面没有?我用的sdk21基于5.0的
handler.sendMessage(message) 你开始message写成的大写了。 handler.sendEmptyMessage方法不适用于你的代码,因为你要传一个参数。
github_22522617 2015-05-14
  • 打赏
  • 举报
回复
这里面没有?我用的sdk21基于5.0的
github_22522617 2015-05-14
  • 打赏
  • 举报
回复
很奇怪啊,看视频里没错,是不是android studio不一样还是sdk的版本不一样
janloven 2015-05-14
  • 打赏
  • 举报
回复
引用 4 楼 github_22522617 的回复:
handler.sendEmptyMessage()后面sendEmptyMessage是红色的
你把参数改为SHOW_LOCATION

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧