2016-09-13 1190 views
0

我的項目有問題。 我有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(); 
    } 

} 

}

+0

把每個班在適當命名的專用文件(和改變'新ProgressDialog(MainActivity.this);''到新ProgressDialog(Insert.this);') – 2016-09-13 18:23:16

+0

不能使用訪問'context' 'MainActivity.this'因爲。你需要爲該類提供一個有效的'context'(例如在構造函數中) – Shaishav

回答

0

中的AsyncTask的構造函數,你需要通過上下文&使用它時,你需要。

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(); 
    } 
} 

in mainActivity use this like this。

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