简体   繁体   中英

having error when trying to MYSQL server in Android

hello i am learning to connect android application with MYSQL using this tutorial.. Tutorial

i want to login and add some comments to the MYSQL database in my hosting. i have done all the steps correctly. but when i try to load the application in the phone .that say "unfortunately the MYSQL has stopped working" and gives me the following error. can some one help me to fix this error please. thank you....

Full error stack

02-08 15:21:43.578: E/AndroidRuntime(9705): FATAL EXCEPTION: AsyncTask #1
02-08 15:21:43.578: E/AndroidRuntime(9705): java.lang.RuntimeException: An error occured while executing doInBackground()
02-08 15:21:43.578: E/AndroidRuntime(9705):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.lang.Thread.run(Thread.java:838)
02-08 15:21:43.578: E/AndroidRuntime(9705): Caused by: java.lang.NullPointerException
02-08 15:21:43.578: E/AndroidRuntime(9705):     at lk.adspace.mysqltest.Login$AttemptLogin.doInBackground(Login.java:141)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at lk.adspace.mysqltest.Login$AttemptLogin.doInBackground(Login.java:1)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-08 15:21:43.578: E/AndroidRuntime(9705):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-08 15:21:43.578: E/AndroidRuntime(9705):     ... 4 more


02-08 15:21:43.928: D/OpenGLRenderer(9705): Flushing caches (mode 0)
02-08 15:21:43.985: D/OpenGLRenderer(9705): Flushing caches (mode 0)
02-08 15:21:44.342: D/OpenGLRenderer(9705): Flushing caches (mode 1)
02-08 15:21:44.345: D/InputMethodManager(9705): deactivate the inputconnection in ControlledInputConnectionWrapper.
02-08 15:21:44.355: D/OpenGLRenderer(9705): Flushing caches (mode 0)


02-08 15:21:44.363: E/WindowManager(9705): Activity lk.adspace.mysqltest.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41344e60 V.E..... R......D 0,0-456,144} that was originally added here
02-08 15:21:44.363: E/WindowManager(9705): android.view.WindowLeaked: Activity lk.adspace.mysqltest.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41344e60 V.E..... R......D 0,0-456,144} that was originally added here
02-08 15:21:44.363: E/WindowManager(9705):  at android.view.ViewRootImpl.<init>    (ViewRootImpl.java:409)
02-08 15:21:44.363: E/WindowManager(9705):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:218)
02-08 15:21:44.363: E/WindowManager(9705):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:70)
02-08 15:21:44.363: E/WindowManager(9705):  at android.app.Dialog.show(Dialog.java:281)
02-08 15:21:44.363: E/WindowManager(9705):  at lk.adspace.mysqltest.Login$AttemptLogin.onPreExecute(Login.java:110)
02-08 15:21:44.363: E/WindowManager(9705):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
02-08 15:21:44.363: E/WindowManager(9705):  at android.os.AsyncTask.execute(AsyncTask.java:534)
02-08 15:21:44.363: E/WindowManager(9705):  at lk.adspace.mysqltest.Login.onClick(Login.java:83)
02-08 15:21:44.363: E/WindowManager(9705):  at android.view.View.performClick(View.java:4212)
02-08 15:21:44.363: E/WindowManager(9705):  at android.view.View$PerformClick.run(View.java:17476)
02-08 15:21:44.363: E/WindowManager(9705):  at android.os.Handler.handleCallback(Handler.java:800)
02-08 15:21:44.363: E/WindowManager(9705):  at android.os.Handler.dispatchMessage(Handler.java:100)
02-08 15:21:44.363: E/WindowManager(9705):  at android.os.Looper.loop(Looper.java:194)
02-08 15:21:44.363: E/WindowManager(9705):  at android.app.ActivityThread.main(ActivityThread.java:5371)
02-08 15:21:44.363: E/WindowManager(9705):  at java.lang.reflect.Method.invokeNative(Native Method)
02-08 15:21:44.363: E/WindowManager(9705):  at java.lang.reflect.Method.invoke(Method.java:525)
02-08 15:21:44.363: E/WindowManager(9705):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
02-08 15:21:44.363: E/WindowManager(9705):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-08 15:21:44.363: E/WindowManager(9705):  at dalvik.system.NativeStart.main(Native Method)
02-08 15:21:44.364: D/OpenGLRenderer(9705): Flushing caches (mode 0)

