如何Android的PHP与MySQL的连接?Android、PHP、MySQL

2023-09-07 02:22:20 作者:囚徒的自ьáι

我想Android系统使用PHP和MySQL连接创建一个简单的登录活动。我使用4.2版本的Andr​​oid运行genymotion模拟器。

我使用的线程在我的code,使其在后台运行,并使用JSON找回数据比较顺利地。

但问题是,系统崩溃和强制关闭。如果有人可以帮助我,我会AP preciate这一点。

登录猫

  02-02 21:29:46.260:E / AndroidRuntime(1363):致命异常:主要02-02 21:29:46.260:E / AndroidRuntime(1363):android.os.NetworkOnMainThreadException02-02 21:29:46.260:E / AndroidRuntime(1363):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)02-02 21:29:46.260:E / AndroidRuntime(1363):在libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)02-02 21:29:46.260:E / AndroidRuntime(1363):在libcore.io.IoBridge.connectErrno(IoBridge.java:127)02-02 21:29:46.260:E / AndroidRuntime(1363):在libcore.io.IoBridge.connect(IoBridge.java:112)02-02 21:29:46.260:E / AndroidRuntime(1363):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)02-02 21:29:46.260:E / AndroidRuntime(1363):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)02-02 21:29:46.260:E / AndroidRuntime(1363):在java.net.Socket.connect(Socket.java:842)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)02-02 21:29:46.260:E / AndroidRuntime(1363):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)02-02 21:29:46.260:E / AndroidRuntime(1363):在包coderzheaven.JSONParser.makeHtt prequest(JSONParser.java:65)02-02 21:29:46.260:E / AndroidRuntime(1363):在包coderzheaven.AndroidPHPConnectionDemo $ CheckLogin $ 1.run(AndroidPHPConnectionDemo.java:118)02-02 21:29:46.260:E / AndroidRuntime(1363):在android.os.Handler.handleCallback(Handler.java:730)02-02 21:29:46.260:E / AndroidRuntime(1363):在android.os.Handler.dispatchMessage(Handler.java:92)02-02 21:29:46.260:E / AndroidRuntime(1363):在android.os.Looper.loop(Looper.java:137)02-02 21:29:46.260:E / AndroidRuntime(1363):在android.app.ActivityThread.main(ActivityThread.java:5103)02-02 21:29:46.260:E / AndroidRuntime(1363):在java.lang.reflect.Method.invokeNative(本机方法)02-02 21:29:46.260:E / AndroidRuntime(1363):在java.lang.reflect.Method.invoke(Method.java:525)02-02 21:29:46.260:E / AndroidRuntime(1363):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)02-02 21:29:46.260:E / AndroidRuntime(1363):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-02 21:29:46.260:E / AndroidRuntime(1363):在dalvik.system.NativeStart.main(本机方法) 

