错误:不是封闭类

时间:2016-09-13 18:21:13

标签: java android mysql

我的项目有问题。 我有2个类:MainActivity和Insert。 我在“插入”课中给了我一个错误。  dialog = new ProgressDialog(MainActivity.this);  我的错误是“不是一个封闭的类”。  请帮帮我

代码插入:

public class Insert extends AsyncTask<String, Void, Boolean> {

ProgressDialog dialog;

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dialog = new ProgressDialog(MainActivity.this); //error is here
    dialog.setMessage("Inserting details, please wait");
    dialog.setTitle("Connecting... ");
    dialog.show();
    dialog.setCancelable(false);
}

@Override
protected Boolean doInBackground(String... urls) {


    try {

        List<NameValuePair> insert = new ArrayList<NameValuePair>();
        insert.add(new BasicNameValuePair("name", nameStr));
        insert.add(new BasicNameValuePair("country", countryStr));
        insert.add(new BasicNameValuePair("email", emailStr));
        insert.add(new BasicNameValuePair("hobbies", hobbiesStr));


        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(
                "http://bookcompr.netne.net/input.php");
        httpPost.setEntity(new UrlEncodedFormEntity(insert));

        HttpResponse response = httpClient.execute(httpPost);

        HttpEntity entity = response.getEntity();

        return true;


    } catch (IOException e) {
        e.printStackTrace();

    }


    return false;
}

protected void onPostExecute(Boolean result) {
    dialog.cancel();

    AlertDialog.Builder ac = new AlertDialog.Builder(MainActivity.this);//error is here

    ac.setTitle("Result");
    ac.setMessage("Details Successfully Inserted");
    ac.setCancelable(true);

    ac.setPositiveButton(
            "Ok",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();

                }
            });

    AlertDialog alert = ac.create();
    alert.show();
}

}

CODE MainActivity

public class MainActivity extends AppCompatActivity {

EditText name, country, email, hobbies;

Button insert;

String nameStr, countryStr, emailStr, hobbiesStr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    name = (EditText) findViewById(R.id.name);
    country = (EditText) findViewById(R.id.country);
    email = (EditText) findViewById(R.id.email);
    hobbies = (EditText) findViewById(R.id.hobbies);

    insert = (Button) findViewById(R.id.insert);

    insert.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            nameStr = name.getText().toString();
            countryStr = country.getText().toString();
            emailStr = email.getText().toString();
            hobbiesStr = hobbies.getText().toString();

            new Insert().execute();
        }
    });
}

public class Insert extends AsyncTask<String, Void, Boolean> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(MainActivity.this);
        dialog.setMessage("Inserting details, please wait");
        dialog.setTitle("Connecting... ");
        dialog.show();
        dialog.setCancelable(false);
    }

    @Override
    protected Boolean doInBackground(String... urls) {


        try {

            List<NameValuePair> insert = new ArrayList<NameValuePair>();
            insert.add(new BasicNameValuePair("name", nameStr));
            insert.add(new BasicNameValuePair("country", countryStr));
            insert.add(new BasicNameValuePair("email", emailStr));
            insert.add(new BasicNameValuePair("hobbies", hobbiesStr));


            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(
                    "http://bookcompr.netne.net/input.php"); // link to connect to database
            httpPost.setEntity(new UrlEncodedFormEntity(insert));

            HttpResponse response = httpClient.execute(httpPost);

            HttpEntity entity = response.getEntity();

            return true;


        } catch (IOException e) {
            e.printStackTrace();

        }


        return false;
    }

    protected void onPostExecute(Boolean result) {
        dialog.cancel();

        AlertDialog.Builder ac = new AlertDialog.Builder(MainActivity.this);
        ac.setTitle("Result");
        ac.setMessage("Details Successfully Inserted");
        ac.setCancelable(true);

        ac.setPositiveButton(
                "Ok",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();

                    }
                });

        AlertDialog alert = ac.create();
        alert.show();
    }

}

}

1 个答案:

答案 0 :(得分:0)

在AsyncTask的构造函数中,您需要传递Context&amp;在需要时使用它。

public class Insert extends AsyncTask<Void, Void, String> {
   private Context mContext;
   public Insert (Context context){
        mContext = context;
   }

   protected void  onPreExecute() {
      super.onPreExecute();
      ProgressDialog pd= new ProgressDialog(mContext); //changes is here
      pd.setMessage("your message");
      pd.show();
   }
}
mainActivity中的

就像这样使用它。

Insert insert = new Insert(getApplicationContext());
insert.execute();