Autore Topic: FATAL exeption:main  (Letto 921 volte)

Offline Spagna

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy
  • Sistema operativo:
    windows 7
FATAL exeption:main
« il: 09 Dicembre 2012, 23:30:58 CET »
0
Buona sera a tutti,

Ho una aplicazione di Login+Android+PHP+MySql
Le mando la petizione e ritorno il valore coretto arriva un punto dove mi da errore e non so come risolverlo:
LOG.cat:
Codice: [Seleziona]
12-09 21:54:51.163: E/getpostresponse(331):  result= [{"logstatus":"1"}]
12-09 21:54:52.114: E/loginstatus(331): logstatus= 1
12-09 21:54:52.114: E/loginstatus(331): valido
12-09 21:54:52.122: E/onPostExecute=(331): ok
12-09 21:54:52.163: E/AndroidRuntime(331): FATAL EXCEPTION: main
12-09 21:54:52.163: E/AndroidRuntime(331): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.midominio.carlos/com.midominio.carlos.HiScreen}; have you declared this activity in your AndroidManifest.xml?
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.app.Activity.startActivityForResult(Activity.java:2827)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.app.Activity.startActivity(Activity.java:2933)
12-09 21:54:52.163: E/AndroidRuntime(331):         at com.midominio.carlos.Principal$asynclogin.onPostExecute(Principal.java:204)
12-09 21:54:52.163: E/AndroidRuntime(331):         at com.midominio.carlos.Principal$asynclogin.onPostExecute(Principal.java:1)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.os.AsyncTask.finish(AsyncTask.java:417)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.os.Looper.loop(Looper.java:123)
12-09 21:54:52.163: E/AndroidRuntime(331):         at android.app.ActivityThread.main(ActivityThread.java:3683)
12-09 21:54:52.163: E/AndroidRuntime(331):         at java.lang.reflect.Method.invokeNative(Native Method)
12-09 21:54:52.163: E/AndroidRuntime(331):         at java.lang.reflect.Method.invoke(Method.java:507)
12-09 21:54:52.163: E/AndroidRuntime(331):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-09 21:54:52.163: E/AndroidRuntime(331):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-09 21:54:52.163: E/AndroidRuntime(331):         at dalvik.system.NativeStart.main(Native Method)
HiScreen.java
Codice: [Seleziona]

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
/*PANTALLA DE BIENVENIDA*/
public class HiScreen extends Activity {
        String user;
        TextView txt_usr, logoff;
         public void onCreate(Bundle savedInstanceState) {
                 
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_principal);
           
                txt_usr= (TextView) findViewById(R.id.edituser);
            logoff= (TextView) findViewById(R.id.edit_password);         
           
            Bundle extras = getIntent().getExtras();
            //Obtenemos datos enviados en el intent.
            if (extras != null) {
                    user  = extras.getString("user");//usuario
            }else{
                    user="error";
                    }
           
            txt_usr.setText(user);//cambiamos texto al nombre del usuario logueado
                                           
                logoff.setOnClickListener(new View.OnClickListener(){
                        
                         public void onClick(View view){
                    //'cerrar  sesion' nos regresa a la ventana anterior.     
                                 finish();
                                                                                         }
                         });                       
         }
         
//Definimos que para cuando se presione la tecla BACK no volvamos para atras           
         @Override
         public boolean onKeyDown(int keyCode, KeyEvent event)  {
             if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
                 // no hacemos nada.
                 return true;
             }

             return super.onKeyDown(keyCode, event);
         }
       
       
}

Httppostaux.java
Codice: [Seleziona]

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import android.util.Log;
/*CLASE AUXILIAR PARA EL ENVIO DE PETICIONES A NUESTRO SISTEMA
 * Y MANEJO DE RESPUESTA.*/
public class Httppostaux{
   
          InputStream is = null;
          String result = "";
         