JSONParser.java

 套餐包coderzheaven。进口java.io.BufferedReader中;进口java.io.IOException异常;进口的java.io.InputStream;进口java.io.InputStreamReader中;进口java.io.UnsupportedEncodingException;进口的java.util.List;进口org.apache.http.HttpEntity;进口org.apache.http.Htt presponse;进口org.apache.http.NameValuePair;进口org.apache.http.client.ClientProtocolException;进口org.apache.http.client.entity.UrlEn codedFormEntity;进口org.apache.http.client.methods.HttpGet;进口org.apache.http.client.methods.HttpPost;进口org.apache.http.client.utils.URLEn codedUtils;进口org.apache.http.impl.client.DefaultHttpClient;进口org.json.JSONException;进口org.json.JSONObject;进口android.util.Log;公共类JSONParser {    静态InputStream为= NULL;    静态的JSONObject jObj = NULL;    静态JSON字符串=;    //构造    公共JSONParser(){    }    //函数得到JSON的网址    //通过HTTP POST或GET mehtod    公众的JSONObject makeHtt prequest(URL字符串,字符串的方法,            清单<&的NameValuePair GT; PARAMS){        //使HTTP请求        尝试{            //检查请求的方法        / *            如果(方法==POST){                //请求方法是POST                // defaultHttpClient                DefaultHttpClient的HttpClient =新DefaultHttpClient();                HttpPost httpPost =新HttpPost(URL);                httpPost.setEntity(新UrlEn codedFormEntity(PARAMS));                HTT presponse HTT presponse = httpClient.execute(httpPost);                HttpEntity httpEntity = HTT presponse.getEntity();                是= httpEntity.getContent();            }            * /             如果(方法==GET){                //请求方法是GET                DefaultHttpClient的HttpClient =新DefaultHttpClient();                字符串中的paramString = URLEn codedUtils.format(参数,可以UTF-8);                网址+ =? +中的paramString;                HTTPGET HTTPGET =新HTTPGET(URL);                HTT presponse HTT presponse = httpClient.execute(HTTPGET);                HttpEntity httpEntity = HTT presponse.getEntity();                是= httpEntity.getContent();            }        }赶上(UnsupportedEncodingException五){            e.printStackTrace();        }赶上(ClientProtocolException E){            e.printStackTrace();        }赶上(IOException异常五){            e.printStackTrace();        }        尝试{            读者的BufferedReader =新的BufferedReader(新的InputStreamReader(                    是,ISO-8859-1),8);            StringBuilder的SB =新的StringBuilder();            串线= NULL;            而((行= reader.readLine())!= NULL){                sb.append(行+\\ n);            }            is.close();            JSON = sb.toString();        }赶上(例外五){            Log.e(缓冲区错误,错误转换结果+ e.toString());        }        //尝试分析字符串到一个JSON对象        尝试{            jObj =新的JSONObject(JSON);        }赶上(JSONException E){            Log.e(JSON解析器,错误分析数据+ e.toString());        }        //返回JSON字符串        返回jObj;    }} 

AndroidPHPConnectionDemo

 套餐包coderzheaven。进口的java.util.ArrayList;进口的java.util.List;进口org.apache.http.Htt presponse;进口org.apache.http.NameValuePair;进口org.apache.http.client.HttpClient;进口org.apache.http.client.methods.HttpPost;进口org.apache.http.message.BasicNameValuePair;进口org.json.JSONArray;进口org.json.JSONException;进口org.json.JSONObject;进口android.app.Activity;进口android.app.ProgressDialog;进口android.os.AsyncTask;进口android.os.Bundle;进口android.util.Log;进口android.view.View;进口android.view.View.OnClickListener;进口android.widget.Button;进口android.widget.EditText;进口android.widget.TextView;公共类AndroidPHPConnectionDemo延伸活动{    按钮B;    的EditText等,通过;    字符串的用户名,密码;    TextView的电视;    HttpPost httppost;    StringBuffer的缓冲区;    HTT presponse响应;    HttpClient的HttpClient的;    清单<&的NameValuePair GT; namevaluepairs中;    串PID;    //进度对话框    私人ProgressDialog pDialog;    // JSON解析器类    JSONParser jsonParser =新JSONParser();    私有静态最后弦乐url_check_login =htt​​p://10.0.3.2/check.php;    // JSON节点名称    私有静态最后弦乐TAG_SUCCESS =成功;    私有静态最后弦乐TAG_PERSON =人;    私有静态最后弦乐TAG_PID =PID;    私有静态最后弦乐TAG_NAME =用户名;    私有静态最后弦乐TAG_pass =密码;    @覆盖    公共无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);        的setContentView(R.layout.main);        B =(按钮)findViewById(R.id.Button01);        等=(EditText上)findViewById(R.id.username);        通=(EditText上)findViewById(R.id.password);        电视=(的TextView)findViewById(R.id.tv);        b.setOnClickListener(新OnClickListener(){            @覆盖            公共无效的onClick(视图v){                // 登录();                //获取在后台线程完整的人的详细信息                新CheckLogin()执行();            }        });    }    / **     *背景异步任务中获得完整的人的详细信息     * * /    类CheckLogin扩展的AsyncTask<字符串,字符串,字符串> {        / **         *启动后台线程显示进度对话框之前         * * /        @覆盖        在preExecute保护无效(){            super.on preExecute();            pDialog =新ProgressDialog(AndroidPHPConnectionDemo.this);            pDialog.setMessage(载入个人详细资料请稍候......);            pDialog.setIndeterminate(假);            pDialog.setCancelable(真);            pDialog.show();        }        / **         *获取个人信息在后台线程         * * /        @覆盖        保护字符串doInBackground(字符串...为arg0){            // TODO自动生成方法存根            //从后台线程更新界面            runOnUiThread(新的Runnable(){                公共无效的run(){                    //检查成功标记                    诠释成功;                    尝试{                        //大厦参数                        清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();                        params.add(新BasicNameValuePair(PID,PID));                        //通过HTTP请求获得个人信息                        //注意细节的人将URL使用GET请求                        JSONObject的JSON = jsonParser.makeHtt prequest(                                url_check_login,GET,则params);                        //检查你的日志,JSON响应                        Log.d(单人详细信息,json.toString());                        // JSON的成功标签                        成功= json.getInt(TAG_SUCCESS);                        如果(成功== 1){                            //成功接收人信息                            JSONArray productObj = JSON                                    .getJSONArray(TAG_PERSON); // JSON数组                            //从JSON数组的第一个产品对象                            的JSONObject人= productObj.getJSONObject(0);                            et.setText(person.getString(TAG_NAME));                            pass.setText(person.getString(TAG_pass));                            Log.e(在登录成功,成功登录);                        }                        其他{                            //产品具有pid未找到                        }                    }赶上(JSONException E){                        e.printStackTrace();                    }                }            });            返回null;        }        / **         *在完成后台任务之后辞退进度对话框         * ** /        保护无效onPostExecute(字符串FILE_URL){            //关闭该对话框一旦得了所有细节            pDialog.dismiss();        }    } 
Android连接mysql demo Android实现登陆功能,Android与服务器数据交互,使用tomcat mysql实现登陆的demo程序,web端和android都可实现登陆...

check.php

 < PHPrequire_once('db_config.php');//数组JSON响应$响应=阵列();//如果(使用isset($ _ GET ['名']),并使用isset($ _ POST ['密码'])){  如果(使用isset($ _ GET ['PID'])){// $用户名= $ _ POST [用户名];// $密码= $ _ POST ['密码'];     $ PID = $ _GET ['PID'];// $ query_search =选择用户名,从会员密码其中username ='。$用户名。'和密码='。$的密码。 ';     $ query_search ='$ PID。从哪里成员PID =选择';     $ query_exec =的mysql_query($ query_search)或死亡(mysql_error());   如果(mysql_num_rows($ query_exec)大于0)   {        $结果= mysql_fetch_array($ query_exec);        $ =人阵();        $人['用户名'] = $结果[用户名];        $人['密码'] = $结果['密码'];   //成功        $响应[成功] = 1;   //用户节点        $响应[人] =阵列();        array_push($响应[人],$人);   //呼应JSON响应        回声json_en code($响应);    }    其他    {   //没有用户发现            $响应[成功] = 0;            $响应[消息] =找不到用户;   //回声没有用户JSON           回声json_en code($响应);    }}其他{    //必填字段缺失    $响应[成功] = 0;    $响应[消息] =必填字段(s)是失踪;    //呼应JSON响应    回声json_en code($响应);}?> 

解决方案

问题是AsyncTask的内部runOnUiThread。你是因为你占用UI线程太久获取例外。使用AsyncTask的是做正确的事,但你从内部调用它runOnUiThread,这没有任何意义,因为那时它不再是异步的。

从内取出它的runOnUiThread部分doInBackground()。 保留值要显示在屏幕上作为异步任务的成员或结果模板参数。 放入postExecute中的setText调用,因为这是在UI上运行主题。

事情是这样的:

  / ** *背景异步任务中获得完整的人的详细信息 * * /类CheckLogin扩展的AsyncTask<字符串,字符串,字符串> {    JSONArray productObj;    / **     *启动后台线程显示进度对话框之前     * * /    @覆盖    在preExecute保护无效(){        super.on preExecute();        pDialog =新ProgressDialog(AndroidPHPConnectionDemo.this);        pDialog.setMessage(载入个人详细资料请稍候......);        pDialog.setIndeterminate(假);        pDialog.setCancelable(真);        pDialog.show();    }    / **     *获取个人信息在后台线程     * * /    @覆盖    保护字符串doInBackground(字符串...为arg0){        // TODO自动生成方法存根                诠释成功;                尝试{                    //大厦参数                    清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();                    params.add(新BasicNameValuePair(PID,PID));                    //通过HTTP请求获得个人信息                    //注意细节的人将URL使用GET请求                    JSONObject的JSON = jsonParser.makeHtt prequest(                            url_check_login,GET,则params);                    //检查你的日志,JSON响应                    Log.d(单人详细信息,json.toString());                    // JSON的成功标签                    成功= json.getInt(TAG_SUCCESS);                    如果(成功== 1){                        //成功接收人信息                        productObj = JSON                                .getJSONArray(TAG_PERSON); // JSON数组                    }                    其他{                        //产品具有pid未找到                    }                }赶上(JSONException E){                    e.printStackTrace();                }            }        返回null;    }    / **     *在完成后台任务之后辞退进度对话框     * ** /    保护无效onPostExecute(字符串FILE_URL){        //关闭该对话框一旦得了所有细节        如果(productObj!= NULL){            //从JSON数组的第一个产品对象            的JSONObject人= productObj.getJSONObject(0);            et.setText(person.getString(TAG_NAME));            pass.setText(person.getString(TAG_pass));            Log.e(在登录成功,成功登录);        }        pDialog.dismiss();    }} 

I am trying to connect Android system with PHP and MySQL to create a simple login activity. I am using genymotion emulator running on 4.2 Android version.

I am using the thread in my code to make it run in the background, and using JSON to get back the data in a smooth way.

But the problem is that the system crash and force close. If anyone can help me i will appreciate that.

log cat

02-02 21:29:46.260: E/AndroidRuntime(1363): FATAL EXCEPTION: main
02-02 21:29:46.260: E/AndroidRuntime(1363): android.os.NetworkOnMainThreadException
02-02 21:29:46.260: E/AndroidRuntime(1363):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at libcore.io.IoBridge.connect(IoBridge.java:112)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at java.net.Socket.connect(Socket.java:842)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at pack.coderzheaven.JSONParser.makeHttpRequest(JSONParser.java:65)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at pack.coderzheaven.AndroidPHPConnectionDemo$CheckLogin$1.run(AndroidPHPConnectionDemo.java:118)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at android.os.Handler.handleCallback(Handler.java:730)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at android.os.Looper.loop(Looper.java:137)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at java.lang.reflect.Method.invokeNative(Native Method)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at java.lang.reflect.Method.invoke(Method.java:525)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-02 21:29:46.260: E/AndroidRuntime(1363):     at dalvik.system.NativeStart.main(Native Method)

JSONParser.java

package pack.coderzheaven;

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.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
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() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
        /*
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

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

            }
            */
             if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                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;

    }
}

AndroidPHPConnectionDemo

package pack.coderzheaven;

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

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidPHPConnectionDemo extends Activity {
    Button b;
    EditText et, pass;
    String Username, Password;
    TextView tv;
    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    List<NameValuePair> nameValuePairs;

    String pid;

    // Progress Dialog
    private ProgressDialog pDialog;

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


    private static final String url_check_login = "http://10.0.3.2/check.php";

    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PERSON = "person";
    private static final String TAG_PID = "pid";
    private static final String TAG_NAME = "username";
    private static final String TAG_pass = "password";

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

        b = (Button) findViewById(R.id.Button01);
        et = (EditText) findViewById(R.id.username);
        pass = (EditText) findViewById(R.id.password);
        tv = (TextView) findViewById(R.id.tv);

        b.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // login();

                // Getting complete person details in background thread
                new CheckLogin().execute();

            }
        });
    }

    /**
     * Background Async Task to Get complete person details
     * */
    class CheckLogin extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(AndroidPHPConnectionDemo.this);
            pDialog.setMessage("Loading person details. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        /**
         * Getting person details in background thread
         * */

        @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    // Check for success tag
                    int success;
                    try {
                        // Building Parameters
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("pid", pid));

                        // getting person details by making HTTP request
                        // Note that person details url will use GET request
                        JSONObject json = jsonParser.makeHttpRequest(
                                url_check_login, "GET", params);

                        // check your log for json response
                        Log.d("Single person Details", json.toString());

                        // json success tag
                        success = json.getInt(TAG_SUCCESS);
                        if (success == 1) {
                            // successfully received person details
                            JSONArray productObj = json
                                    .getJSONArray(TAG_PERSON); // JSON Array

                            // get first product object from JSON Array
                            JSONObject person = productObj.getJSONObject(0);

                            et.setText(person.getString(TAG_NAME));
                            pass.setText(person.getString(TAG_pass));

                            Log.e("success in login", "SUCCESS IN LOGIN");

                        }

                        else {
                            // product with pid not found
                        }
                    } 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 got all details
            pDialog.dismiss();
        }
    }

