我正在做一个通过RabbitMQ队列与OpenStack服务器连接的Android应用程序。
请检查代码并告诉我错误在哪里。
以下是代码:
package com.example.pfc;
import server.MonitoringProxy;
import server.MonitoringServices;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Vibrator;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class Principal extends Activity {
private TextView TextoOpciones;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
es.uv.dinf.network.NetworkUtils.ping("www.uv.es");
TextoOpciones = (TextView) findViewById(R.id.TextoOpciones);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_principal, menu);
return true;
}
public void Atras(View view){
finish();
}
public void ListaClientes(View view){
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(300);
SendClientes send = new SendClientes();
send.execute("clientes");
}
public void ListaMaquinas(View view){
//SendMaquinas send = new SendMaquinas();
//send.execute("servidores");
}
/*
*
* Clase SendClientes, pide el listado de clientes activos y lanza
* la activity correspondiente para mostrar los clientes activos.
*
*
*/
private class SendClientes extends AsyncTask <String,Void,Void> {
//res
protected Void doInBackground(String... p) {
//MonitoringServices servicios;
//Bundle recogerDatos = getIntent().getExtras();
String ip = "192.168.1.40"; // PONER IP DE LA MAQUINA DONDE ESTA RABBIT
String user = "guest"; // PONER EL USUARIO DE RABBIT
String pass = "guest";// PONER EL PASSWORD DE RABBIT
MonitoringProxy mp = new MonitoringProxy(ip,user,pass);
// Obtenemos un proxy (similar al stub de RMI)
MonitoringServices services = mp.getProxy();
// TextoOpciones.setText(services.ListaClientes());
// Ahora lo usamos como si fuese local
//String respuesta = services.ListaClientes().toString();
//TextoOpciones.setText(respuesta);
return null;
}
//Capturamos la respuesta en el posexecute
protected void onPostExecute(String respuesta) {
//Lanzamos el intent a la actividad de usuarios, poniendo en el intent la respuesta del servidor.
Intent intent = new Intent(Principal.this.getApplicationContext(), Activity_Usuarios.class);
intent.putExtra(respuesta, "listadeusuarios");
startActivity(intent);
}
}
/*
*
* Clase Sendmaquinas, pide al servidor el listado de maquinas virtuales que hay ejecutandose, y
* lanza la actividad correspondiente para mostrar el listado.
*
*/
/*public class SendMaquinas extends AsyncTask <String,Void,Void> {
protected Void doInBackground(String... p) {
Bundle recogerDatos = getIntent().getExtras();
String ip = "84.126.224.106"; // PONER IP DE LA MAQUINA DONDE ESTA RABBIT
String user = recogerDatos.getString("Usuario"); // PONER EL USUARIO DE RABBIT
String pass = recogerDatos.getString("Password");; // PONER EL PASSWORD DE RABBIT
MonitoringProxy mp = new MonitoringProxy(ip,user,pass);
// Obtenemos un proxy (similar al stub de RMI)
MonitoringServices services = mp.getProxy();
// Ahora lo usamos como si fuese local
System.out.println(services.ListaServidores());
String respuesta = services.ListaServidores().toString();
return null;
}*/
//Capturamos la respuesta en el posexecute
protected void onPostExecute(String respuesta) {
//Lanzamos el intent a la actividad de usuarios, poniendo en el intent la respuesta del servidor.
Intent intent = new Intent(getApplication(), Activity_Maquinas.class);
intent.putExtra(respuesta, "listademaquinas");
startActivity(intent);
}
}
//}
这是catlog:
12-03 12:40:16.769: E/AndroidRuntime(15001): FATAL EXCEPTION: AsyncTask #3
12-03 12:40:16.769: E/AndroidRuntime(15001): java.lang.RuntimeException: An error occured while executing doInBackground()
12-03 12:40:16.769: E/AndroidRuntime(15001): at android.os.AsyncTask$3.done(AsyncTask.java:299)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
12-03 12:40:16.769: E/AndroidRuntime(15001): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.lang.Thread.run(Thread.java:838)
12-03 12:40:16.769: E/AndroidRuntime(15001): Caused by: java.lang.VerifyError: com/rabbitmq/tools/json/JSONWriter
12-03 12:40:16.769: E/AndroidRuntime(15001): at com.rabbitmq.tools.jsonrpc.JsonRpcClient.call(JsonRpcClient.java:114)
12-03 12:40:16.769: E/AndroidRuntime(15001): at com.rabbitmq.tools.jsonrpc.JsonRpcClient.retrieveServiceDescription(JsonRpcClient.java:224)
12-03 12:40:16.769: E/AndroidRuntime(15001): at com.rabbitmq.tools.jsonrpc.JsonRpcClient.<init>(JsonRpcClient.java:71)
12-03 12:40:16.769: E/AndroidRuntime(15001): at server.MonitoringProxy.<init>(MonitoringProxy.java:27)
12-03 12:40:16.769: E/AndroidRuntime(15001): at com.example.pfc.Principal$SendClientes.doInBackground(Principal.java:81)
12-03 12:40:16.769: E/AndroidRuntime(15001): at com.example.pfc.Principal$SendClientes.doInBackground(Principal.java:1)
12-03 12:40:16.769: E/AndroidRuntime(15001): at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-03 12:40:16.769: E/AndroidRuntime(15001): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-03 12:40:16.769: E/AndroidRuntime(15001): ... 4 more
如果您需要更多信息,请问我,我会编辑。
谢谢
编辑1(监控代理):
package server;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.tools.jsonrpc.JsonRpcClient;
public class MonitoringProxy {
private MonitoringServices service = null;
private static final String QUEUE = "monitoring_queue";
private static final int RPC_TIMEOUT = 2000;
public MonitoringProxy(String host, String user, String pass) {
ConnectionFactory factory;
Connection connection;
Channel channel = null;
try {
factory = new ConnectionFactory();
factory.setUsername(user);
factory.setPassword(pass);
factory.setHost(host);
connection = factory.newConnection();
channel = connection.createChannel();
JsonRpcClient client = new JsonRpcClient(channel, "", QUEUE,
RPC_TIMEOUT);
// JsonRpcClient client = new JsonRpcClient(channel,
// "monitoring_fanout", "#");
service = (MonitoringServices) client
.createProxy(MonitoringServices.class);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public MonitoringServices getProxy() {
return service;
}
}
Monitoring Services是一个界面:
package server;
public interface MonitoringServices {
public String ListaServidores();
public String ListaClientes();
}