AsyncTask NullPointerException

1

Я использую класс AsyncTask, и как только я запустил приложение, я получаю исключение нулевого указателя, а приложение переходит в Forceclose. В этой операции я хочу разобрать json-строку и загрузить данные в listview.

вот Activium.

public class JsonExampleActivity extends ListActivity {
 /** Called when the activity is first created. */
 ProgressDialog mDialog;
 Context mContext;
 Location location;
 LocationManager lm;
 final String TAG="a.c.b";
 JSONFunction JSONfunction;
 double latitude[]=new double[20];
 double longitude[]=new double[20];
 String reference[]=new String[20];
 double distance[]=new double[20];
 final Intent intent=new Intent(this ,GetLatAndLng.class);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.listplaceholder);

    new JSONPasingShowList().execute();
}

public void updateWithNewLocation(Location location2) {
    if(location2!=null) {
          double geoLat = location2.getLatitude();

            double geoLng = location2.getLongitude();
    }   
}

class JSONPasingShowList extends AsyncTask<Void, Void,Void>
{  

    @Override
    protected void onPreExecute() {
        mDialog = ProgressDialog.show(mContext,"Loading","Please wait...", true);
    }

@Override
protected Void doInBackground(Void... params) {

    LocationManager locationManager;
    String context=Context.LOCATION_SERVICE;
    locationManager=(LocationManager)getSystemService(context);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    String provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);

    final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
        updateWithNewLocation(location);
        }
        public void onProviderDisabled(String provider){
        updateWithNewLocation(null);
        }
        public void onProviderEnabled(String provider){ }
        public void onStatusChanged(String provider, int status,
        Bundle extras){ }
        };

    updateWithNewLocation(location);
    locationManager.requestLocationUpdates(provider, 2000, 10,
            locationListener);


    double geoLat = location.getLatitude();
    Log.v(TAG, "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"+geoLat);
    double geoLng = location.getLongitude();
    Log.v(TAG, "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"+geoLng);


    JSONObject  json=JSONFunction.getJSONfromURL("https://maps.googleapis.com/maps/api/place/search/json?location=37.422006,-122.084095&radius=1000&types=doctor&sensor=true&key=AIzaSyA1kh_VA6cnhwHrXA0TAFTba5Kt81dZKzc");

    try{
        JSONArray  JArray = json.getJSONArray("results");
           Log.v(TAG, "getting results");
        for(int i=0;i<JArray.length();i++){                     
            HashMap<String, String> map = new HashMap<String, String>();    
            JSONObject e = JArray.getJSONObject(i);
            JSONObject location1=e.getJSONObject("geometry").getJSONObject("location");
            latitude[i]=location1.getDouble("lat");
            longitude[i]=location1.getDouble("lng");
            reference[i]=e.getString("reference");
            Log.v(TAG, reference[i]);
            distance[i]=GetLatAndLng.gps2m(geoLat, geoLng,latitude[i] ,longitude[i]); 

            map.put("id",  String.valueOf(i));
            map.put("name", "" + e.getString("name"));
            map.put("vicinity", "Address " +  e.getString("vicinity")+" "+"Disance:"+distance[i]);

            mylist.add(map);                        
        }   }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }
        Bundle b=new Bundle();
        b.putStringArray("key", reference);
        intent.putExtras(b);
         ListAdapter adapter = new SimpleAdapter(JsonExampleActivity.this, mylist , R.layout.listview, 
                 new String[] { "name", "vicinity", }, 
                 new int[] { R.id.item_title, R.id.item_subtitle });

 setListAdapter(adapter);

 final ListView lv = getListView();
 lv.setTextFilterEnabled(true); 
 lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
        @SuppressWarnings("unchecked")
            HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
       Toast.makeText(JsonExampleActivity.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show();
        intent.putExtra("clickedid",position);
        startActivity(intent);


        }
    });

    return null;
}
@Override
protected void onPostExecute(Void result) {
    mDialog.dismiss();


}

}
 } 

LogCat:

 11-17 20:29:54.186: ERROR/AndroidRuntime(379): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.where/com.where.JsonExampleActivity}: java.lang.NullPointerException
 11-17 20:33:09.487: ERROR/AndroidRuntime(416): Uncaught handler: thread main exiting due to uncaught exception
 11-17 20:33:09.527: ERROR/AndroidRuntime(416): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.where/com.where.JsonExampleActivity}: java.lang.NullPointerException
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.os.Handler.dispatchMessage(Handler.java:99)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.os.Looper.loop(Looper.java:123)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at android.app.ActivityThread.main(ActivityThread.java:4363)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at java.lang.reflect.Method.invokeNative(Native Method)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at java.lang.reflect.Method.invoke(Method.java:521) 
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416):     at dalvik.system.NativeStart.main(Native Method)
 11-17 20:33:09.527: ERROR/AndroidRuntime(416): Caused by: java.lang.NullPointerException

Любая помощь будет оценена по достоинству. Спасибо в Advance!!

  • 2
    Опубликовать трассировку стека. Также я уверен, что вы хотите переместить любой код, который выполняет манипуляции с пользовательским интерфейсом, в метод onPostExecute.
  • 0
    Добавьте больше данных. Например, может помочь StackTrace для исключения NullPointerException.
Показать ещё 3 комментария
Теги:
android-asynctask
android-listview

1 ответ

2
Лучший ответ

Кажется, вы не устанавливаете mContext в любом месте.

  • 0
    Я установил контекст как `public JSONPasingShowList (Context context) {mContext = context; } `но не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню