我创建了一个名为SOAPHeaderHandler的GenericHandler扩展.我将log4j语句放在处理程序中,可以看到正在构建的构造函数.但是,当我生成SOAP消息时,我没有看到与handleRequest方法相关的消息.我在存根中注册了Handler,如下所示:
if (service == null) {
super.service = new com.ibm.ws.webservices.engine.client.Service();
}
else {
super.service = service;
}
List handlerInfoList = new ArrayList();
QName[] headersArr = null;
HandlerInfo handlerInfo = new HandlerInfo(com.xxxxxx.hdhp.business.debitcard.cardservices.CardServiceSOAPHeaderHandler.class,
null, headersArr);
handlerInfoList.add(handlerInfo);
service.getHandlerRegistry().setHandlerChain(new QName("MetavanteDebitCard"), handlerInfoList);
Run Code Online (Sandbox Code Playgroud)
处理程序是:
public class AccountManagementSOAPHeaderHandler extends GenericHandler {
private static Logger logger = Logger.getLogger (AccountManagementSOAPHeaderHandler.class);
private HandlerInfo handlerInfo = null;
public AccountManagementSOAPHeaderHandler () {
logger.info("Constructing AccountManagementSOAPHeaderHandler");
}
/* (non-Javadoc)
* @see javax.xml.rpc.handler.GenericHandler#getHeaders()
*/
public QName[] getHeaders() {
logger.info("calling getHeaders()");
return null;
}
public boolean …Run Code Online (Sandbox Code Playgroud) 我尝试在类中建立多个连接并更新主屏幕中的多个进度条.
但我尝试在android中使用线程时出现以下错误:代码:05-06 13:13:11.092:错误/ ConnectionManager(22854):错误:无法在未调用Looper.prepare的线程内创建处理程序( )
这是我的主要Activity中的一小部分代码
public class Act_Main extends ListActivity
{
private ConnectionManager cm;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Set up the window layout
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);
}
public void startConnection()
{
//open DB connection
db = new DBAdapter(getApplicationContext());
db.open();
cm = new ConnectionManager(handler, db);
showDialog(DIALOG_PROGRESS_LOGIN);
}
@Override
public void onStart()
{
super.onStart();
startConnection();
}
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case DIALOG_PROGRESS_LOGIN:
progressDialog = new ProgressDialog(Act_Main.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Connecting.\nPlease wait...");
progressThreadLogin = new ProgressThreadLogin(); …Run Code Online (Sandbox Code Playgroud) 嗨,我有一些关于Looper.prepare()和AsyncTasks的问题.
在我的应用程序中,我有一个启动其他AsyncTasks的AsyncTask.我有2个AsyncTasks搜索和GetImage.GetImage任务在搜索任务中执行多次.它工作正常.
但是最近我实现了图像缓存,如下所述:http: //android-developers.blogspot.com/2010/07/multithreading-for-performance.html
实施此操作后,我开始出现间歇性崩溃
02-09 17:40:43.334:W/System.err(25652):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
我不知道应该在哪里打电话给prepare().这是代码的大致轮廓
Search extends AsyncTask{
@Override
protected void doInBackground(){
ArrayList<Object> objs = getDataFromServer();
ArrayList<View> views = new ArrayList<View>();
for(Object o: objs){
//multiple AsyncTasks may be started while creating views
views.add(createView(o));
}
for(View v: views){
publishProgess(v);
}
}
}
public View createView(Object o){
//create a view
ImageView iv = .....;
ImageDownloader.getInstance().download(url,iv);
}
Run Code Online (Sandbox Code Playgroud)
ImageDownloader可以在上面的链接中看到,它是另一个下载图像的AsyncTask.它还包含一个Handler和Runnable,用于清除每次下载时重置的缓存.我确实对ImageDownloader进行了一次更改,我将其设为单例.
public static ImageDownloader getInstance(){
if(instance == null){
//tried adding it here but it results in occasional
//cannot create more than …Run Code Online (Sandbox Code Playgroud) 这是关于加载的问题.我的应用程序应该等待3秒然后绘制路径.现在,加载消息框在3秒内出现,但应用程序不会等待3秒并立即绘制.我的编码有问题吗?
非常感谢!!
public void drawpath(){
// first to do some checking
if (sourceLat.equals("22.3366467") && destinationLat.equals("35.68449"))
ShowMsgDialog("Please enter the starting point and destination");
else if (sourceLat.equals("22.3366467") )
ShowMsgDialog("Please enter the starting point by touch");
else if (destinationLat.equals("35.68449") )
ShowMsgDialog("Please enter the destination by touch");
else if (pairs != null ){
// go to loading function
loading();
// Start to draw the path
String[] lngLat = pairs[0].split(",");
GeoPoint startGP = new GeoPoint((int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0]) * 1E6));
mc = mapView.getController(); …Run Code Online (Sandbox Code Playgroud) 我在GAE上编写可以解析和存储传入邮件的应用程序.我准备了一些简单的电子邮件解析代码,但是当我尝试模拟从本地开发服务器上的admin dev控制台接收的电子邮件时出现问题:
/develop/google_appengine/google/appengine/runtime/wsgi.py", line 193, in Handle
result = handler(self._environ, self._StartResponse)
TypeError: 'module' object is not callable
INFO 2012-05-08 16:14:43,516 dev_appserver.py:2891] "POST /_ah/mail/test@example.com HTTP/1.1" 500 -
Run Code Online (Sandbox Code Playgroud)
app.yaml中:
application: mailhandler
version: 1
runtime: python27
api_version: 1
threadsafe: true
inbound_services:
- mail
handlers:
- url: /_ah/mail/.+
script: email_handler
login: admin
Run Code Online (Sandbox Code Playgroud)
email_handler.py:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import mail
from models import DataStoreManager
class LogSenderHandler(InboundMailHandler):
# Receiving new mail message and parsing it
def …Run Code Online (Sandbox Code Playgroud) 我正在使用GWT/JAVA进行开发.我有以下问题:我想从已添加到Label的Label中删除ClickHandler.
我尝试了removeClickListener(),但它已被弃用,所以我找不到另一个解决方案来执行此操作.
如果有人找到解决方案,请告诉我..
好的,我是android的新手,我正在尝试创建一个通过蓝牙与arduino接口的应用程序。我已经看过示例BluetoothChat,并看过它如何使用Handler在“服务”,由它产生的线程和MainActivity之间进行通信。我的问题是我有多个活动需要使用蓝牙服务。对于每个活动,我都有一个像这样的处理程序:
mHandler = new Handler(){
@Override
public void handleMessage(Message message) {
switch (message.what){
case BtService.CHANGE_STATE:
if (message.arg1 == BtService.STATE_CONNECTING){
Intent i = new Intent (MainActivity.this,ConnectedActivity.class);
startActivity(i);
}
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
在服务构造函数中,我得到了以下信息:
private BtService(){
btm = BluetoothAdapter.getDefaultAdapter();
mHandler= new Handler(Looper.getMainLooper());
}
Run Code Online (Sandbox Code Playgroud)
当我需要发送消息时,请执行以下操作:
private synchronized void setState(int state){
mHandler.obtainMessage(CHANGE_STATE, state, -1).sendToTarget();
mState = state;
}
Run Code Online (Sandbox Code Playgroud)
但是其他各种处理程序中均未接收到消息。在此声明“特定线程的所有Handler对象都接收相同的消息”。所以我不明白这个问题。我是否需要在每次启动活动时将在该活动中声明的处理程序传递给服务以使其接收消息?这似乎可行,但对我而言似乎不是一个好习惯。
我对某事感到困惑.基本上,我正在产生一个线程,另外我想在该线程中运行一个消息循环.我基本上是在执行以下操作:这是Android Looper类API文档中的直接内容.但是,我的应用程序总是卡在Looper.loop()中,永远不会从它返回.我目前的解决方法是在主线程(或UI线程)中创建一个处理程序,然后将消息发送到该线程.但是,为了清洁并且只是让我的应用程序的流程有意义,我更愿意将我的消息发送到我正在创建的线程.
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
// The rest of the code below is a control loop
}
}
Run Code Online (Sandbox Code Playgroud)
关于什么可能导致Looper.loop()永远不会返回的任何想法?
我试图将OnClientMessage课堂Client上的一个活动转发Server到我的图书馆之外.
Client.cs
public class Client
{
private TcpClient tcpClient;
private StreamWriter writer;
private Boolean alive = true;
private int id;
public delegate void OnClientMessageHandler(Client sender, String message);
public delegate void OnClientDisconnectHandler(Client sender);
public event OnClientMessageHandler OnClientMessage;
public event OnClientDisconnectHandler OnClientDisconnect;
public Client(TcpClient tcpClient, int id)
{
this.tcpClient = tcpClient;
this.id = id;
writer = new StreamWriter(tcpClient.GetStream());
new Thread(() =>
{
Listen(new StreamReader(tcpClient.GetStream()));
}).Start();
}
void Listen(StreamReader reader)
{
while (tcpClient.GetStream().DataAvailable && alive)
{
OnClientMessage(this, …Run Code Online (Sandbox Code Playgroud) 我启动了一个runnnable但没有将它分配给变量.我怎么阻止它?我知道它是removeCallbacksAndMessages()方法的组合,但由于我创建了一个匿名的runnable,我不知道传入此方法的参数:
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
h = new Handler();
final int delay = 1000; //milliseconds
h.postDelayed(new Runnable() {
public void run() {
mUpdateRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int mNumberOfPollsForCurrentDay = (int) dataSnapshot.getChildrenCount();
Random r = new Random();
int randomPollInRangeOfCurrentDayNumberOfPolls = r.nextInt((mNumberOfPollsForCurrentDay + 1) - 1) + 1;
int numberOfPollAnswersAtRandomNumber = (int) dataSnapshot.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).getChildrenCount();
Random rr = new Random();
int randomAnswerBasedFromRandomPollAnswerChoices = rr.nextInt((numberOfPollAnswersAtRandomNumber + 1) - 1) + 1;
mUpdateRef.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).child(String.valueOf(randomAnswerBasedFromRandomPollAnswerChoices)).child("Vote_Count").runTransaction(new Transaction.Handler() {
@Override …Run Code Online (Sandbox Code Playgroud)