android日志打印错误

android日志打印错误,android,json,android-asynctask,Android,Json,Android Asynctask,我正在运行一个Android应用程序,它从一个网站下载信息,并在屏幕上打印一个包含这些信息的列表 但是,当它试图加载列表时,应用程序崩溃,我得到以下日志: 04-15 23:32:41.946: I/Choreographer(2069): Skipped 40 frames! The application may be doing too much work on its main thread. 04-15 23:32:50.038: I/Choreographer(2069): S

我正在运行一个Android应用程序,它从一个网站下载信息,并在屏幕上打印一个包含这些信息的列表

但是,当它试图加载列表时,应用程序崩溃,我得到以下日志:

  04-15 23:32:41.946: I/Choreographer(2069): Skipped 40 frames!  The application may be doing too much work on its main thread.
04-15 23:32:50.038: I/Choreographer(2069): Skipped 33 frames!  The application may be doing too much work on its main thread.
04-15 23:32:52.096: I/DO IN BACKGROUD(2069): {"succeed":true,"user_id":362}
04-15 23:32:52.096: I/MESSAGE(2069): {"succeed":true,"user_id":362}
04-15 23:32:52.146: I/put Extra user id(2069): 362
04-15 23:32:56.256: I/dalvikvm-heap(2069): Grow heap (frag case) to 3.554MB for 635812-byte allocation
04-15 23:32:59.027: I/Connection(2069): true
04-15 23:32:59.257: I/Choreographer(2069): Skipped 79 frames!  The application may be doing too much work on its main thread.
04-15 23:33:00.456: I/Choreographer(2069): Skipped 297 frames!  The application may be doing too much work on its main thread.
04-15 23:33:01.447: I/Choreographer(2069): Skipped 229 frames!  The application may be doing too much work on its main thread.
04-15 23:33:03.138: I/Choreographer(2069): Skipped 184 frames!  The application may be doing too much work on its main thread.
04-15 23:33:03.856: I/Choreographer(2069): Skipped 186 frames!  The application may be doing too much work on its main thread.
04-15 23:33:04.349: I/DO IN BACKGROUD(2069): {  "supermercado": "La Salle - Curs Android II",   "productos" : [     {           "id" : 1,           "fabricante" : "Nestlé",            "nombre" : "NESQUIK",           "precio" : 12.85,           "stock" : 10        },      {           "id" : 2,           "fabricante" : "Coca-cola",         "nombre" : "Coca-cola",         "precio" : 3.21,            "stock" : 150       },      {           "id" : 3,           "fabricante" : "Borges",            "nombre" : "Aceite girasol 1L",         "precio" : 1.88,            "stock" : 0     },      {           "id" : 4,           "fabricante" : "Serpis",            "nombre" : "Aceitunas rellenas de anchoa 160g",         "precio" : 1.39,            "stock" : 1523      },      {           "id" : 5,           "fabricante" : "Carretilla",            "nombre" : "Pimientos piquillo ajillo 290g",            "precio" : 2.25,            "stock" : 14        },      {           "id" : 6,           "fabricante" : "Orlando",           "nombre" : "Tomate frito con aceite de oliva virgen brik 390g",         "precio" : 0.95,            "stock" : 0     },      {           "id" : 7,           "fabricante" : "Kellogg's",         "nombre" : "Cereales Special K chocolate 300g",         "precio" : 2.39,            "stock" : 152       },      {           "id" : 8,           "fabricante" : "Lu",            "nombre" : "Galletas rellenas mini Principe 160g",          "precio" : 1.59,            "stock" : 29        },      {           "id" : 9,           "fabricante" : "Pascual",           "nombre" : "Leche sin lactosa desnatada brik 1l",           "precio" : 1.49,            "stock" : 1596      },      {           "id" : 10,          "fabricante" : "Danone",            "nombre" : "Danet vainilla 4x125g",         "precio" : 1.90,            "stock" : 856       },      {           "id" : 11,          "fabricante" : "Hornimans",         "nombre" : "Infusueños 20 sobres",          "precio" : 2.35,            "stock" : 598       }   ]}
04-15 23:33:04.516: I/Choreographer(2069): Skipped 169 frames!  The application may be doing too much work on its main thread.
04-15 23:33:04.848: I/Choreographer(2069): Skipped 59 frames!  The application may be doing too much work on its main thread.
04-15 23:33:05.188: I/On Post EXECUTE(2069): {  "supermercado": "La Salle - Curs Android II",   "productos" : [     {           "id" : 1,           "fabricante" : "Nestlé",            "nombre" : "NESQUIK",           "precio" : 12.85,           "stock" : 10        },      {           "id" : 2,           "fabricante" : "Coca-cola",         "nombre" : "Coca-cola",         "precio" : 3.21,            "stock" : 150       },      {           "id" : 3,           "fabricante" : "Borges",            "nombre" : "Aceite girasol 1L",         "precio" : 1.88,            "stock" : 0     },      {           "id" : 4,           "fabricante" : "Serpis",            "nombre" : "Aceitunas rellenas de anchoa 160g",         "precio" : 1.39,            "stock" : 1523      },      {           "id" : 5,           "fabricante" : "Carretilla",            "nombre" : "Pimientos piquillo ajillo 290g",            "precio" : 2.25,            "stock" : 14        },      {           "id" : 6,           "fabricante" : "Orlando",           "nombre" : "Tomate frito con aceite de oliva virgen brik 390g",         "precio" : 0.95,            "stock" : 0     },      {           "id" : 7,           "fabricante" : "Kellogg's",         "nombre" : "Cereales Special K chocolate 300g",         "precio" : 2.39,            "stock" : 152       },      {           "id" : 8,           "fabricante" : "Lu",            "nombre" : "Galletas rellenas mini Principe 160g",          "precio" : 1.59,            "stock" : 29        },      {           "id" : 9,           "fabricante" : "Pascual",           "nombre" : "Leche sin lactosa desnatada brik 1l",           "precio" : 1.49,            "stock" : 1596      },      {           "id" : 10,          "fabricante" : "Danone",            "nombre" : "Danet vainilla 4x125g",         "precio" : 1.90,            "stock" : 856       },      {           "id" : 11,          "fabricante" : "Hornimans",         "nombre" : "Infusueños 20 sobres",          "precio" : 2.35,            "stock" : 598       }   ]}
04-15 23:33:05.486: I/Write STORAGE(2069): {    "supermercado": "La Salle - Curs Android II",   "productos" : [     {           "id" : 1,           "fabricante" : "Nestlé",            "nombre" : "NESQUIK",           "precio" : 12.85,           "stock" : 10        },      {           "id" : 2,           "fabricante" : "Coca-cola",         "nombre" : "Coca-cola",         "precio" : 3.21,            "stock" : 150       },      {           "id" : 3,           "fabricante" : "Borges",            "nombre" : "Aceite girasol 1L",         "precio" : 1.88,            "stock" : 0     },      {           "id" : 4,           "fabricante" : "Serpis",            "nombre" : "Aceitunas rellenas de anchoa 160g",         "precio" : 1.39,            "stock" : 1523      },      {           "id" : 5,           "fabricante" : "Carretilla",            "nombre" : "Pimientos piquillo ajillo 290g",            "precio" : 2.25,            "stock" : 14        },      {           "id" : 6,           "fabricante" : "Orlando",           "nombre" : "Tomate frito con aceite de oliva virgen brik 390g",         "precio" : 0.95,            "stock" : 0     },      {           "id" : 7,           "fabricante" : "Kellogg's",         "nombre" : "Cereales Special K chocolate 300g",         "precio" : 2.39,            "stock" : 152       },      {           "id" : 8,           "fabricante" : "Lu",            "nombre" : "Galletas rellenas mini Principe 160g",          "precio" : 1.59,            "stock" : 29        },      {           "id" : 9,           "fabricante" : "Pascual",           "nombre" : "Leche sin lactosa desnatada brik 1l",           "precio" : 1.49,            "stock" : 1596      },      {           "id" : 10,          "fabricante" : "Danone",            "nombre" : "Danet vainilla 4x125g",         "precio" : 1.90,            "stock" : 856       },      {           "id" : 11,          "fabricante" : "Hornimans",         "nombre" : "Infusueños 20 sobres",          "precio" : 2.35,            "stock" : 598       }   ]}
04-15 23:33:07.027: W/dalvikvm(2069): threadid=1: thread exiting with uncaught exception (group=0x41465700)
04-15 23:33:07.266: E/AndroidRuntime(2069): FATAL EXCEPTION: main
04-15 23:33:07.266: E/AndroidRuntime(2069): java.lang.NullPointerException: println needs a message
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.util.Log.println_native(Native Method)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.util.Log.i(Log.java:159)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.example.shop.Tenda.refreshListByJson(Tenda.java:305)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.example.shop.Tenda.access$1(Tenda.java:302)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.example.shop.Tenda$LongAsyncTask.onPostExecute(Tenda.java:259)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.example.shop.Tenda$LongAsyncTask.onPostExecute(Tenda.java:1)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.os.AsyncTask.finish(AsyncTask.java:631)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.os.Looper.loop(Looper.java:137)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at android.app.ActivityThread.main(ActivityThread.java:5103)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at java.lang.reflect.Method.invokeNative(Native Method)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at java.lang.reflect.Method.invoke(Method.java:525)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-15 23:33:07.266: E/AndroidRuntime(2069):     at dalvik.system.NativeStart.main(Native Method)
04-15 23:33:13.366: I/Process(2069): Sending signal. PID: 2069 SIG: 9
04-15 23:33:20.867: I/Choreographer(2098): Skipped 60 frames!  The application may be doing too much work on its main thread.
以下是发生崩溃的活动:

Tenda.java

package com.example.shop;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

import com.example.shop.SuperAdapter;

import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.InputType;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.NumberPicker;
import android.widget.TextView;
import android.widget.Toast;

public class Tenda extends Activity implements OnItemClickListener, LocationListener {

    ProgressDialog lDialog;
    String json_string;
    SuperAdapter adapter_super;
    int user_id;
    private LocationManager locationManager;
    public String provider;
    private String  lattitude , longitude; 

    /*************************************************/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tenda);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        init_conf();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.tenda, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.menu_update:
                updateList();
                return true;
            case R.id.menu_search:
                alert_search();
                return true;   
            case R.id.menu_cancel:
                finish();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {

        TextView stock = (TextView) view.findViewById(R.id.list_product_stock);
        int num_stock = Integer.parseInt(stock.getText().toString()) ; 

        if(num_stock!=0){
            ArrayList<Super> productes=adapter_super.getItems_producte();
            Super current_product= productes.get(position);

            alert_buy(num_stock,current_product);
        }
        else
        {
            Toast.makeText(this, "OUT OF STOCK", Toast.LENGTH_LONG).show();
        }

    }

    private void init_conf(){

        Bundle extras = getIntent().getExtras();
        user_id = extras.getInt("user_id");

        Toast.makeText(this, "user id"+Integer.toString(user_id), Toast.LENGTH_LONG).show();

        ListView lsv_producto = (ListView)findViewById(R.id.list_productes);
        adapter_super = new SuperAdapter(Tenda.this,null);
        lsv_producto.setAdapter(adapter_super);
        lsv_producto.setOnItemClickListener(this);
        updateList();

    }

    private void updateList(){
        loading();
        String url = "http://www.v2msoft.com/clientes/lasalle/curs-android/products.php?user_id="+user_id;

        boolean is_con=is_connected();

        if(is_con){
            Log.i("Connection", "true");
            AsyncTask(url);
            Toast.makeText(this, "connected internet", Toast.LENGTH_LONG).show();
        }
        else{
            json_string=storeRead();
            refreshListByJson(json_string);
            Toast.makeText(this, "not connected internet", Toast.LENGTH_LONG).show();
        }

    }

    private void search(String text){
        loading();
        String url="http://www.v2msoft.com/clientes/lasalle/curs-android/search.php?user_id="+user_id+"&q="+text;

        boolean is_con=is_connected();
        if(is_con){
            Log.i("search URL", url);
            Toast.makeText(this, url, Toast.LENGTH_LONG).show();
            searchAsyncTask(url);
        }
        else{
            Toast.makeText(this, "NO CONNECTION", Toast.LENGTH_LONG).show();
        }


    }

private void buy(Super producte, int value){

        int product_id=  producte.getId();

        String url="http://www.v2msoft.com/clientes/lasalle/curs-android/buy.php?user_id="+user_id+
                    "&product_id="+product_id+
                    "&items="+value+
                    "&lat="+1+
                    "&long="+1;

        Toast.makeText(this, url, Toast.LENGTH_LONG).show();

    }

    private void AsyncTask(String url){
        LongAsyncTask task = new LongAsyncTask();
        task.execute(url);
    }

    private void searchAsyncTask(String url){
        SearchAsyncTask task = new SearchAsyncTask();
        task.execute(url);
    }

    public void alert_search(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Title");

        final EditText input = new EditText(this);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        builder.setView(input);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String m_Text = input.getText().toString();
                Toast.makeText(getApplicationContext(), m_Text, Toast.LENGTH_LONG).show();
                search(m_Text);
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();

    }

    public void alert_buy(int max_value,final Super producte){

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("BUY");

        final NumberPicker number= new NumberPicker(this);
        number.setMaxValue(max_value);
        number.setMinValue(0);
        builder.setView(number);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            @Override
            public void onClick(DialogInterface dialog, int which) {
                int value= number.getValue();
                Toast.makeText(getApplicationContext(), value+"", Toast.LENGTH_LONG).show();
                buy(producte,value);
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();

    }

    /*************************ASYNC TASK************************/

    public class LongAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("DO IN BACKGROUND", url_result);
            return url_result;

        }
       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE", url_result);
           json_string= url_result;
           storeWrite(json_string);
           refreshListByJson(json_string);//line 259
       }

    }

        public class SearchAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("Search result", url_result);
            return url_result;

        }

       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE SEARCH", url_result);
           json_string= url_result;
           Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG).show();
           refreshListByJson(json_string);
       }

    }

    public class BuyAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("buy result", url_result);
            return url_result;

        }
       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE SEARCH", url_result);
           json_string= url_result;
           Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG).show();
       }

    }

    /*************************************************/

    private void refreshListByJson(String json){//line 302
        lDialog.dismiss();
       Store store=Store.newStore(json);
           Log.i("store-nom", store.getStore());//line 305
           Log.i("store-producte", store.getProductos().toString());
           adapter_super.setItems_producto(store.getProductos());    
    }

    private void storeWrite(String data){
        String FILENAME = "json_store";

        FileOutputStream fos;
        try {
            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Log.i("Write STORAGE", data);

    }

    private String storeRead(){
        String FILENAME = "json_store";

        FileInputStream  fis;
        StringBuilder fileContent = new StringBuilder();
        try {
            fis= openFileInput (FILENAME);
            BufferedReader br= new BufferedReader(new InputStreamReader(fis));
            String line;

            while((line = br.readLine())!= null)
            {
                fileContent.append(line);
            }
            br.close();
            fis.close();
            Log.i("READ STORAGE", fileContent.toString());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return fileContent.toString();
    }

    public String conect(String url_string){

        HttpURLConnection con = null;
        BufferedReader reader= null;

        try{
            URL url = new URL(url_string);
            con = (HttpURLConnection)url.openConnection();

            reader= new BufferedReader(new InputStreamReader(con.getInputStream()));

            String line ="";
            StringBuffer responseBuffer = new StringBuffer();

            while((line=reader.readLine())!=null)
            {
                responseBuffer.append(line);
            }

            return responseBuffer.toString(); 
        }
        catch(Exception ex){
            Log.e(getClass().getName(), ex.getMessage(),ex);
            return  null;
        }

    }

    public boolean is_connected(){
        ConnectivityManager conMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo i = conMgr.getActiveNetworkInfo();
          if (i == null)
            return false;
          if (!i.isConnected())
            return false;
          if (!i.isAvailable())
            return false;
          return true;
    }

    private void loading(){
         lDialog = new ProgressDialog(this);
         lDialog.setMessage("Loading...");
         lDialog.setCancelable(false);
         lDialog.show();
    }


/*** Location ***/

@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
int lat = (int) (arg0.getLatitude());
int lng = (int) (arg0.getLongitude());
lattitude = "Lattitude: "+ lat ;
longitude = "Longitude: "+ lng; 
}

@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
////TODO Auto-generated method stub

}               

}
    package com.example.shop;

import java.util.ArrayList;
import com.google.gson.Gson;

public class Store {

    private String store;
    private ArrayList<Super> productes;

    public String getStore() {
        return store;
    }
    public void setSupermercado(String store) {
        this.store = store;
    }
    public ArrayList<Super> getProductos() {
        return productes;
    }
    public void setProductes(ArrayList<Super> productes) {
        this.productes = productes;
    }

    static Store newStore(String json_string){

        Gson gson= new Gson();

        Store store = gson.fromJson(json_string,Store.class);

        return store;

    }


}
package com.example.shop;

public class Super {

    private int id;
    private String fabricant;
    private String nom;
    private float preu;
    private int stock;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFabricant() {
        return fabricant;
    }
    public void setFabricant(String fabricant) {
        this.fabricant = fabricant;
    }
    public String getNom() {
        return nom;
    }
    public void setNom(String nom) {
        this.nom = nom;
    }
    public float getPreu() {
        return preu;
    }
    public void setPreu(float preu) {
        this.preu = preu;
    }
    public int getStock() {
        return stock;
    }
    public void setStock(int stock) {
        this.stock = stock;
    }

}
package com.example.shop;
import android.os.AsyncTask;

public class LongAsyncTask extends AsyncTask<String,String,String>{

    @Override
    protected String doInBackground(String... arg0) {

        return null;
    }


