Autore Topic: Problema invio dati online  (Letto 664 volte)

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Problema invio dati online
« il: 12 Luglio 2013, 18:57:10 CEST »
0
Ciao a tutti ragazzi.... Ho un problema parecchio strano.... E' la prima volta che mi trovo a manipolare db in android e a inviare dati in rete per popolare un db remoto, dopo vari tentativi sono riuscito a inviare i dati e popolare un db in localhost, infine sono anche riuscito a popolare un db presente in un altro computer della rete aziendale in cui sono, ma ora che devo popolare un db remoto ho dei problemi. Il codice funziona perfettamente se provo a popolare un db in localhost o nella rete aziendale. Ma non funziona più se provo a popolarne uno in rete, che è l'obiettivo della mia app....


Praticamente la mia app manda i dati ad uno script in php che li elabora e popola il db....

Vi posto il codice e i log di errore...

Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;



import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;

@SuppressLint("NewApi")
public class StartActivity extends Activity
{

        //Progress Diaolg
        private ProgressDialog pDialog;

        JSONParser jsonParser = new JSONParser();
       
        DBAdapter db;
       
        JSONObject json ;
       
        //url to create new product
 
       
        private static String url_send= "http://sito/file.php";
               
    //JSON Node names
    private static final String TAG_SUCCESS = "success";

        @Override
        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_start);
                db = new DBAdapter(this);
        }




        public void onClickButtonWeb(View v)
        {
                // creating new product in background thread
                new CreateNewProduct().execute();
        }

        @SuppressLint("NewApi")
        //Background AsyncTask to create new product

        class CreateNewProduct extends AsyncTask<String, String, String>
        {
                //Before starting background thread Show Progress Dialog

                @Override
                protected void onPreExecute() {
                        super.onPreExecute();
                        pDialog = new ProgressDialog(StartActivity.this);
                        pDialog.setMessage("Creating Product...");
                        pDialog.setIndeterminate(false);
                        pDialog.setCancelable(true);
                        pDialog.show();
                }

                //creating product
               
                @SuppressLint("NewApi")
                @Override
                protected String doInBackground(String... args) {
                        if (android.os.Build.VERSION.SDK_INT >8)
                        {
                        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                        .permitAll().build();
                        StrictMode.setThreadPolicy(policy);
                        }
                        db.open();
                        Cursor c = db.getContactSync(1);
                        if (c.moveToFirst())
                        {
                                do
                                {
                                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                                        params.add(new BasicNameValuePair("code", c.getString(1)));
                                        params.add(new BasicNameValuePair("data", c.getString(2)));
                                        params.add(new BasicNameValuePair("localita", c.getString(3)));
                                       
                                       
                                        //getting JSON Object
                                        //Note that create product url accepts POST method
                                        //Body of your click handler
                                       
                                       
                                        json = jsonParser.makeHttpRequest(url_send,"POST",params);
                                       

                                        //check log cat for response
                                        Log.d("Create response", json.toString());

                                        //check for success tag
                                        try
                                        {
                                                int success = json.getInt(TAG_SUCCESS);

                                                if(success==1)
                                                {
                                                        //TODO: da spostare perche cosi nn va bene
                                                        //succesfully created product
                                                        int id;
                                                       
                                                        boolean cu = db.updateContact(Integer.parseInt(c.getString(0)), 0);

                                                        //closing this screen
                                                       
                                                }
                                                else
                                                {
                                                        Log.d("Create response", json.toString());
                                                }
                                        }
                                        catch (JSONException e)
                                        {
                                                e.printStackTrace();
                                        }
                                } while (c.moveToNext());
                        }
                        db.close();
                        //Building parameters
                        Intent i = new Intent(getApplicationContext(), StartActivity.class);
                        startActivity(i);
                        finish();
                        return null;
                }

                //After completing background task Dismiss the progress dialog
                @Override
                protected void onPostExecute(String result) {
                        // dismiss the dialog once done
                        pDialog.dismiss();
                }

        }

}

Codice: [Seleziona]
07-12 16:40:52.873: E/JSON Parser(9165): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
07-12 16:40:53.064: W/dalvikvm(9165): threadid=11: thread exiting with uncaught exception (group=0x40a71930)
07-12 16:40:53.274: E/AndroidRuntime(9165): FATAL EXCEPTION: AsyncTask #1
07-12 16:40:53.274: E/AndroidRuntime(9165): java.lang.RuntimeException: An error occured while executing doInBackground()
07-12 16:40:53.274: E/AndroidRuntime(9165):         at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.FutureTask.run(FutureTask.java:239)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.lang.Thread.run(Thread.java:856)
07-12 16:40:53.274: E/AndroidRuntime(9165): Caused by: java.lang.NullPointerException
07-12 16:40:53.274: E/AndroidRuntime(9165):         at com.example.demo2googlemapv2.StartActivity$CreateNewProduct.doInBackground(StartActivity.java:293)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at com.example.demo2googlemapv2.StartActivity$CreateNewProduct.doInBackground(StartActivity.java:1)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-12 16:40:53.274: E/AndroidRuntime(9165):         at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-12 16:40:53.274: E/AndroidRuntime(9165):         ... 4 more
07-12 16:40:54.134: I/Choreographer(9165): Skipped 34 frames!  The application may be doing too much work on its main thread.
07-12 16:40:54.564: I/Choreographer(9165): Skipped 35 frames!  The application may be doing too much work on its main thread.
07-12 16:40:55.324: I/Choreographer(9165): Skipped 77 frames!  The application may be doing too much work on its main thread.
07-12 16:40:56.363: E/WindowManager(9165): Activity com.example.demo2googlemapv2.StartActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40e7e528 V.E..... R.....ID 0,0-729,192} that was originally added here
07-12 16:40:56.363: E/WindowManager(9165): android.view.WindowLeaked: Activity com.example.demo2googlemapv2.StartActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40e7e528 V.E..... R.....ID 0,0-729,192} that was originally added here
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
07-12 16:40:56.363: E/WindowManager(9165):         at android.app.Dialog.show(Dialog.java:281)
07-12 16:40:56.363: E/WindowManager(9165):         at com.example.demo2googlemapv2.StartActivity$CreateNewProduct.onPreExecute(StartActivity.java:109)
07-12 16:40:56.363: E/WindowManager(9165):         at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
07-12 16:40:56.363: E/WindowManager(9165):         at android.os.AsyncTask.execute(AsyncTask.java:534)
07-12 16:40:56.363: E/WindowManager(9165):         at com.example.demo2googlemapv2.StartActivity.onClickButtonWeb(StartActivity.java:92)
07-12 16:40:56.363: E/WindowManager(9165):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 16:40:56.363: E/WindowManager(9165):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.View$1.onClick(View.java:3594)
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.View.performClick(View.java:4204)
07-12 16:40:56.363: E/WindowManager(9165):         at android.view.View$PerformClick.run(View.java:17355)
07-12 16:40:56.363: E/WindowManager(9165):         at android.os.Handler.handleCallback(Handler.java:725)
07-12 16:40:56.363: E/WindowManager(9165):         at android.os.Handler.dispatchMessage(Handler.java:92)
07-12 16:40:56.363: E/WindowManager(9165):         at android.os.Looper.loop(Looper.java:137)
07-12 16:40:56.363: E/WindowManager(9165):         at android.app.ActivityThread.main(ActivityThread.java:5041)
07-12 16:40:56.363: E/WindowManager(9165):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 16:40:56.363: E/WindowManager(9165):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 16:40:56.363: E/WindowManager(9165):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-12 16:40:56.363: E/WindowManager(9165):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-12 16:40:56.363: E/WindowManager(9165):         at dalvik.system.NativeStart.main(Native Method)
07-12 16:40:57.874: I/Process(9165): Sending signal. PID: 9165 SIG: 9


Codice: [Seleziona]
07-12 15:23:57.205: E/WindowManager(7745): Activity com.example.demo2googlemapv2.StartActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40e7bdc0 V.E..... R.....ID 0,0-729,192} that was originally added here
07-12 15:23:57.205: E/WindowManager(7745): android.view.WindowLeaked: Activity com.example.demo2googlemapv2.StartActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40e7bdc0 V.E..... R.....ID 0,0-729,192} that was originally added here
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
07-12 15:23:57.205: E/WindowManager(7745):         at android.app.Dialog.show(Dialog.java:281)
07-12 15:23:57.205: E/WindowManager(7745):         at com.example.demo2googlemapv2.StartActivity$CreateNewProduct.onPreExecute(StartActivity.java:109)
07-12 15:23:57.205: E/WindowManager(7745):         at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
07-12 15:23:57.205: E/WindowManager(7745):         at android.os.AsyncTask.execute(AsyncTask.java:534)
07-12 15:23:57.205: E/WindowManager(7745):         at com.example.demo2googlemapv2.StartActivity.onClickButtonWeb(StartActivity.java:92)
07-12 15:23:57.205: E/WindowManager(7745):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 15:23:57.205: E/WindowManager(7745):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.View$1.onClick(View.java:3594)
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.View.performClick(View.java:4204)
07-12 15:23:57.205: E/WindowManager(7745):         at android.view.View$PerformClick.run(View.java:17355)
07-12 15:23:57.205: E/WindowManager(7745):         at android.os.Handler.handleCallback(Handler.java:725)
07-12 15:23:57.205: E/WindowManager(7745):         at android.os.Handler.dispatchMessage(Handler.java:92)
07-12 15:23:57.205: E/WindowManager(7745):         at android.os.Looper.loop(Looper.java:137)
07-12 15:23:57.205: E/WindowManager(7745):         at android.app.ActivityThread.main(ActivityThread.java:5041)
07-12 15:23:57.205: E/WindowManager(7745):         at java.lang.reflect.Method.invokeNative(Native Method)
07-12 15:23:57.205: E/WindowManager(7745):         at java.lang.reflect.Method.invoke(Method.java:511)
07-12 15:23:57.205: E/WindowManager(7745):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-12 15:23:57.205: E/WindowManager(7745):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-12 15:23:57.205: E/WindowManager(7745):         at dalvik.system.NativeStart.main(Native Method)

Il primo log è quando provo a inviare dati al sito online, il secondo è dovuto ad una prova fatta per vedere cosa succedeva a inviare dati in un pc della stessa rete senza avere i privilegi per farlo...

Visto che in locale funziona e in remoto no quale può essere il problema?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema invio dati online
« Risposta #1 il: 12 Luglio 2013, 19:13:46 CEST »
0
La prima riga del LogCat dice che c'è un problema nel parsing del JSON di risposta. Provvedi a scriverlo su file o comunque visualizzarlo nel LogCat, così ti rendi conti se il server online risponde come ti aspetti.

Seconda cosa, alla fine del doinbackground richiami l'activity... cosa assolutamente da rimuovere. Semmai fallo nella onPostExecute (ammesso abbia un senso auto-rilanciarsi).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Re:Problema invio dati online
« Risposta #2 il: 12 Luglio 2013, 19:30:25 CEST »
0
Codice (Java): [Seleziona]
json = jsonParser.makeHttpRequest(url_send,"POST",params);
                                       

                                        //check log cat for response
                                        Log.d("Create response", json.toString());

Ciao bradipao e grazie mille per la risposta,
praticamente il json come dici tu mi da errore ma il logcat non mi scrive nulla... ho provato anche a debuggare mettendo un breakpoint nelle due righe che ho scritto qua sopra e appena arriva alla prima sta un po' fermo a lavorare, poi mi da l'errore che dici tu e mi va sul log, da li poi facendo step over mi lancia diverse eccezioni come vedi dal logcat e non mi stampa nulla.... Non basta scrivere il Log come ho fatto io per stampare la risposta del file json dal server?

Post unito: 12 Luglio 2013, 19:31:11 CEST
Ho anche seguito il tuo consiglio nello spostare il rilancio dell'attività, ma probabilmente lo toglierò del tutto come consigli...

Post unito: 12 Luglio 2013, 19:57:53 CEST

Ho trovato il modo di stamparmi al risposta e dice
Codice: [Seleziona]
<b>Warning</b>:  com() has been disabled for security reasons in <b>D:\ipercorsosito\file.php</b> on line <b>184</b><br />

infatti nel mio file php alla riga 184 c'è scritto:

Codice: [Seleziona]
$cn = new COM("ADODB.Connection");
Quindi se non ho capito male la libreria COM che serve al mio script è stata disabilitata per sicurezza....

Quindi direi che il problema è quello.... Purtroppo non sono io l'amministratore del sistema, quindi dovrei dirgli di abilitarla....

Post unito: 12 Luglio 2013, 20:08:05 CEST
Oltre al warning c'è anche un bel fatal error....

Codice: [Seleziona]
<b>Fatal error</b>:  Call to undefined method com::open() in <b>D:\sito\file.php</b> on line <b>186</b><br />
e alla riga 186 ho questo:

Codice: [Seleziona]
$cn->open($cnStr);
« Ultima modifica: 12 Luglio 2013, 20:08:06 CEST da jonsnow81, Reason: Merged DoublePost »

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Re:Problema invio dati online
« Risposta #3 il: 15 Luglio 2013, 14:38:30 CEST »
0
Ciao ragazzi, facendo una ampia ricerca su internet ho scoperto che è praticamente impossibile popolare un db access hostato su aruba tramite php, la classe COM che serve non è supportata, nè si può usare l'ODBC.... L'unico modo è farlo tramite asp ma asp e android da quel che so non vanno molto d'accordo, ho trovato una sorta di mini guida che permette di usare php assieme ad asp ma non mi funziona.... Quindi visto che non posso prescindere da Android, DB Access e aruba come potrei risolvere la situazione? La cosa più frustrante è che in locale funziona perfettamente ma su Aruba non essendo abilitata la classe COM non funziona nulla...  :'(

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Problema invio dati online
« Risposta #4 il: 15 Luglio 2013, 16:16:15 CEST »
0
Purtroppo il problema non è di natura Androidiana  :-P ... quindi non pertinente al forum...nota dolente ma dovuta in quanto moderatore...sorry  O:-)
Ora, le soluzioni su aruba possono essere, o spostarsi su un db MySql...oppure usare asp.net
Se la prima soluzione non è fattibile, è possibile usare una libreria esterna chiamata ksoap2
Qui c'è un tutorial su come creare un web service in asp e collegarsi tramite android ( e la suddetta libreria )
Calling ASP.NET Webservice (ASMX) from an Android Application, the Simplest Way - CodeProject
« Ultima modifica: 15 Luglio 2013, 16:24:36 CEST da teskio »

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Re:Problema invio dati online
« Risposta #5 il: 15 Luglio 2013, 16:48:09 CEST »
0
Grazie mille per la dritta, guardo subito....  ;-)