Ich habe eine AsyncTask Klasse innerhalb einer anderen Klasse in einer separaten Datei von MainActivityNullPointerExeception für ProgressDialog in AsyncTask
GetWarehouseSales.java
public class GetWarehouseSales extends Activity {
private String TAG = MainActivity.class.getSimpleName();
private ListView lv;
private ProgressDialog pDialog;
//URL to get JSON details
private static String url = "http://192.168.0.1/mycc/retrieve_ws.php";
ArrayList<HashMap<String,String>> sales_details;
public GetWarehouseSales(){
}
public void executeGWS(){
new RetrieveWarehouseSalesTask().execute();
}
public class RetrieveWarehouseSalesTask extends AsyncTask<Void,Void,Void>{
public RetrieveWarehouseSalesTask(){
}
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(GetWarehouseSales.this);
pDialog.setMessage("Getting you the best warehouse sales...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0){
HttpHandler sh = new HttpHandler();
//making a request to URL and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if(jsonStr != null){
try{
JSONObject jsonObj = new JSONObject(jsonStr);
//Getting JSON Array Node
JSONArray sales = jsonObj.getJSONArray("Result");
//looping through all results
for(int i = 0; i<sales.length();i++){
JSONObject s = sales.getJSONObject(i);
String title = s.getString("title");
String description = s.getString("description");
HashMap<String,String> salesDetails = new HashMap<>();
//adding each child node to HashMap key =>value
salesDetails.put("title",title);
salesDetails.put("description",description);
//adding to array list
sales_details.add(salesDetails);
}
Log.d("TAG",sales_details.toString());
}catch(final JSONException e){
Log.e(TAG, "JSON parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),"JSON parsing error: " + e.getMessage(),Toast.LENGTH_LONG).show();
}
});
}
}else{
Log.e(TAG,"Couldn't get json from server");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Check logcat", Toast.LENGTH_LONG).show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
if(pDialog.isShowing()){
pDialog.dismiss();
}
//update parsed JSON data into ListView
ListAdapter adapter = new SimpleAdapter(GetWarehouseSales.this, sales_details,R.layout.item_listview, new String[]{
"title","description"}, new int[]{R.id.text,R.id.description});
lv.setAdapter(adapter);
}
}
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
GetWarehouseSales gws = new GetWarehouseSales();
gws.executeGWS();
}
Der Fehler :
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
Der Fehlerpunkt auf dieser Linie:
pDialog = new ProgressDialog(GetWarehouseSales.this);
Ich möchte die AsyncTask RetrieveWarehouseSalesTask
auszuführen, die in GetWarehouseSales.java
in MainActivity.java
gefunden werden kann, aber NPE Fehler bekommen.
Ich kann nicht wirklich sagen, was das Problem mit diesem Code ist, aber ich denke, dass Sie die Aktivität tatsächlich starten müssen. Sonst wird es keinen Kontext haben. Ein Stack-Trace oder ein Funktionsbeispielcode wäre hilfreich. – Distjubo