gpt4 book ai didi

java - AsyncTask 中 ProgressDialog 的 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 18:00:27 24 4
gpt4 key购买 nike

我在 MainActivity 的单独文件中的另一个类中有一个 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();

}

错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

错误指向这一行:

pDialog = new ProgressDialog(GetWarehouseSales.this);

我想执行 AsyncTask RetrieveWarehouseSalesTask可以在 GetWarehouseSales.java 中找到在MainActivity.java但出现 NPE 错误。

最佳答案

尝试传递 MainActivity 上下文..

 @Override
protected void onCreate(Bundle savedInstanceState) {
GetWarehouseSales gws = new GetWarehouseSales(MainActivity.this);
gws.executeGWS();

}

检索上下文:

private Activity activityContext;


public GetWarehouseSales(Activity context){
this.activityContext=context;
}

现在使用该上下文初始化您的ProgressDialog

 @Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(activityContext);
pDialog.setMessage("Getting you the best warehouse sales...");
pDialog.setCancelable(false);
pDialog.show();
}

或者..尝试使用

 pDialog = new ProgressDialog(getApplicationContext());

关于java - AsyncTask 中 ProgressDialog 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com