Autore Topic: org.json.JSONObject cannot be converted to JSONArray  (Letto 1271 volte)

Offline ClaudGin

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    XPERIA Z
  • Sistema operativo:
    windows
org.json.JSONObject cannot be converted to JSONArray
« il: 11 Dicembre 2013, 20:22:59 CET »
0
Buena será a tutti ho un problema cuando  autentico un form
non mi funciona dove sbaglio?.
WEB SERVER:
PHP logos.php
Codice: [Seleziona]
header('Content-type: application/json');

  // PHP variable to store the host address
 $db_host  = "xxxxxxxxxxxxxxxxxx.com";
 // PHP variable to store the username
 $db_uid  = "root";
 // PHP variable to store the password
 $db_pass = "yyyyyyyyy";
 // PHP variable to store the Database name 
 $db_name  = "vvvvv";

$v_usuario =  "64434";
$v_password = "1234";
//$v_usuario =  $_POST['strUser'];
//$v_password = $_POST['strPass'];

$con = mysql_connect($db_host,$db_uid,$db_pass); 
/*mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET NAMES utf8"); */
 
if( $con ) 

  mysql_select_db($db_name); 
  $res = mysql_query("SELECT user.*, regalos.* FROM user
  INNER JOIN regalos ON (user.ID_barUser = regalos.ID_bar)
  WHERE user.Movil = '".$v_usuario."' AND user.Password = '".$v_password."' ") or die(mysql_error());;
  $tot= mysql_num_rows($res);
         
      $resultados['result'] = array();
      $datos["logstatus"] = 0;
if (mysql_num_rows($res) > 0) {
         
  while($row = mysql_fetch_array($res) ) {
         
          $datos = array();
          $datos ["logstatus"] = 1;
          $datos ["telefono"] = $row['Movil'];
      $datos ["usuarios"] = $row['Usuario'];
          $datos ["rango"] = $row['Rangoedad'];
          $datos ["gene"] = $row['Genero'];
          $datos ["barpub"] = $row['ID_barUser'];
          $datos ["iduser"] = $row['IDUser'];
          $datos ["correo"] = $row['Correo'];
          $datos ["titulo"] = $row['Titulo'];
          $datos ["regalo"] = $row['Descri'];
          $datos ["carpeta"] = $row['Carpeta'];
          $datos ["pass"] = $row['Password'];
          $datos ["movil"] = $row['Movil'];

  // push single product into final response array

                                                 
      array_push($resultados["result"], $datos);
          /*header('Content-type: application/json');*/
      print_r(json_encode($resultados));
  }
  } else {
        $resultados['result'] = array();
    // no products found
    $datos["logstatus"] = 0;
    // echo no users JSON
        array_push($resultados["result"], $datos);
    print_r(json_encode($resultados));
}
                                               
  mysql_free_result($res);
  mysql_close($con);
}
 
?>
JSON resltato:
Codice: [Seleziona]
{"result":[{"logstatus":1,"telefono":"644343310","usuarios":"batcla","rango":"53","gene":"generos","barpub":"1","iduser":"1","correo":"batcla@hotmail.es","titulo":"ProvaProvaProvaProvaProvaProva","regalo":"Una copa Mojito","carpeta":"","pass":"1234","movil":"644343310"}]}


MainActivity.java
Codice (Java): [Seleziona]
EditText et1,wregis;
         EditText correo = null;
         EditText pass = null;
         TextView error;
         Button okform;
         Button registra;
         Button wsalir;
         Button wcancel;
         
         String wtelefonos;
     String wnombre;
       
         String wgene = null;
         String wcorreo = null;
         String wbar = null;
         String wrango = null;
         String widuser = null;
         String wtitulo = null;
         String wregalo = null;
         String wcarpeta = null;
         String wpass = null;
         String wmovil = null;
         Httppostaux post;
           
            String IP_Server="www.yournight.es";//IP DE NUESTRO PC
            String URL_connect="http://"+IP_Server+"/night/loginNew.php";//ruta en donde estan nuestros archivos
         
            boolean result_back;
            private ProgressDialog pDialog;
            JSONArray jdata;
                JSONObject json_data; //creamos un objeto JSON

    @SuppressLint("NewApi")
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.mainini);
       
       
        /////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////

        correo= (EditText) findViewById(R.id.edituser);
        pass= (EditText) findViewById(R.id.edit_password);
       
        error=(TextView)findViewById(R.id.error);
        et1=(EditText)findViewById(R.id.edituser);
        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=correo.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();
                        }
                       
                }
                });
        registra=(Button)findViewById(R.id.registrar);
        registra.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                // Intent  wregis = new Intent(Main.this,NuevoUsuario.class);
                 Intent  wregis = new Intent(Main.this,Partner.class);
                            startActivity(wregis);
                            finish();
              }});
       
       
        wsalir=(Button)findViewById(R.id.salir);
        wsalir.setOnClickListener(new View.OnClickListener() {  
           
            @Override  
            public void onClick(View v) {  
                                    finish();
                      }});
       
       
               
    }
   
    //vibra y muestra un Toast
    public void err_login(){
        /*Vibrator vibrator =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(200);*/

        Intent i=new Intent(Main.this,LoginIncorecto.class);
                /*      i.putExtra("user",t_usuario.getText().toString());*/
                        startActivity(i);
                        finish();      
    }
   
    /*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));
                               
                   
                                         jdata=post.getserverdata(postparameters2send, URL_connect);
                                 
                   //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
                                                 json_data = jdata.getJSONObject(1); //leemos el primer segmento en nuestro caso el unico
                                                 wtelefonos=json_data.getString("telefono");//accedemos al valor
                                                 json_data = jdata.getJSONObject(2); //leemos el primer segmento en nuestro caso el unico
                                                 wnombre=json_data.getString("usuarios");//accedemos al valor
                                                 json_data = jdata.getJSONObject(3); //leemos el primer segmento en nuestro caso el unico
                                                 wrango=json_data.getString("rango");//accedemos al valor
                                                 json_data = jdata.getJSONObject(4); //leemos el primer segmento en nuestro caso el unico
                                                 wgene=json_data.getString("gene");//accedemos al valor
                                                 json_data = jdata.getJSONObject(5); //leemos el primer segmento en nuestro caso el unico
                                                 wbar=json_data.getString("barpub");//accedemos al valor
                                                 json_data = jdata.getJSONObject(6); //leemos el primer segmento en nuestro caso el unico
                                                 widuser=json_data.getString("iduser");//accedemos al valor
                                                 json_data = jdata.getJSONObject(7); //leemos el primer segmento en nuestro caso el unico
                                                 wcorreo=json_data.getString("correo");//accedemos al valor
                                                 json_data = jdata.getJSONObject(8); //leemos el primer segmento en nuestro caso el unico
                                                 wtitulo=json_data.getString("titulo");//accedemos al valor
                                                 json_data = jdata.getJSONObject(9); //leemos el primer segmento en nuestro caso el unico
                                                 wregalo=json_data.getString("regalo");//accedemos al valor
                                                 json_data = jdata.getJSONObject(10); //leemos el primer segmento en nuestro caso el unico
                                                 wcarpeta=json_data.getString("carpeta");//accedemos al valor
                                                 json_data = jdata.getJSONObject(11); //leemos el primer segmento en nuestro caso el unico
                                                 wpass=json_data.getString("pass");//accedemos al valor
                                                 json_data = jdata.getJSONObject(12); //leemos el primer segmento en nuestro caso el unico
                                                 wmovil=json_data.getString("movil");//accedemos al valor
                                               
                                                 
                                                /* Log.e("loginstatus","logstatus= "+wtitulo);//muestro por log que obtuvimos*/
                                                 //Log.i("tituloMain",wtitulo);//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.i("logstatus ", "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", "Control de Login 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(Main.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.i("onPostExecute=",""+result);
               
               if (result.equals("ok")){
                   //Log.i("onPostExecute=",""+result);
                   try
                   {
                    OutputStreamWriter archivo = new OutputStreamWriter(openFileOutput("notas.txt",Activity.MODE_PRIVATE));
                    archivo.write(wmovil+",");
                    archivo.write(wpass);
                    archivo.flush();
                    archivo.close();
                   }
                   catch (IOException ioe)
                   {
                   }
         
             
                                /*Intent i=new Intent(Main.this, Ofertas.class);
                                i.putExtra("correo",wcorreo);
                                i.putExtra("telefono",wtelefonos);
                                i.putExtra("usuario",wnombre);
                                i.putExtra("rango",wrango);
                                i.putExtra("genero",wgene);
                                i.putExtra("bar",wbar);
                                i.putExtra("iduser",widuser);
                                i.putExtra("titulo",wtitulo);
                                i.putExtra("regalo",wregalo);
                                i.putExtra("carpeta",wcarpeta);
                                startActivity(i);
                                Main.this.finish();*/

                               
                }else{
                        err_login();
                }                                                                               }
               
            }
   
   
        @Override