here is my login.java file

    package lk.adspace.mysqltest;

    import java.util.ArrayList;
    import java.util.List;

    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class Login extends Activity implements OnClickListener{

        private EditText user, pass;
        private Button mSubmit, mRegister;

         // Progress Dialog
        private ProgressDialog pDialog;

        // JSON parser class
        JSONParser jsonParser = new JSONParser();

        //php login script location:

        //localhost :
        //testing on your device
        //put your local ip instead,  on windows, run CMD > ipconfig
        //or in mac's terminal type ifconfig and look for the ip under en0 or en1
       // private static final String LOGIN_URL = "http://xxx.xxx.x.x:1234/webservice/login.php";

        //testing on Emulator:
        private static final String LOGIN_URL = "http://www.adspace.lk/webservice/login.php";

      //testing from a real server:
        //private static final String LOGIN_URL = "http://www.yourdomain.com/webservice/login.php";

        //JSON element ids from repsonse of php script:
        private static final String TAG_SUCCESS = "success";
        private static final String TAG_MESSAGE = "message";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);

            //setup input fields
            user = (EditText)findViewById(R.id.username);
            pass = (EditText)findViewById(R.id.password);

            //setup buttons
            mSubmit = (Button)findViewById(R.id.login);
            mRegister = (Button)findViewById(R.id.register);

            //register listeners
            mSubmit.setOnClickListener(this);
            mRegister.setOnClickListener(this);



        }


        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
            case R.id.login:
                    new AttemptLogin().execute();
                break;
            case R.id.register:
                    Intent i = new Intent(this, Register.class);
                    startActivity(i);
                break;

            default:
                break;
            }
        }


        class AttemptLogin extends AsyncTask<String, String, String> {

             /**
             * Before starting background thread Show Progress Dialog
             * */
            boolean failure = false;

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










            @Override
            protected String doInBackground(String... args) {
                // TODO Auto-generated method stub
                 // Check for success tag
                int success;
                String username = user.getText().toString();
                String password = pass.getText().toString();
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("username", username));
                    params.add(new BasicNameValuePair("password", password));

                    Log.d("request!", "starting");
                    // getting product details by making HTTP request
                    JSONObject json = jsonParser.makeHttpRequest(
                           LOGIN_URL, "POST", params);

                    // check your log for json response
                    Log.d("Login attempt", json.toString());




                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        Log.d("Login Successful!", json.toString());
                        // save user data
                        SharedPreferences sp = PreferenceManager
                                .getDefaultSharedPreferences(Login.this);
                        Editor edit = sp.edit();
                        edit.putString("username", username);
                        edit.commit();

                        //Intent i = new Intent(Login.this, ReadComments.class);
                        //finish();
                        //startActivity(i);
                        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;

            }
            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog once product deleted
                pDialog.dismiss();
                if (file_url != null){
                    Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
                }

                Intent i = new Intent(Login.this, ReadComments.class);
                finish();
                startActivity(i); 
            }

        }

    }

JSONParser.java file

    package lk.adspace.mysqltest;


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.util.List;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.util.Log;

    public class JSONParser {

        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";

        // constructor
        public JSONParser() {

        }

        public JSONObject getJSONFromUrl(String url) {

            // Making HTTP request
            try {
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

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

            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();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }

            // try parse the string to a JSON object
            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }

            // return JSON String
            return jObj;

        }

        public JSONObject makeHttpRequest(String loginUrl, String string,
                List<NameValuePair> params) {
            // TODO Auto-generated method stub
            return null;
        }
    }

Manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="lk.adspace.mysqltest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="lk.adspace.mysqltest.Login"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="lk.adspace.mysqltest.Register"
        android:label="@string/app_name"  >
    </activity>
    <activity
        android:name="lk.adspace.mysqltest.AddComment"
        android:label="@string/app_name"  >
    </activity>
     <activity
        android:name="lk.adspace.mysqltest.ReadComments"
        android:label="@string/app_name"  >
    </activity>
</application>
</manifest>

Start your new activity on onPostExecute method instead on doInBackground

@Override
            protected String doInBackground(String... args) {
                // TODO Auto-generated method stub
                 // Check for success tag
                int success;
                String username = user.getText().toString();
                String password = pass.getText().toString();
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("username", username));
                    params.add(new BasicNameValuePair("password", password));

                    Log.d("request!", "starting");
                    // getting product details by making HTTP request
                    JSONObject json = jsonParser.makeHttpRequest(
                           LOGIN_URL, "POST", params);

                    // check your log for json response
                    Log.d("Login attempt", json.toString());






                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        Log.d("Login Successful!", json.toString());
                        // save user data
                        SharedPreferences sp = PreferenceManager
                                .getDefaultSharedPreferences(Login.this);
                        Editor edit = sp.edit();
                        edit.putString("username", username);
                        edit.commit();


                        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;

            }
            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog once product deleted
                pDialog.dismiss();
                if (file_url != null){
                    Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
                }
                        Intent i = new Intent(Login.this, ReadComments.class);
                        finish();
                        startActivity(i);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM