Android的PHP与MySQL强制关闭连接 [英] Android Connecting with PHP and MySql Force Close

查看:190
本文介绍了Android的PHP与MySQL强制关闭连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写的,需要登录和注册申请,所以我期待在网上一些教程。我也买和在线托管服务器来存储我的数据库。不过,我不断收到运行时错误,同时运行的应用程序。我一直在刮一整天,仍然不知道这个问题。我倒是AP preciate如果任何人都可以给我一些提示或线索,谢谢你。

日志猫错误

  11-14 22:22:13.071:E / AndroidRuntime(12901):致命异常:主要
11-14 22:22:13.071:E / AndroidRuntime(12901):android.os.NetworkOnMainThreadException
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-14 22:22:13.071:E / AndroidRuntime(12901):在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-14 22:22:13.071:E / AndroidRuntime(12901):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-14 22:22:13.071:E / AndroidRuntime(12901):在java.net.InetAddress.getAllByName(InetAddress.java:214)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
11-14 22:22:13.071:E / AndroidRuntime(12901):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-14 22:22:13.071:E / AndroidRuntime(12901):在com.example.trafficmaster.library.JSONParser.getJSONFromUrl(JSONParser.java:42)
11-14 22:22:13.071:E / AndroidRuntime(12901):在com.example.trafficmaster.library.UserFunctions.registerUser(UserFunctions.java:61)
11-14 22:22:13.071:E / AndroidRuntime(12901):在com.example.trafficmaster.RegisterActivity $ 1.onClick(RegisterActivity.java:55)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.view.View.performClick(View.java:4211)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.view.View $ PerformClick.run(View.java:17267)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.os.Handler.handleCallback(Handler.java:615)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.os.Handler.dispatchMessage(Handler.java:92)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.os.Looper.loop(Looper.java:137)
11-14 22:22:13.071:E / AndroidRuntime(12901):在android.app.ActivityThread.main(ActivityThread.java:4898)
11-14 22:22:13.071:E / AndroidRuntime(12901):在java.lang.reflect.Method.invokeNative(本机方法)
11-14 22:22:13.071:E / AndroidRuntime(12901):在java.lang.reflect.Method.invoke(Method.java:511)
11-14 22:22:13.071:E / AndroidRuntime(12901):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-14 22:22:13.071:E / AndroidRuntime(12901):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-14 22:22:13.071:E / AndroidRuntime(12901):在dalvik.system.NativeStart.main(本机方法)
11-14 22:22:18.251:D / dalvikvm(12901):GC_CONCURRENT释放357K,免费11%12504K / 13895K,暂停为4ms + 9ms的,总46ms
11-14 22:22:25.251:I /流程(12901):发送信号。 PID:12901 SIG:9

我注册主类

 公共类RegisterActivity延伸活动{
    按钮btnRegister;
    按钮btnLinkToLogin;
    的EditText inputFullName;
    的EditText inputEmail;
    的EditText控件inputPassword;
    TextView的registerErrorMsg;    // JSON响应节点名称
    私人静态字符串KEY_SUCCESS =成功;
    私人静态字符串KEY_ERROR =错误;
    私人静态字符串KEY_ERROR_MSG =ERROR_MSG;
    私人静态字符串KEY_UID =UID;
    私人静态字符串KEY_NAME =名;
    私人静态字符串KEY_EMAIL =电子邮件;
    私人静态字符串KEY_CREATED_AT =created_at;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.register);
        //导入所有的资产如按钮,文本字段
        inputFullName =(EditText上)findViewById(R.id.registerName);
        inputEmail =(EditText上)findViewById(R.id.registerEmail);
        控件inputPassword =(EditText上)findViewById(R.id.registerPassword);
        btnRegister =(按钮)findViewById(R.id.btnRegister);
        btnLinkToLogin =(按钮)findViewById(R.id.btnLinkToLoginScreen);
        registerErrorMsg =(的TextView)findViewById(R.id.register_error);        //注册按钮的Click事件
        btnRegister.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(查看视图){                新MyInnerClass()执行();                字符串名称= inputFullName.getText()的toString()。
                。字符串email = inputEmail.getText()的toString();
                。字符串密码= inputPassword.getText()的toString();
                UserFunctions userFunction =新UserFunctions();
                JSONObject的JSON = userFunction.registerUser(姓名,电子邮件,密码);                //检查登录响应
                尝试{
                    如果(json.getString(KEY_SUCCESS)!= NULL){
                        registerErrorMsg.setText();
                        字符串资源= json.getString(KEY_SUCCESS);
                        如果(的Integer.parseInt(RES)== 1){
                            //用户成功registred
                            在SQLite数据库//存储用户详细信息
                            数据库处理器分贝=新数据库处理器(getApplicationContext());
                            JSONObject的json_user = json.getJSONObject(用户);                            //清除数据库中的所有previous数据
                            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));
                            //启动仪表盘屏幕
                            仪表盘意向=新意图(getApplicationContext(),DashboardActivity.class);
                            //启动仪表板之前关闭所有的意见
                            dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(仪表盘);
                            //关闭注册画面
                            完();
                        }其他{
                            //错误登记
                            registerErrorMsg.setText(错误登记发生);
                        }
                    }
                }赶上(JSONException E){
                    e.printStackTrace();
                }
            }
        });


解决方案

你在主线程中执行(可能慢)网络操作。如果你的目标SDK是11(蜂窝)或更高,这​​将抛出一个 NetworkOnMainThreadException 在蜂窝或以上,因为这种行为可以阻止用户界面,并导致无响应的应用程​​序。

您可以使用一个 的AsyncTask 来解决这个问题,在加载数据的 doInBackground(..)

I was writing an application that required login and registration, so I look up some tutorials on the net. I also bought and online hosting server to store my database. However I keep getting run time error while running the applications. I've been scratching for one whole day and still dont know the problem. I'd appreciate if anyone can give me some hint or clue, thank you.

Log Cat Error

11-14 22:22:13.071: E/AndroidRuntime(12901): FATAL EXCEPTION: main
11-14 22:22:13.071: E/AndroidRuntime(12901): android.os.NetworkOnMainThreadException
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at com.example.trafficmaster.library.JSONParser.getJSONFromUrl(JSONParser.java:42)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at com.example.trafficmaster.library.UserFunctions.registerUser(UserFunctions.java:61)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at com.example.trafficmaster.RegisterActivity$1.onClick(RegisterActivity.java:55)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.view.View.performClick(View.java:4211)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.view.View$PerformClick.run(View.java:17267)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.os.Handler.handleCallback(Handler.java:615)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.os.Looper.loop(Looper.java:137)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at android.app.ActivityThread.main(ActivityThread.java:4898)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at java.lang.reflect.Method.invokeNative(Native Method)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at java.lang.reflect.Method.invoke(Method.java:511)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-14 22:22:13.071: E/AndroidRuntime(12901):    at dalvik.system.NativeStart.main(Native Method)
11-14 22:22:18.251: D/dalvikvm(12901): GC_CONCURRENT freed 357K, 11% free 12504K/13895K, paused 4ms+9ms, total 46ms
11-14 22:22:25.251: I/Process(12901): Sending signal. PID: 12901 SIG: 9

My Register Main Class

public class RegisterActivity extends Activity {
    Button btnRegister;
    Button btnLinkToLogin;
    EditText inputFullName;
    EditText inputEmail;
    EditText inputPassword;
    TextView registerErrorMsg;

    // 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";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);


        // Importing all assets like buttons, text fields
        inputFullName = (EditText) findViewById(R.id.registerName);
        inputEmail = (EditText) findViewById(R.id.registerEmail);
        inputPassword = (EditText) findViewById(R.id.registerPassword);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
        registerErrorMsg = (TextView) findViewById(R.id.register_error);

        // Register Button Click event
        btnRegister.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                new MyInnerClass().execute();

                String name = inputFullName.getText().toString();
                String email = inputEmail.getText().toString();
                String password = inputPassword.getText().toString();
                UserFunctions userFunction = new UserFunctions();
                JSONObject json = userFunction.registerUser(name, email, password);

                // check for login response
                try {
                    if (json.getString(KEY_SUCCESS) != null) {
                        registerErrorMsg.setText("");
                        String res = json.getString(KEY_SUCCESS);
                        if(Integer.parseInt(res) == 1){
                            // user successfully registred
                            // Store user details in SQLite Database
                            DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                            JSONObject json_user = json.getJSONObject("user");

                            // 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));
                            // Launch Dashboard Screen
                            Intent dashboard = new Intent(getApplicationContext(), DashboardActivity.class);
                            // Close all views before launching Dashboard
                            dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(dashboard);
                            // Close Registration Screen
                            finish();
                        }else{
                            // Error in registration
                            registerErrorMsg.setText("Error occured in registration");
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

解决方案

You're performing a (potentially slow) network operation on the main thread. If your target SDK is 11 (Honeycomb) or higher this will throw a NetworkOnMainThreadException on Honeycomb or above, because this behaviour can block the UI and lead to an unresponsive app.

You could use an AsyncTask to get around this, loading the data in its doInBackground(..).

这篇关于Android的PHP与MySQL强制关闭连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