          public JSONArray getserverdata(ArrayList<NameValuePair> parameters, String urlwebserver ){
       
                  //conecta via http y envia un post.
          httppostconnect(parameters,urlwebserver);
                 
          if (is!=null){//si obtuvo una respuesta
         
                  getpostresponse();
                 
                 return getjsonarray();
         
          }else{
                 
              return null;

          }
                 
          }
         
           
          //peticion HTTP
    private void httppostconnect(ArrayList<NameValuePair> parametros, String urlwebserver){
          
          //
          try{
                  HttpClient httpclient = new DefaultHttpClient();
                  HttpPost httppost = new HttpPost(urlwebserver);
                  httppost.setEntity(new UrlEncodedFormEntity(parametros));
                  //ejecuto peticion enviando datos por POST
                  HttpResponse response = httpclient.execute(httppost);
                  HttpEntity entity = response.getEntity();
                   is = entity.getContent();
                   
          }catch(Exception e){
                  Log.e("log_tag", "Error in http connection "+e.toString());
          }
         
  }
 
  public void getpostresponse(){
 
          //Convierte respuesta a String
          try{
                  BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                  StringBuilder sb = new StringBuilder();
                  String line = null;
                  while ((line = reader.readLine()) != null) {
                          sb.append(line + "\n");
                  }
                  is.close();
           
                  result=sb.toString();
                  Log.e("getpostresponse"," result= "+sb.toString());
          }catch(Exception e){
                  Log.e("log_tag", "Error converting result "+e.toString());
          }
 }
 
  public JSONArray getjsonarray(){
          //parse json data
          try{
          JSONArray jArray = new JSONArray(result);
         
          return jArray;
          }
          catch(JSONException e){
                  Log.e("log_tag", "Error parsing data "+e.toString());
                  return null;
          }
               
  }
         
         
  }       
 
Principal.java

Codice: [Seleziona]
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.AsyncTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.os.SystemClock;
import android.os.Vibrator;
import android.util.Log;
import android.widget.Toast;

public class Principal extends Activity {
         EditText et1,wregis;
         EditText user;
         EditText pass;
         TextView error;
         Button okform;
         Button registra;
         Button wsalir;
         Button wcancel;
         Httppostaux post;
            //
            String IP_Server="www.midominio.es";//IP DE NUESTRO PC
            String URL_connect="http://"+IP_Server+"/carlos/file.php";//ruta en donde estan nuestros archivos
         
            boolean result_back;
            private ProgressDialog pDialog;

