0

進行状況ダイアログを配置した作業中の非同期タスクがありました。問題は、進行状況ダイアログを入れるとクラッシュすることです:

public class CheckBeerJSON extends AsyncTask
<String, Void, String> {

    Context c;
    String b;
    private ProgressDialog Dialog = new ProgressDialog(c);

    public CheckBeerJSON(Context context, String beer)
    {
         c = context;
         b = beer;
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return readJSONFeed(arg0[0]);
    }

    protected void onPreExecute() {
        Dialog.setMessage("Checking your portfolio");

        Dialog.setTitle("Searching");
        Dialog.show();
    }

    protected void onPostExecute(String result){

        //decode json here
        try{

            JSONObject json = new JSONObject(result);
            String status = json.getString("status");

            if(status.equals("no")){


                String message = "Beer not logged";
                Toast.makeText(c,  message, Toast.LENGTH_SHORT).show();

                //clear loader image
                LinearLayout ll = (LinearLayout) (LinearLayout)((Activity) c).findViewById(R.id.addBeerLayout);
                ll.removeAllViews();

                //Add beer add button
                LayoutInflater mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                LinearLayout addButton = (LinearLayout)((Activity) c).findViewById(R.id.addBeerLayout);
                addButton.addView(mInflater.inflate(R.layout.addbeerbutton_layout, null)); 


            }

            else{
                String message = "You have the beer!!";
                Toast.makeText(c,  message, Toast.LENGTH_SHORT).show();

                //clear loader image
                LinearLayout ll = (LinearLayout) (LinearLayout)((Activity) c).findViewById(R.id.addBeerLayout);
                ll.removeAllViews();

                //inflate star rater
                LayoutInflater mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                LinearLayout addButton = (LinearLayout)((Activity) c).findViewById(R.id.addBeerLayout);
                addButton.addView(mInflater.inflate(R.layout.addrate_layout, null));

                RatingBar r = (RatingBar) ((Activity) c).findViewById(R.id.beerRatingBar);

                //get user data
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
                String userID = prefs.getString("userID", null);

                //get beer rating with async task and update rate bar
                String url = "my_other_url";
                String userURLComp = "u=" + userID;
                String beerID = "&b=" + b;

                url = url + userURLComp + beerID;



                new GetUserRating(c,r).execute(url);

                //add listener to bar
                addListenerOnRatingBar(c);









            }


        }
        catch(Exception e){

        }

        Dialog.dismiss();

    }





    private void addListenerOnRatingBar(Context view) {
        RatingBar ratingBar = (RatingBar) ((Activity) view).findViewById(R.id.beerRatingBar);

        ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
            public void onRatingChanged(RatingBar ratingBar, float rating,
                boolean fromUser) {

                //next async task to update online database
                float stars = ratingBar.getRating();

                //get user details
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
                String userID = prefs.getString("userID", null);

                //get beer id
                String beerID = b;

                //get rating
                String urlRate = "r=" + String.valueOf(ratingBar.getRating());
                String urlUserID = "&u=" + userID;
                String urlBeerID = "&b=" + beerID;

                //construct url
                String url2 = "my_url";

                url2 = url2 + urlRate + urlUserID + urlBeerID;

                Log.d("addRateing", url2);

                //async task to update rating in database
                new UpdateRating(c).execute(url2);





            }
        });
    }

    public String readJSONFeed(String URL) {
        StringBuilder stringBuilder = new StringBuilder();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(URL);
        try {
            HttpResponse response = httpClient.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream inputStream = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                inputStream.close();
            } else {
                Log.d("JSON", "Failed to download file");
            }
        } catch (Exception e) {
            Log.d("readJSONFeed", e.getLocalizedMessage());
        }        
        return stringBuilder.toString();
    }




}

私が得るエラーは次のとおりです。

08-16 21:22:34.054  10772-10772/com.beerportfolio.beerportfoliopro E/AndroidRuntime: FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.beerportfolio.beerportfoliopro/com.example.beerportfoliopro.BeerPage}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
        at android.app.ActivityThread.access$600(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:155)
        at android.app.ActivityThread.main(ActivityThread.java:5536)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.NullPointerException
        at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
        at android.app.AlertDialog.<init>(AlertDialog.java:98)
        at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
        at com.example.beerportfoliopro.CheckBeerJSON.<init>(CheckBeerJSON.java:37)
        at com.example.beerportfoliopro.BeerPage.onCreate(BeerPage.java:83)
        at android.app.Activity.performCreate(Activity.java:5066)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1102)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
        ... 11 more
4

1 に答える 1

1

プライベート ProgressDialog ダイアログ = 新しい ProgressDialog(c);

c が null です。以下のコードを試してください。

private ProgressDialog Dialog;

public CheckBeerJSON(Context context, String beer)
{
     c = context;
     Dialog = new ProgressDialog(c);
     b = beer;
}
于 2013-08-17T01:34:32.733 に答える