check.php

<?php

require_once('db_config.php'); 


// array for JSON response
$response = array();


//if(isset($_GET['Username'])and isset($_POST['Password'])){

  if(isset($_GET['pid'])){
//   $username = $_POST['Username'];
//   $password = $_POST['Password'];

     $pid = $_GET['pid'];   

//   $query_search = "select username, password from members where username = '".$username."' AND password = '".$password. "'";

     $query_search = "select from members where pid = '".$pid."'";   

     $query_exec = mysql_query($query_search) or die(mysql_error());

   if (mysql_num_rows($query_exec) > 0) 
   {
        $result = mysql_fetch_array($query_exec);

        $person = array();
        $person['username']=$result[username];
        $person['password']=$result['password'];

   // success
        $response["success"] = 1;

   // user node
        $response["person"] = array();

        array_push($response["person"], $person);

   // echoing JSON response
        echo json_encode($response);

    }
    else
    {
   // no user found
            $response["success"] = 0;
            $response["message"] = "No User found";

   // echo no users JSON
           echo json_encode($response);
    }
}
else 
{
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}    
?>

解决方案

The problem is the runOnUiThread inside the AsyncTask. You're getting the exception because you're tying up the UI thread for too long. Using an AsyncTask is the right thing to do, but you're calling runOnUiThread from within it, which doesn't make sense because then it is no longer asynchronous.