    @SuppressLint("NewApi")
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_principal);
        error=(TextView)findViewById(R.id.error);
        et1=(EditText)findViewById(R.id.edituser);
        user= (EditText) findViewById(R.id.edituser);
        pass= (EditText) findViewById(R.id.edit_password);
        post=new Httppostaux();
       
        okform=(Button)findViewById(R.id.login);
        okform.setOnClickListener(new View.OnClickListener() {
               
                   public void onClick(View view){
                        
                        //Extreamos datos de los EditText
                        String usuario=user.getText().toString();
                        String passw=pass.getText().toString();
                       
                        //verificamos si estan en blanco
                        if( checklogindata( usuario , passw )==true){

                                //si pasamos esa validacion ejecutamos el asynctask pasando el usuario y clave como parametros
                               
                        new asynclogin().execute(usuario,passw);                                       
                                                     
                       
                        }else{
                                //si detecto un error en la primera validacion vibrar y mostrar un Toast con un mensaje de error.
                                err_login();
                        }
                       
                }
                });
       
       
               
    }
   
    //vibra y muestra un Toast
    public void err_login(){
            /*Vibrator vibrator =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(200);*/
            Toast toast1 = Toast.makeText(getApplicationContext(),"Error:Nombre de usuario o password incorrectos", Toast.LENGTH_SHORT);
             toast1.show();           
    }
   
    /*Valida el estado del logueo solamente necesita como parametros el usuario y passw*/
    public boolean loginstatus(String username ,String password ) {
            int logstatus=-1;
           
            /*Creamos un ArrayList del tipo nombre valor para agregar los datos recibidos por los parametros anteriores
             * y enviarlo mediante POST a nuestro sistema para relizar la validacion*/
            ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();
                    
                                    postparameters2send.add(new BasicNameValuePair("usuario",username));
                                    postparameters2send.add(new BasicNameValuePair("password",password));

                   //realizamos una peticion y como respuesta obtenes un array JSON
                      JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);

                      /*como estamos trabajando de manera local el ida y vuelta sera casi inmediato
                       * para darle un poco realismo decimos que el proceso se pare por unos segundos para poder
                       * observar el progressdialog
                       * la podemos eliminar si queremos
                       */
                    SystemClock.sleep(950);
                                   
                    //si lo que obtuvimos no es null
                            if (jdata!=null && jdata.length() > 0){

                                    JSONObject json_data; //creamos un objeto JSON
                                        try {
                                                json_data = jdata.getJSONObject(0); //leemos el primer segmento en nuestro caso el unico
                                                 logstatus=json_data.getInt("logstatus");//accedemos al valor
                                                 Log.e("loginstatus","logstatus= "+logstatus);//muestro por log que obtuvimos
                                        } catch (JSONException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }                           
                             
                                        //validamos el valor obtenido
                                     if (logstatus==0){// [{"logstatus":"0"}]
                                             Log.e("loginstatus ", "invalido");
                                             return false;
                                     }
                                     else{// [{"logstatus":"1"}]
                                             Log.e("loginstatus ", "valido");
                                             return true;
                                     }
                                     
                          }else{        //json obtenido invalido verificar parte WEB.
                                             Log.e("JSON  ", "ERROR");
                                            return false;
                          }
           
    }
   
    //validamos si no hay ningun campo en blanco
    public boolean checklogindata(String username ,String password ){
           
    if         (username.equals("") || password.equals("")){
            Log.e("Login ui", "checklogindata user or pass error");
    return false;
   
    }else{
           
            return true;
    }
   
}
   
    /*                CLASE ASYNCTASK
     *
     * usaremos esta para poder mostrar el dialogo de progreso mientras enviamos y obtenemos los datos
     * podria hacerse lo mismo sin usar esto pero si el tiempo de respuesta es demasiado lo que podria ocurrir   
     * si la conexion es lenta o el servidor tarda en responder la aplicacion sera inestable.
     * ademas observariamos el mensaje de que la app no responde.     
     */
       
        class asynclogin extends AsyncTask< String, String, String > {
                 
                String user,pass;
            protected void onPreExecute() {
                    //para el progress dialog
                pDialog = new ProgressDialog(Principal.this);
                pDialog.setMessage("Autenticando....");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }
     
                    protected String doInBackground(String... params) {
                            //obtnemos usr y pass
                            user=params[0];
                            pass=params[1];
               
                            //enviamos y recibimos y analizamos los datos en segundo plano.
                        if (loginstatus(user,pass)==true){                                       
                                return "ok"; //login valido
                        }else{                   
                                return "err"; //login invalido                                
                        }
                   
                    }
           
                    /*Una vez terminado doInBackground segun lo que halla ocurrido
                    pasamos a la sig. activity
                    o mostramos error*/
            protected void onPostExecute(String result) {

               pDialog.dismiss();//ocultamos progess dialog.
               Log.e("onPostExecute=",""+result);
               
               if (result.equals("ok")){

                                    Intent i=new Intent(Principal.this, HiScreen.class);
                                    i.putExtra("user",user);
                                    startActivity(i);
                                   
                }else{
                        err_login();
                }
               
                                                                                            }
                   
            }
   
   
   
   

   
}

Per piacere dove sbaglio?
Una mano per piacere
Ub saluto

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:FATAL exeption:main
« Risposta #1 il: 09 Dicembre 2012, 23:38:39 CET »
0
non hai letto bene il logcat...
Citazione
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.midominio.carlos/com.midominio.carlos.HiScreen}; have you declared this activity in your AndroidManifest.xml?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Spagna

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy
  • Sistema operativo:
    windows 7
Re:FATAL exeption:main
« Risposta #2 il: 10 Dicembre 2012, 00:17:41 CET »
0
Scusa hai ragione
non avevo dichiarato la Activity scusame se ti ho fatto perdere il tempo

Cuando uno é stanco deve andare a dormire

Un saluto e grazie