   protected void onPostExecute(String result) {

   }

}
LongAsyncTask.java

package com.example.shop;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

import com.example.shop.SuperAdapter;

import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.InputType;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.NumberPicker;
import android.widget.TextView;
import android.widget.Toast;

public class Tenda extends Activity implements OnItemClickListener, LocationListener {

    ProgressDialog lDialog;
    String json_string;
    SuperAdapter adapter_super;
    int user_id;
    private LocationManager locationManager;
    public String provider;
    private String  lattitude , longitude; 

    /*************************************************/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tenda);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        init_conf();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.tenda, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.menu_update:
                updateList();
                return true;
            case R.id.menu_search:
                alert_search();
                return true;   
            case R.id.menu_cancel:
                finish();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {

        TextView stock = (TextView) view.findViewById(R.id.list_product_stock);
        int num_stock = Integer.parseInt(stock.getText().toString()) ; 

        if(num_stock!=0){
            ArrayList<Super> productes=adapter_super.getItems_producte();
            Super current_product= productes.get(position);

            alert_buy(num_stock,current_product);
        }
        else
        {
            Toast.makeText(this, "OUT OF STOCK", Toast.LENGTH_LONG).show();
        }

    }

    private void init_conf(){

        Bundle extras = getIntent().getExtras();
        user_id = extras.getInt("user_id");

        Toast.makeText(this, "user id"+Integer.toString(user_id), Toast.LENGTH_LONG).show();

        ListView lsv_producto = (ListView)findViewById(R.id.list_productes);
        adapter_super = new SuperAdapter(Tenda.this,null);
        lsv_producto.setAdapter(adapter_super);
        lsv_producto.setOnItemClickListener(this);
        updateList();

    }

    private void updateList(){
        loading();
        String url = "http://www.v2msoft.com/clientes/lasalle/curs-android/products.php?user_id="+user_id;

        boolean is_con=is_connected();

        if(is_con){
            Log.i("Connection", "true");
            AsyncTask(url);
            Toast.makeText(this, "connected internet", Toast.LENGTH_LONG).show();
        }
        else{
            json_string=storeRead();
            refreshListByJson(json_string);
            Toast.makeText(this, "not connected internet", Toast.LENGTH_LONG).show();
        }

    }

    private void search(String text){
        loading();
        String url="http://www.v2msoft.com/clientes/lasalle/curs-android/search.php?user_id="+user_id+"&q="+text;

        boolean is_con=is_connected();
        if(is_con){
            Log.i("search URL", url);
            Toast.makeText(this, url, Toast.LENGTH_LONG).show();
            searchAsyncTask(url);
        }
        else{
            Toast.makeText(this, "NO CONNECTION", Toast.LENGTH_LONG).show();
        }


    }

