2

我正在尝试从 http 服务器ProgressDialog加载提要时显示一段时间。json我得到一个NullPointerException和。如果我没有误解,在最终代码中会运行!我的错在哪里?这是我的活动代码:doInBackgroundonPostExecuteAsyncTaskonPostExecute

public class ResultInput extends Activity {

    int count = 0;
    String mainUrl;
    String[] product_pict_part;
    InputStream is = null;
    private ProgressDialog pd;
    String TAG = "meinDebug";
    ParseEan parse_code;
    String readProductNameEan;
    ImageView productPic;
    String productName;
    Drawable drawable;
    TextView product_name;
    TextView text_level;
    int productLevel;

    private Context context;

    // private MyProgressDialog dialog;
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        new ProgressTask(ResultInput.this).execute();
    }

    private InputStream fetch(String urlString) throws MalformedURLException,
            IOException {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet(urlString);
        HttpResponse response = httpClient.execute(request);
        return response.getEntity().getContent();
    }

    private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        private ProgressDialog dialog;
        private Activity activity;

        // private List<Message> messages;
        public ProgressTask(Activity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }

        /** progress dialog to show user that the backup is processing. */

        /** application context. */

        protected void onPreExecute() {
            this.dialog.setMessage("Progress start");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(final Boolean success) {
            pd.dismiss();
            productPic.setImageDrawable(drawable);

            Log.i(TAG, "Picture URL " + mainUrl);
            product_name.setText(productName);

            if (productLevel == 1) {
                text_level.setText("helal");
            } else if (productLevel == 2) {
                text_level.setText("mittel");
            } else if (productLevel == 3) {
                text_level.setText("haram");
            } else if (productLevel == 4) {
                text_level.setText("in analyse");
            }

            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            if (success) {
                Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(context, "Error", Toast.LENGTH_LONG).show();
            }
        }

        protected Boolean doInBackground(final String... args) {
            try {
                mainUrl = "http://nur-efsan.de/websHalalCheck/public/image/index/dir/";
                product_name = (TextView) findViewById(R.id.produkt_name);
                text_level = (TextView) findViewById(R.id.text_level);
                productPic = (ImageView) findViewById(R.id.productpic);
                productName = parse_code.parseJSONPost("data", "name",
                        readProductNameEan);
                String productPicture = parse_code.parseJSONPost("data",
                        "image", readProductNameEan);
                productLevel = Integer.parseInt(parse_code.parseJSONPost(
                        "data", "levelId", readProductNameEan));

                product_pict_part = productPicture.split("/");
                mainUrl = mainUrl + product_pict_part[0] + "/name/"
                        + product_pict_part[1];

                try {
                    is = fetch(mainUrl);
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                drawable = Drawable.createFromStream(is, "src");

                return true;
            } catch (Exception e) {
                Log.e("tag", "error", e);
                return false;
            }
        }

    }

}
4

2 回答 2

1

在 OnPostExecute 方法中

 dialog.dismiss();

代替

 pd.dismiss();

第二

你不应该在 doInBackgroud(...) 方法中引用 TextView 或 imageview(productname,testview...) 因为 doinbackground 方法是非 UI 线程。

So give refrence in onCreate method and then call asyncTask和 setValue 在onPostExecute method...

于 2012-05-26T11:06:45.697 回答
0

非常感谢您的回复!我更改了您向我描述的代码!而且我忘记设置我的内容视图:) 我的最终代码:

package com.halal.helalcheck;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;

public class ResultInput extends Activity {

    int count = 0;
    String mainUrl;
    String[] product_pict_part;
    InputStream is = null;
    String TAG = "meinDebug";
    ParseEan parse_code = new com.halal.helalcheck.ParseEan();
    String readProductNameEan;
    ImageView productPic;
    String productName;
    Drawable drawable;
    TextView product_name;
    TextView text_level;
    int productLevel;


    private Context context;

    // private MyProgressDialog dialog;
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.resultwindow);

        mainUrl = "http://nur-efsan.de/websHalalCheck/public/image/index/dir/";
        product_name = (TextView) findViewById(R.id.produkt_name);
        text_level = (TextView) findViewById(R.id.text_level);
        productPic = (ImageView) findViewById(R.id.productpic);


        new ProgressTask(ResultInput.this).execute();


    }

    private InputStream fetch(String urlString) throws MalformedURLException,
            IOException {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet(urlString);
        HttpResponse response = httpClient.execute(request);
        return response.getEntity().getContent();
    }

    private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        private ProgressDialog dialog;
        private Activity activity;

        public ProgressTask(Activity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }

        /** progress dialog to show user that the backup is processing. */

        /** application context. */

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Checking Product");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(final Boolean success) {
            drawable = Drawable.createFromStream(is, "src");
            productPic.setImageDrawable(drawable);
            Log.i(TAG, "Picture URL " + mainUrl);
            product_name.setText(productName);

            if (productLevel == 1) {
                text_level.setText("helal");
            } else if (productLevel == 2) {
                text_level.setText("mittel");
            } else if (productLevel == 3) {
                text_level.setText("haram");
            } else if (productLevel == 4) {
                text_level.setText("in analyse");
            }

            if (dialog.isShowing()) {
                dialog.dismiss();
            }

        }

        @Override
        protected Boolean doInBackground(final String... args) {
            try {
                Bundle b = getIntent().getExtras();
                String ean_code = b.getString("barcodestring");


                String readProductNameEan = parse_code.readProductEan(ean_code);
                Log.i(TAG, readProductNameEan);
                productName = parse_code.parseJSONPost("data", "name", readProductNameEan);
                Log.i(TAG, productName);

                productLevel = Integer.parseInt(parse_code.parseJSONPost( "data", "levelId", readProductNameEan));

                String productPicture = parse_code.parseJSONPost("data", "image", readProductNameEan);
                product_pict_part = productPicture.split("/");
                mainUrl = mainUrl + product_pict_part[0] + "/name/" + product_pict_part[1];

                try {
                    is = fetch(mainUrl);
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                return true;
            } catch (Exception e) {
                Log.e("tag", "error", e);
                return false;
            }
        }

    }

}
于 2012-05-31T07:25:33.807 回答