尝试连接到本地数据库时出错

时间:2014-08-01 01:55:18

标签: java android eclipse

当我尝试连接到计算机上的本地数据库时,我会得到一系列问题。

07-31 21:29:53.036: I/System.out(1470): 1
07-31 21:29:53.046: I/System.out(1470): 2
07-31 21:29:53.106: I/System.out(1470): 3
07-31 21:29:53.326: W/EGL_emulation(1470): eglSurfaceAttrib not implemented
07-31 21:30:00.126: E/JSON(1470):{"tag":"register","success":0,"error":1,"error_msg":"Error occured in Registartion"}n
07-31 21:30:00.126: I/System.out(1470): 4
07-31 21:30:00.156: I/System.out(1470): 5
07-31 21:30:00.156: I/System.out(1470): ERROR 
07-31 21:30:00.186: W/System.err(1470): java.lang.NullPointerException
07-31 21:30:00.186: W/System.err(1470):     at com.example.skelotong.RegularUsercreation$ruc.doInBackground(RegularUsercreation.java:138)
07-31 21:30:00.196: W/System.err(1470):     at com.example.skelotong.RegularUsercreation$ruc.doInBackground(RegularUsercreation.java:1)
07-31 21:30:00.196: W/System.err(1470):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-31 21:30:00.196: W/System.err(1470):     at  java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-31 21:30:00.196: W/System.err(1470):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-31 21:30:00.206: W/System.err(1470):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-31 21:30:00.206: W/System.err(1470):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-31 21:30:00.206: W/System.err(1470):     at java.lang.Thread.run(Thread.java:841)
07-31 21:30:00.206: I/System.out(1470): 9
07-31 21:30:00.326: D/AndroidRuntime(1470): Shutting down VM
07-31 21:30:00.326: W/dalvikvm(1470): threadid=1: thread exiting with uncaught exception (group=0xb1a32ba8)
07-31 21:30:00.336: E/AndroidRuntime(1470): FATAL EXCEPTION: main
07-31 21:30:00.336: E/AndroidRuntime(1470): Process: com.example.skelotong, PID: 1470
07-31 21:30:00.336: E/AndroidRuntime(1470): java.lang.NullPointerException
07-31 21:30:00.336: E/AndroidRuntime(1470):     at com.example.skelotong.RegularUsercreation$ruc.onPostExecute(RegularUsercreation.java:184)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at com.example.skelotong.RegularUsercreation$ruc.onPostExecute(RegularUsercreation.java:1)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at   android.os.AsyncTask.finish(AsyncTask.java:632)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at android.os.Looper.loop(Looper.java:136)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at java.lang.reflect.Method.invokeNative(Native Method)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at java.lang.reflect.Method.invoke(Method.java:515)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-31 21:30:00.336: E/AndroidRuntime(1470):     at dalvik.system.NativeStart.main(Native Method)
07-31 21:30:03.356: I/Process(1470): Sending signal. PID: 1470 SIG: 9
07-31 21:30:05.946: D/dalvikvm(1499): GC_FOR_ALLOC freed 179K, 12% free 3467K/3932K, paused 141ms, total 144ms
07-31 21:30:06.636: D/(1499): HostConnection::get() New Host Connection established 0xb8f39498, tid 1499
07-31 21:30:06.786: W/EGL_emulation(1499): eglSurfaceAttrib not implemented
07-31 21:30:06.796: D/OpenGLRenderer(1499): Enabling debug mode 0

以下是我尝试运行的代码。

import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class RegularUsercreation extends ActionBarActivity implements Runnable {
Button btnRegister;
Button btnLinkToLogin;
EditText inputFullName;
EditText inputEmail;
EditText inputPassword;
TextView registerErrorMsg;
EditText inputUsername;
EditText dateofbirth;
EditText zip;

// EditText skils;
// JSON Response node names
private static String KEY_SUCCESS = "success";
// private static String KEY_ERROR = "error";
// private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
private Handler mHandler = new Handler(Looper.getMainLooper());

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

public void clicker(View view) {
    new ruc().execute((String[]) null);

}

public void ss(View view) {
    Intent i = new Intent(getApplicationContext(), RegisterClass.class);
    startActivity(i);
    // Close Registration View
    finish();
}

private class ruc extends AsyncTask<String, Integer, Boolean> {
    final ProgressDialog pd = new ProgressDialog(RegularUsercreation.this);

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pd.setMessage("Please wait");
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pd.setCanceledOnTouchOutside(false);
        pd.setCancelable(false);
        pd.setIndeterminate(true);
        pd.show();
        System.out.println("1");
    }

    @Override
    protected Boolean doInBackground(String... params) {
        System.out.println(2);

        // Importing all assets like buttons, text fields
        inputFullName = (EditText) findViewById(R.id.FullName2);
        inputEmail = (EditText) findViewById(R.id.Email2);
        inputPassword = (EditText) findViewById(R.id.Password2);
        inputUsername = (EditText) findViewById(R.id.Username2);
        dateofbirth = (EditText) findViewById(R.id.DOB2);
        zip = (EditText) findViewById(R.id.ZipCode2);
        btnRegister = (Button) findViewById(R.id.create2);
        btnLinkToLogin = (Button) findViewById(R.id.cancel2);
        registerErrorMsg = (TextView) findViewById(R.id.errormessage3);
        // skils = (EditText) findViewById(R.id.skills1);
        System.out.println("3");

        // Register Button Click event

        String name = inputFullName.getText().toString();
        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();
        String usernmae = inputUsername.getText().toString();
        String birth = dateofbirth.getText().toString();
        String zipcode = zip.getText().toString();
        // String skills = skils.getText().toString();
        UserFunction userFunction = new UserFunction();
        JSONObject json = userFunction.registerUser(name, email, password,
                usernmae, birth, zipcode);
        System.out.println(4);

        // check for login response
        // check for login response
        try {
            if (json.getString(KEY_SUCCESS) != null) {

                String res = json.getString(KEY_SUCCESS);
                System.out.println("5");

                if (Integer.parseInt(res) == 1) {
                    publishProgress(1);
                    // user successfully registred
                    // Store user details in SQLite Database
                    DatabaseHandler db = new DatabaseHandler(
                            getApplicationContext());
                    JSONObject json_user = json.getJSONObject("user");
                    System.out.println(6);

                    // Clear all previous data in database
                    userFunction.logoutUser(getApplicationContext());
                    db.addUser(json_user.getString(KEY_NAME),
                            json_user.getString(KEY_EMAIL),
                            json.getString(KEY_UID),
                            json_user.getString(KEY_CREATED_AT));
                    System.out.println("7");

                    return true;
                } else {

                    System.out.println("ERROR");
                    // Error in registration
                    //registerErrorMsg
                        //  .setText("Error occured in registration");
                    return false;

                }
            }
        } catch (JSONException e) {
            publishProgress(1);
            e.printStackTrace();
            System.out.println("9");
            return false;
        } 
        return true;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
        if (values.equals(1)) {
            pd.setMessage("Almost Done");
        }
    }

    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        if (result == true) {
            // launch dashboard
            Intent dashboard = new Intent(getApplicationContext(),
                    HomePage.class);
            // Close all views before launching Dashboard
            dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            startActivity(dashboard);
            // Close Registration Screen
            finish();
        }
        if (result == false) {
            registerErrorMsg.setText("Error occured in registration");
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.regular_usercreation, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void run() {
    // TODO Auto-generated method stub
    mHandler.post(new Runnable() {
        public void run() {
            new ruc();
            ruc.execute(RegularUsercreation.this);

        }
    });
}

}

如何解决这个问题以及将来可以采取哪些措施来防止这种情况发生? 也是为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

来自res的外观的

在这些行中是空的或某些东西是空的

            if (Integer.parseInt(res) == 1) {
                publishProgress(1);
                // user successfully registred
                // Store user details in SQLite Database
                DatabaseHandler db = new DatabaseHandler(
                        getApplicationContext());
                JSONObject json_user = json.getJSONObject("user");

然而很难确定。 publishProgressgetApplicationContext也可能会抛出NullPointerException。尝试这个来调试问题:因为你正在使用eclipse,你可以使用调试器而不是println,它的方式更强大。 A useful tutorial。如果您不想使用调试器,请打印值而不是数字。它们将提供更多有用的背景。