private void buy(Super producte, int value){

        int product_id=  producte.getId();

        String url="http://www.v2msoft.com/clientes/lasalle/curs-android/buy.php?user_id="+user_id+
                    "&product_id="+product_id+
                    "&items="+value+
                    "&lat="+1+
                    "&long="+1;

        Toast.makeText(this, url, Toast.LENGTH_LONG).show();

    }

    private void AsyncTask(String url){
        LongAsyncTask task = new LongAsyncTask();
        task.execute(url);
    }

    private void searchAsyncTask(String url){
        SearchAsyncTask task = new SearchAsyncTask();
        task.execute(url);
    }

    public void alert_search(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Title");

        final EditText input = new EditText(this);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        builder.setView(input);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String m_Text = input.getText().toString();
                Toast.makeText(getApplicationContext(), m_Text, Toast.LENGTH_LONG).show();
                search(m_Text);
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();

    }

    public void alert_buy(int max_value,final Super producte){

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("BUY");

        final NumberPicker number= new NumberPicker(this);
        number.setMaxValue(max_value);
        number.setMinValue(0);
        builder.setView(number);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            @Override
            public void onClick(DialogInterface dialog, int which) {
                int value= number.getValue();
                Toast.makeText(getApplicationContext(), value+"", Toast.LENGTH_LONG).show();
                buy(producte,value);
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();

    }

    /*************************ASYNC TASK************************/

    public class LongAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("DO IN BACKGROUND", url_result);
            return url_result;

        }
       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE", url_result);
           json_string= url_result;
           storeWrite(json_string);
           refreshListByJson(json_string);//line 259
       }

    }

        public class SearchAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("Search result", url_result);
            return url_result;

        }

       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE SEARCH", url_result);
           json_string= url_result;
           Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG).show();
           refreshListByJson(json_string);
       }

    }

    public class BuyAsyncTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... url) {
            String url_result= conect(url[0]);
            Log.i("buy result", url_result);
            return url_result;

        }
       protected void onPostExecute(String url_result) {
           Log.i("On Post EXECUTE SEARCH", url_result);
           json_string= url_result;
           Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG).show();
       }

    }

    /*************************************************/

    private void refreshListByJson(String json){//line 302
        lDialog.dismiss();
       Store store=Store.newStore(json);
           Log.i("store-nom", store.getStore());//line 305
           Log.i("store-producte", store.getProductos().toString());
           adapter_super.setItems_producto(store.getProductos());    
    }

    private void storeWrite(String data){
        String FILENAME = "json_store";

        FileOutputStream fos;
        try {
            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Log.i("Write STORAGE", data);

    }

    private String storeRead(){
        String FILENAME = "json_store";

        FileInputStream  fis;
        StringBuilder fileContent = new StringBuilder();
        try {
            fis= openFileInput (FILENAME);
            BufferedReader br= new BufferedReader(new InputStreamReader(fis));
            String line;

            while((line = br.readLine())!= null)
            {
                fileContent.append(line);
            }
            br.close();
            fis.close();
            Log.i("READ STORAGE", fileContent.toString());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return fileContent.toString();
    }

    public String conect(String url_string){

        HttpURLConnection con = null;
        BufferedReader reader= null;

        try{
            URL url = new URL(url_string);
            con = (HttpURLConnection)url.openConnection();

            reader= new BufferedReader(new InputStreamReader(con.getInputStream()));

            String line ="";
            StringBuffer responseBuffer = new StringBuffer();

            while((line=reader.readLine())!=null)
            {
                responseBuffer.append(line);
            }

            return responseBuffer.toString(); 
        }
        catch(Exception ex){
            Log.e(getClass().getName(), ex.getMessage(),ex);
            return  null;
        }

    }

    public boolean is_connected(){
        ConnectivityManager conMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo i = conMgr.getActiveNetworkInfo();
          if (i == null)
            return false;
          if (!i.isConnected())
            return false;
          if (!i.isAvailable())
            return false;
          return true;
    }

    private void loading(){
         lDialog = new ProgressDialog(this);
         lDialog.setMessage("Loading...");
         lDialog.setCancelable(false);
         lDialog.show();
    }


/*** Location ***/

@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
int lat = (int) (arg0.getLatitude());
int lng = (int) (arg0.getLongitude());
lattitude = "Lattitude: "+ lat ;
longitude = "Longitude: "+ lng; 
}

@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
////TODO Auto-generated method stub

}               

}
    package com.example.shop;

import java.util.ArrayList;
import com.google.gson.Gson;

public class Store {

    private String store;
    private ArrayList<Super> productes;

    public String getStore() {
        return store;
    }
    public void setSupermercado(String store) {
        this.store = store;
    }
    public ArrayList<Super> getProductos() {
        return productes;
    }
    public void setProductes(ArrayList<Super> productes) {
        this.productes = productes;
    }

    static Store newStore(String json_string){

        Gson gson= new Gson();

        Store store = gson.fromJson(json_string,Store.class);

        return store;

    }


}
package com.example.shop;

public class Super {

    private int id;
    private String fabricant;
    private String nom;
    private float preu;
    private int stock;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFabricant() {
        return fabricant;
    }
    public void setFabricant(String fabricant) {
        this.fabricant = fabricant;
    }
    public String getNom() {
        return nom;
    }
    public void setNom(String nom) {
        this.nom = nom;
    }
    public float getPreu() {
        return preu;
    }
    public void setPreu(float preu) {
        this.preu = preu;
    }
    public int getStock() {
        return stock;
    }
    public void setStock(int stock) {
        this.stock = stock;
    }

}
package com.example.shop;
import android.os.AsyncTask;

public class LongAsyncTask extends AsyncTask<String,String,String>{

    @Override
    protected String doInBackground(String... arg0) {

        return null;
    }


   protected void onPostExecute(String result) {

   }

}
package com.example.shop;
导入android.os.AsyncTask;
公共类LongAsyncTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…arg0){
返回null;
}
受保护的void onPostExecute(字符串结果){
}
}
谁能帮我弄明白是什么错吗?我基于一个非常相似的应用程序构建了这个应用程序,但当我的应用程序试图在屏幕上打印列表时崩溃了

我也检查了所有的类,我没有发现从一个类到另一个类的函数调用有任何问题,比如:我真的被困在这个类上了


多谢各位

根据
Logcat
您在以下位置获得了
NullPointerException

com.example.shop.Tenda.refreshListByJson(Tenda.java:305)
在这一行:

Log.i("store-nom", store.getStore());//line 305
这意味着
store.getStore()
返回
null
。您必须向
日志
提供非
null
字符串

您可以尝试这样打印:

Log.i("store-nom", "" + store.getStore());

或者只需确保
store.getStore()
不是
null

这里的问题很大一部分是标签字段被误用了。标记字段应指定正在进行记录的组件,而记录内容的指定应与值一起出现在消息字段中。完成此操作后,消息字段将永远不会为空。即,Log.d(“MyActivity”,“该值为“+值”)@giant00:我尝试将您建议的更正应用于“log.I”行,错误类型已更改:现在我在“private void refreshListByJson(String json)”和“log.I(“store producte”,“+store.getProductos().toString());”中得到nullPointerException。其中一条消息是“at com.example.shop.Tenda.access$1(Tenda.java:300)”@user3082271您可以使用log.i或类似的东西检查
store.getProductos()
是否为
null
?getProductos()在类Store.java中创建为“public ArrayList getProductos()”,返回“products”和“products”,并定义为“private ArrayList products;”。这难道不意味着它加载了类“Super.java”的信息吗?@user3082271:如果(store.getProductos()!=null)在
日志上,您可以添加一个简单的
。我没有看到在您的代码中为
私有ArrayList产品调用setter。因此,
ArrayList
必须取消初始化。