运行时异常在后台Android中执行

时间:2013-12-03 11:48:52

标签: android exception runtime

我正在做一个通过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();


}

0 个答案:

没有答案