Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    158

    [Android][JSON] Problema JSONParser

    Ciao a tutti sto tentando di fare una app seguendo questo tutorial vecchio http://www.androidhive.info/2012/05/...ith-php-mysql/
    Ho aggiornato la Classe JASONParser cosi:
    codice:
    public class JSONParser {
    
     String charset = "UTF-8";
     HttpURLConnection conn;
     DataOutputStream wr;
     StringBuilder result;
     URL urlObj;
     JSONObject jObj = null;
     StringBuilder sbParams;
     String paramsString;
     public JSONObject makeHttpRequest(String url, String method,
               HashMap<String, String> params) {
      sbParams = new StringBuilder();
      int i = 0;
      for (String key : params.keySet()) {
       try {
        if (i != 0){
         sbParams.append("&");
        }
        sbParams.append(key).append("=")
          .append(URLEncoder.encode(params.get(key), charset));
       } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
       }
       i++;
      }
      if (method.equals("POST")) {
       // request method is POST
       try {
        urlObj = new URL(url);
        conn = (HttpURLConnection) urlObj.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept-Charset", charset);
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.connect();
        paramsString = sbParams.toString();
        wr = new DataOutputStream(conn.getOutputStream());
        wr.writeBytes(paramsString);
        wr.flush();
        wr.close();
       } catch (IOException e) {
        e.printStackTrace();
       }
      }
      else if(method.equals("GET")){
       // request method is GET
       if (sbParams.length() != 0) {
        url += "?" + sbParams.toString();
       }
       try {
        urlObj = new URL(url);
        conn = (HttpURLConnection) urlObj.openConnection();
        conn.setDoOutput(false);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept-Charset", charset);
        conn.setConnectTimeout(15000);
        conn.connect();
       } catch (IOException e) {
        e.printStackTrace();
       }
      }
      try {
       //Receive the response from the server
       InputStream in = new BufferedInputStream(conn.getInputStream());
       BufferedReader reader = new BufferedReader(new InputStreamReader(in));
       result = new StringBuilder();
       String line;
       while ((line = reader.readLine()) != null) {
        result.append(line);
       }
       Log.d("JSON Parser", "result: " + result.toString());
      } catch (IOException e) {
       e.printStackTrace();
      }
      conn.disconnect();
      // try parse the string to a JSON object
      try {
       jObj = new JSONObject(result.toString());
      } catch (JSONException e) {
       Log.e("JSON Parser", "Error parsing data " + e.toString());
      }
      // return JSON Object
      return jObj;
     }
    }
    e modificato l'activity che carica tutti i dati su una listview premendo un button cosi:
    codice:
    public class AllProductsActivity extends ListActivity {
     // Progress Dialog
     private ProgressDialog pDialog;
     // Creating JSON Parser object
     JSONParser jParser = new JSONParser();
     ArrayList<HashMap<String, String>> productsList;
     // url to get all products list
     private static String url_all_products = "http://192.168.3.199/RiparazioniServer/Test.php";
     // JSON Node names
     private static final String TAG_SUCCESS = "success";
     private static final String TAG_PRODUCTS = "products";
     private static final String TAG_PID = "pid";
     private static final String TAG_NAME = "name";
     // products JSONArray
     JSONArray products = null;
     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.all_products);
      // Hashmap for ListView
      productsList = new ArrayList<HashMap<String, String>>();
      // Loading products in Background Thread
      new LoadAllProducts().execute();
      // Get listview
      ListView lv = getListView();
      // on seleting single product
      // launching Edit Product Screen
      lv.setOnItemClickListener(new OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> parent, View view,
         int position, long id) {
        // getting values from selected ListItem
        String pid = ((TextView) view.findViewById(R.id.pid)).getText()
          .toString();
        // Starting new intent
        Intent in = new Intent(getApplicationContext(),
          EditProductActivity.class);
        // sending pid to next activity
        in.putExtra(TAG_PID, pid);
        
        // starting new activity and expecting some response back
        startActivityForResult(in, 100);
       }
      });
     }
     // Response from Edit Product Activity
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      // if result code 100
      if (resultCode == 100) {
       // if result code 100 is received 
       // means user edited/deleted product
       // reload this screen again
       Intent intent = getIntent();
       finish();
       startActivity(intent);
      }
     }
     /**
      * Background Async Task to Load all product by making HTTP Request
      * */
     class LoadAllProducts extends AsyncTask<String, String, JSONObject> {
      /**
       * Before starting background thread Show Progress Dialog
       * */
      @Override
      protected void onPreExecute() {
       super.onPreExecute();
       pDialog = new ProgressDialog(AllProductsActivity.this);
       pDialog.setMessage("Loading products. Please wait...");
       pDialog.setIndeterminate(false);
       pDialog.setCancelable(false);
       pDialog.show();
      }
      /**
       * getting All products from url
       * */
      protected JSONObject doInBackground(String... args) {
       try {
        // Building Parameters
       HashMap<String, String> params = new HashMap<>();
        params.put("pid", args[0]);
       //params.put("password", args[1]);
       // getting JSON string from URL
       JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
       
       // Check your log cat for JSON reponse
       Log.d("All Products: ", json.toString());
    
        // Checking for SUCCESS TAG
        int success = json.getInt(TAG_SUCCESS);
        if (success == 1) {
         // products found
         // Getting Array of Products
         products = json.getJSONArray(TAG_PRODUCTS);
         // looping through All Products
         for (int i = 0; i < products.length(); i++) {
          JSONObject c = products.getJSONObject(i);
          // Storing each json item in variable
          String id = c.getString(TAG_PID);
          String name = c.getString(TAG_NAME);
          // creating new HashMap
          HashMap<String, String> map = new HashMap<String, String>();
          // adding each child node to HashMap key => value
          map.put(TAG_PID, id);
          map.put(TAG_NAME, name);
          // adding HashList to ArrayList
          productsList.add(map);
         }
        } else {
         // no products found
         // Launch Add New product Activity
         Intent i = new Intent(getApplicationContext(),
           NewProductActivity.class);
         // Closing all previous activities
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         startActivity(i);
        }
       } catch (JSONException e) {
        e.printStackTrace();
       }
       return null;
      }
      /**
       * After completing background task Dismiss the progress dialog
       * **/
      protected void onPostExecute(String file_url) {
       // dismiss the dialog after getting all products
       pDialog.dismiss();
       // updating UI from Background Thread
       runOnUiThread(new Runnable() {
        public void run() {
         /**
          * Updating parsed JSON data into ListView
          * */
         ListAdapter adapter = new SimpleAdapter(
           AllProductsActivity.this, productsList,
           R.layout.list_item, new String[] { TAG_PID,
             TAG_NAME},
           new int[] { R.id.pid, R.id.name });
         // updating listview
         setListAdapter(adapter);
        }
       });
      }
     }
    Pero ottengo questo errore:
    codice:
    [ 09-15 21:40:23.104 14328:14328 D/         ]
                                                                             HostConnection::get() New Host Connection established 0xaa9e4b60, tid 14328
    09-15 21:40:23.884 14328-14328/com.example.androidhive D/gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
    09-15 21:40:23.888 14328-14328/com.example.androidhive E/WindowManager: android.view.WindowLeaked: Activity com.example.androidhive.AllProductsActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{2fa730c V.E...... R.....I. 0,0-802,301} that was originally added here
                                                                                at android.view.ViewRootImpl.<init>(ViewRootImpl.java:368)
                                                                                at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
                                                                                at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                                                at android.app.Dialog.show(Dialog.java:319)
                                                                                at com.example.androidhive.AllProductsActivity$LoadAllProducts.onPreExecute(AllProductsActivity.java:115)
                                                                                at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604)
                                                                                at android.os.AsyncTask.execute(AsyncTask.java:551)
                                                                                at com.example.androidhive.AllProductsActivity.onCreate(AllProductsActivity.java:55)
                                                                                at android.app.Activity.performCreate(Activity.java:6237)
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:148)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    09-15 21:40:23.909 14328-14328/com.example.androidhive D/gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
    09-15 21:42:51.531 14328-14334/com.example.androidhive W/art: Suspending all threads took: 6.070ms
    09-15 21:43:19.571 14328-14334/com.example.androidhive W/art: Suspending all threads took: 5.042ms
    09-15 21:45:10.752 14328-14334/com.example.androidhive W/art: Suspending all threads took: 5.774ms
    09-15 21:45:22.942 14328-14393/com.example.androidhive I/Process: Sending signal. PID: 14328 SIG: 9

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sposto in Java.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Misterxxx
    Registrato dal
    Oct 2003
    Messaggi
    3,706
    Non riesco a capire/vedere dove sia l'errore.
    In ogni caso ti suggerirei di valutare la classe Volley per ottenere il file che è molto più "all'avanguardia", diciamo così, delle vecchie request: https://developer.android.com/traini...ley/index.html
    Ho scritto tempo fa anche un breve tutorial al riguardo ma non so se si possono linkare altri forum ...
    Io ne ho viste cose che voi umani non potreste immaginare. Navi da combattimento in fiamme al largo dei bastioni di Orione e ho visto i raggi B, balenare nel buio vicino le porte di Tannhäuser. E tutti quei momenti ... andranno ... perduti nel tempo, come lacrime nella pioggia. È tempo di morire. (Roy Batty).

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    158
    Quote Originariamente inviata da Misterxxx Visualizza il messaggio
    Non riesco a capire/vedere dove sia l'errore.
    In ogni caso ti suggerirei di valutare la classe Volley per ottenere il file che è molto più "all'avanguardia", diciamo così, delle vecchie request: https://developer.android.com/traini...ley/index.html
    Ho scritto tempo fa anche un breve tutorial al riguardo ma non so se si possono linkare altri forum ...
    Grazie Studierò volley

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.