Httppostaux.java
Codice (Java): [Seleziona]
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.i("get post response  ::::",result);
        }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;
        }
               
  }
       
       
  }    
Error :
Codice: [Seleziona]
12-11 15:37:25.874: I/AndroidRuntime(324): NOTE: attach of thread 'Binder Thread #3' failed
12-11 15:37:26.754: I/ActivityManager(61): Displayed com.yournight.es/.Main: +980ms (total +30s134ms)
12-11 15:37:26.754: I/ActivityManager(61): Displayed com.android.launcher/com.android.launcher2.Launcher: +30s135ms
12-11 15:37:35.042: I/InputReader(61): Device reconfigured: id=0x0, name=qwerty2, display size is now 240x400
12-11 15:37:35.044: I/InputManager-Callbacks(61): No virtual keys found for device qwerty2.
12-11 15:37:35.514: I/ARMAssembler(61): generated scanline__00000077:03515104_00001004_00000000 [ 65 ipp] (85 ins) at [0x43bc9520:0x43bc9674] in 961550 ns
12-11 15:37:35.534: I/ARMAssembler(61): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x43bc9678:0x43bc9840] in 589848 ns
12-11 15:37:35.605: I/ARMAssembler(61): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x43bc9848:0x43bc9a00] in 508577 ns
12-11 15:37:37.445: W/KeyCharacterMap(332): No keyboard for id 0
12-11 15:37:37.445: W/KeyCharacterMap(332): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-11 15:37:43.194: D/dalvikvm(332): GC_EXTERNAL_ALLOC freed 198K, 52% free 2635K/5447K, external 493K/517K, paused 63ms
12-11 15:37:44.725: D/dalvikvm(332): GC_FOR_MALLOC freed 59K, 51% free 2741K/5575K, external 580K/1092K, paused 36ms
12-11 15:37:44.965: I/get post response  ::::(332): {"result":[{"logstatus":0}]}
12-11 15:37:44.965: E/log_tag(332): Error parsing data org.json.JSONException: Value {"result":[{"logstatus":0}]} of type org.json.JSONObject cannot be converted to JSONArray
12-11 15:37:44.975: E/JSON(332): ERROR
12-11 15:37:44.975: I/ActivityManager(61): Starting: Intent { cmp=com.yournight.es/.LoginIncorecto } from pid 332
Datemi una mano perpiacere.
Un saluto
Claudio

Offline Nicola_D

  • Moderatore
  • 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:org.json.JSONObject cannot be converted to JSONArray
« Risposta #1 il: 11 Dicembre 2013, 20:25:26 CET »
0
Stai prendendo la risposta che è un jsonobject e la usi come fosse un jsonarray,che è sbagliato

Inviato dal mio Nexus 4 utilizzando Tapatalk

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 ClaudGin

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    XPERIA Z
  • Sistema operativo:
    windows
Re:org.json.JSONObject cannot be converted to JSONArray
« Risposta #2 il: 11 Dicembre 2013, 20:46:09 CET »
0
Grazie per rispondermi
Modifico il file PHP?
Come posso modificarlo?

Un saludo


Post unito: 11 Dicembre 2013, 20:51:08 CET
Prima di chiedere aiuto avevo
il file PHP fatto in questo modo
Codice: [Seleziona]
      $arr= array("logstatus"=> 1,
                     "telefono"=>$row['Movil'],
                     "usuarios"=>$row['Usuario'],
                                 "rango"=>$row['Rangoedad'],
                                 "gene"=>$row['Genero'],
                                 "barpub"=>$row['ID_barUser'],
                                 "iduser"=>$row['IDUser'],
                                 "correo"=>$row['Correo'],
                                 "titulo"=>$row['Titulo'],
                                 "regalo"=>$row['Descri'],
                                 "carpeta"=>$row['Carpeta'],
                                 "pass"=>$row['Password'],
                                 "movil"=>$row['Movil']);
         echo json_encode($arr);
JSON de RESPUESTA:

{"logstatus":1,"telefono":"644341111","usuarios":"brrrrrr","rango":"53","gene":"generos","barpub":"1","iduser":"1","correo":"rrrrr@xxxx.es","titulo":"ProvaProvaProvaProvaProvaProva","regalo":"Una copa Mojito","carpeta":"","pass":"1234","movil":"644343310"}

Codice: [Seleziona]
pero mi dava error ora vedo ti tentare di nuovo e poi ti commento
Grazie
un saluto
« Ultima modifica: 11 Dicembre 2013, 22:47:29 CET da ClaudGin »