插入数据库AsyncTask错误

时间:2015-03-20 19:21:59

标签: java android mysql android-asynctask

我在电影上制作了一个Android应用程序。我有数据库电影。在应用程序中,我在ListView中显示电影,然后添加一部新电影。 当我尝试在我的dataBase中插入一部新电影时,我遇到了问题。实际上,我在doInBackground中的AsyncTask中有n个错误,但我不知道为什么。当我使用调试器时,我拒绝在行的doInBackground的开头:     String title = eTitle.getText().toString();

所以我给你我的java代码:

    public class AddMovie extends Activity implements OnClickListener{

 // Edit and Button that the user fill
  private EditText eTitle, eActors, eDirector, eKind, eDate, eImage, eSummary ;
  private Button bAdd;

  // Progress Dialog
  private ProgressDialog pDialog;

  //JSON parser class
  //JSONParser jsonParser = new JSONParser();
  private static final String TAG_SUCCESS = "success";
  private static final String TAG_MESSAGE = "message";

  @Override
  protected void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_movie);      
        eTitle = (EditText)findViewById(R.id.title);
        eActors = (EditText)findViewById(R.id.actors); 
        eDirector = (EditText)findViewById(R.id.director);
        eKind = (EditText)findViewById(R.id.kind);
        eDate = (EditText)findViewById(R.id.date);
        eImage = (EditText)findViewById(R.id.image);
        eSummary = (EditText)findViewById(R.id.summary);
        bAdd = (Button)findViewById(R.id.addMovies);
        bAdd.setOnClickListener(this);
              }
  public void onClick(View v) {
         // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.addMovies:
                    new AttempMovie().execute();
        // here we have used, switch case, because on login activity you may //also want to show registration button, so if the user is new ! we can go the //registration activity , other than this we could also do this without switch //case.
        default:
              break;
        }
  }

  class AttempMovie extends AsyncTask<String, String, String> {
         /**
     * Before starting background thread Show Progress Dialog
     * */
        boolean failure = false;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(AddMovie.this);
        pDialog.setMessage("Attempting for add new movie...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

        @Override
        protected String doInBackground(String... args) {
              // TODO Auto-generated method stub
               // here Check for success tag
        int success;
        String title = eTitle.getText().toString();
        String actors = eActors.getText().toString();
        String director = eDirector.getText().toString();
        String kind = eKind.getText().toString();
        String date = eDate.getText().toString();
        String image = eImage.getText().toString();
        String summary = eSummary.getText().toString();
        try {
            // Building parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("title", title));
            params.add(new BasicNameValuePair("actors", actors));
            params.add(new BasicNameValuePair("director", director));
            params.add(new BasicNameValuePair("kind", kind));
            params.add(new BasicNameValuePair("date", date));
            params.add(new BasicNameValuePair("image", image));
            params.add(new BasicNameValuePair("summary", summary));

            Log.d("request!", "starting");

            JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.0.35/BD_Enterprise_Mobility_Movies/add_movie.php");

            // checking  log for json response
            Log.d("Register attempt", json.toString());

            // success tag for json
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) 
            {
              Log.d("Successfully Register!", json.toString());
              return json.getString(TAG_MESSAGE);
            }
            else
            {
              Log.d("Login Failure!", json.getString(TAG_MESSAGE));
              return json.getString(TAG_MESSAGE);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
        }
        /**
     * Once the background process is done we need to  Dismiss the progress dialog asap
     * **/
    protected void onPostExecute(String message) {

        pDialog.dismiss();
        if (message != null){
            Intent i = new Intent(AddMovie.this,MainActivity.class);
            finish();
            // this finish() method is used to tell android os that we are done with current //activity now! Moving to other activity
            startActivity(i);
            Toast.makeText(AddMovie.this, message, Toast.LENGTH_LONG).show();
        }
    }
  } 
}

我还给你JSONfunctions.java

    public class JSONfunctions {

public static JSONObject getJSONfromURL(String url) {
   InputStream is = null;
   String result = "";
   JSONObject json = null;

   // Download JSON data from URL
   try {
       HttpClient httpclient = new DefaultHttpClient();
       HttpPost httppost = new HttpPost(url);
       HttpResponse response = httpclient.execute(httppost);
       HttpEntity entity = response.getEntity();
       is = entity.getContent();

   } catch (Exception e) {
       Log.e("log_tag", "Error in http connection " + e.toString());
   }

   // Convert response to string
   try {
       BufferedReader reader = new BufferedReader(new InputStreamReader(
               is, "iso-8859-1"), 8);
       StringBuilder sb = new StringBuilder();
       String line = null;
       while ((line = reader.readLine()) != null) {
           sb.append(line + "\n");
       }
       is.close();
       result = sb.toString();
   } catch (Exception e) {
       Log.e("log_tag", "Error converting result " + e.toString());
   }

   try {

       json = new JSONObject(result);
   } catch (JSONException e) {
       Log.e("log_tag", "Error parsing data " + e.toString());
   }

   return json;
 }
}

我在logcat中的错误:

     03-20 18:28:19.753: E/AndroidRuntime(14656): FATAL EXCEPTION: AsyncTask #3
03-20 18:28:19.753: E/AndroidRuntime(14656): Process: com.mickKoza.jsonkoza, PID: 14656
03-20 18:28:19.753: E/AndroidRuntime(14656): java.lang.RuntimeException: An error occured while executing doInBackground()
03-20 18:28:19.753: E/AndroidRuntime(14656):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.lang.Thread.run(Thread.java:818)
03-20 18:28:19.753: E/AndroidRuntime(14656): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
03-20 18:28:19.753: E/AndroidRuntime(14656):    at com.mickKoza.jsonkoza.AddMovie$AttempMovie.doInBackground(AddMovie.java:81)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at com.mickKoza.jsonkoza.AddMovie$AttempMovie.doInBackground(AddMovie.java:1)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-20 18:28:19.753: E/AndroidRuntime(14656):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-20 18:28:19.753: E/AndroidRuntime(14656):    ... 4 more
03-20 18:28:20.184: E/WindowManager(14656): android.view.WindowLeaked: Activity com.mickKoza.jsonkoza.AddMovie has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{3e1b7378 V.E..... R......D 0,0-1026,288} that was originally added here
03-20 18:28:20.184: E/WindowManager(14656):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
03-20 18:28:20.184: E/WindowManager(14656):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
03-20 18:28:20.184: E/WindowManager(14656):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
03-20 18:28:20.184: E/WindowManager(14656):     at android.app.Dialog.show(Dialog.java:298)
03-20 18:28:20.184: E/WindowManager(14656):     at com.mickKoza.jsonkoza.AddMovie$AttempMovie.onPreExecute(AddMovie.java:74)
03-20 18:28:20.184: E/WindowManager(14656):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
03-20 18:28:20.184: E/WindowManager(14656):     at android.os.AsyncTask.execute(AsyncTask.java:535)
03-20 18:28:20.184: E/WindowManager(14656):     at com.mickKoza.jsonkoza.AddMovie.onClick(AddMovie.java:54)
03-20 18:28:20.184: E/WindowManager(14656):     at android.view.View.performClick(View.java:4756)
03-20 18:28:20.184: E/WindowManager(14656):     at android.view.View$PerformClick.run(View.java:19749)
03-20 18:28:20.184: E/WindowManager(14656):     at android.os.Handler.handleCallback(Handler.java:739)
03-20 18:28:20.184: E/WindowManager(14656):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-20 18:28:20.184: E/WindowManager(14656):     at android.os.Looper.loop(Looper.java:135)
03-20 18:28:20.184: E/WindowManager(14656):     at android.app.ActivityThread.main(ActivityThread.java:5221)
03-20 18:28:20.184: E/WindowManager(14656):     at java.lang.reflect.Method.invoke(Native Method)
03-20 18:28:20.184: E/WindowManager(14656):     at java.lang.reflect.Method.invoke(Method.java:372)
03-20 18:28:20.184: E/WindowManager(14656):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-20 18:28:20.184: E/WindowManager(14656):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

感谢您的帮助

迈克尔

1 个答案:

答案 0 :(得分:0)

这些视图中的一个(或可能是全部)为空:

String title = eTitle.getText().toString();
String actors = eActors.getText().toString();
String director = eDirector.getText().toString();
String kind = eKind.getText().toString();
String date = eDate.getText().toString();
String image = eImage.getText().toString();
String summary = eSummary.getText().toString();

您在onCreate期间引用查看这些视图的视图ID可能不正确吗?