Remove the runOnUiThread portion of it from within the doInBackground(). Keep the values you want to display on the screen as members of the async task or as the results template param. Put the setText calls in the postExecute, because that is run on the UI thread.

Something like this:

/**
 * Background Async Task to Get complete person details
 * */
class CheckLogin extends AsyncTask<String, String, String> {

    JSONArray productObj;

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(AndroidPHPConnectionDemo.this);
        pDialog.setMessage("Loading person details. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Getting person details in background thread
     * */

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

                int success;
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("pid", pid));

                    // getting person details by making HTTP request
                    // Note that person details url will use GET request
                    JSONObject json = jsonParser.makeHttpRequest(
                            url_check_login, "GET", params);

                    // check your log for json response
                    Log.d("Single person Details", json.toString());

                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        // successfully received person details
                        productObj = json
                                .getJSONArray(TAG_PERSON); // JSON Array

                    }

                    else {
                        // product with pid not found
                    }
                } 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 got all details


        if ( productObj != null ) {
            // get first product object from JSON Array
            JSONObject person = productObj.getJSONObject(0);

            et.setText(person.getString(TAG_NAME));
            pass.setText(person.getString(TAG_pass));

            Log.e("success in login", "SUCCESS IN LOGIN");
        }

        pDialog.dismiss();
    }
}