0

私はAndroidプログラミングが初めてです。

Androidアプリケーションからローカルホストサーバーに新しいレコードを登録しようとしています... http://www.androidhive.info/2012/05/how-to-connect-android-with-phpのチュートリアルに従いました-mysql/

コードはすべて問題なく、アプリケーションを通常どおり実行できますが、[サインアップ] ボタンをクリックした直後にアプリケーション全体が停止しました

以下は私のlogcatです:

05-13 19:36:24.990: E/Trace(31448): error opening trace file: No such file or directory (2)
05-13 19:36:25.425: D/libEGL(31448): loaded /system/lib/egl/libEGL_mali.so
05-13 19:36:25.455: D/libEGL(31448): loaded /system/lib/egl/libGLESv1_CM_mali.so
05-13 19:36:25.465: D/libEGL(31448): loaded /system/lib/egl/libGLESv2_mali.so
05-13 19:36:25.485: E/(31448): Device driver API match
05-13 19:36:25.485: E/(31448): Device driver API version: 17
05-13 19:36:25.485: E/(31448): User space API version: 17 
05-13 19:36:25.485: E/(31448): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Thu Jan 24 17:16:14 KST 2013 
05-13 19:36:25.600: D/OpenGLRenderer(31448): Enabling debug mode 0
05-13 19:36:43.995: W/IInputConnectionWrapper(31448): getCursorCapsMode on inactive InputConnection
05-13 19:36:46.570: W/dalvikvm(31448): threadid=12: thread exiting with uncaught exception (group=0x40dff930)
05-13 19:36:46.585: E/AndroidRuntime(31448): FATAL EXCEPTION: AsyncTask #1
05-13 19:36:46.585: E/AndroidRuntime(31448): java.lang.RuntimeException: An error occured while executing doInBackground()
05-13 19:36:46.585: E/AndroidRuntime(31448):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.lang.Thread.run(Thread.java:856)
05-13 19:36:46.585: E/AndroidRuntime(31448): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=http//10.0.2.2/iChop/signup.php
05-13 19:36:46.585: E/AndroidRuntime(31448):    at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at com.example.ichop.JSONParser.makeHttpRequest(JSONParser.java:51)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at com.example.ichop.SignUp$CreateNewCustomer.doInBackground(SignUp.java:90)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at com.example.ichop.SignUp$CreateNewCustomer.doInBackground(SignUp.java:1)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-13 19:36:46.585: E/AndroidRuntime(31448):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-13 19:36:46.585: E/AndroidRuntime(31448):    ... 4 more
05-13 19:36:47.300: E/WindowManager(31448): Activity com.example.ichop.SignUp has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{410e2958 V.E..... R......D 0,0-684,192} that was originally added here
05-13 19:36:47.300: E/WindowManager(31448): android.view.WindowLeaked: Activity com.example.ichop.SignUp has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{410e2958 V.E..... R......D 0,0-684,192} that was originally added here
05-13 19:36:47.300: E/WindowManager(31448):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
05-13 19:36:47.300: E/WindowManager(31448):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
05-13 19:36:47.300: E/WindowManager(31448):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
05-13 19:36:47.300: E/WindowManager(31448):     at android.app.Dialog.show(Dialog.java:281)
05-13 19:36:47.300: E/WindowManager(31448):     at com.example.ichop.SignUp$CreateNewCustomer.onPreExecute(SignUp.java:73)
05-13 19:36:47.300: E/WindowManager(31448):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
05-13 19:36:47.300: E/WindowManager(31448):     at android.os.AsyncTask.execute(AsyncTask.java:534)
05-13 19:36:47.300: E/WindowManager(31448):     at com.example.ichop.SignUp$1.onClick(SignUp.java:59)
05-13 19:36:47.300: E/WindowManager(31448):     at android.view.View.performClick(View.java:4204)
05-13 19:36:47.300: E/WindowManager(31448):     at android.view.View$PerformClick.run(View.java:17355)
05-13 19:36:47.300: E/WindowManager(31448):     at android.os.Handler.handleCallback(Handler.java:725)
05-13 19:36:47.300: E/WindowManager(31448):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-13 19:36:47.300: E/WindowManager(31448):     at android.os.Looper.loop(Looper.java:137)
05-13 19:36:47.300: E/WindowManager(31448):     at android.app.ActivityThread.main(ActivityThread.java:5226)
05-13 19:36:47.300: E/WindowManager(31448):     at java.lang.reflect.Method.invokeNative(Native Method)
05-13 19:36:47.300: E/WindowManager(31448):     at java.lang.reflect.Method.invoke(Method.java:511)
05-13 19:36:47.300: E/WindowManager(31448):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-13 19:36:47.300: E/WindowManager(31448):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-13 19:36:47.300: E/WindowManager(31448):     at dalvik.system.NativeStart.main(Native Method)

私は何をすべきか?:(

以下は私のサインアップボタンです:

public class SignUp extends Activity {

//Progress dialog
private ProgressDialog pDialog;

JSONParser jsonParser = new JSONParser();
EditText C_Name;
EditText C_Email_SignUp;
EditText C_Password_SignUp;
EditText C_Retype_SignUp;

//url to create new customer
private static String url_create_customer = "http//10.0.2.2/iChop/signup.php";

//JSON Node names
private static final String TAG_SUCCESS = "success";

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

    //Edit Text
    C_Name = (EditText) findViewById(R.id.C_Name);
    C_Email_SignUp = (EditText) findViewById(R.id.C_Email_SignUp);
    C_Password_SignUp = (EditText) findViewById(R.id.C_Password_SignUp);
    C_Retype_SignUp = (EditText) findViewById(R.id.C_Retype_SignUp);

    //Sign Up button
    Button SignUpBtn = (Button) findViewById(R.id.SignUpBtn);

    //Button click event
    SignUpBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            // creating new customer in background
            new CreateNewCustomer().execute();              
        }
    });
}

class CreateNewCustomer extends AsyncTask <String, String, String> {
    //show Progress Dialog before starting background thread

    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(SignUp.this);
        pDialog.setMessage("Signing up..");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    protected String doInBackground(String... args){
        String name = C_Name.getText().toString();
        String email = C_Email_SignUp.getText().toString();
        String password = C_Password_SignUp.getText().toString();
        String retype = C_Retype_SignUp.getText().toString();

        //Building parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("name", name));
        params.add(new BasicNameValuePair("email",email));
        params.add(new BasicNameValuePair("password",password));
        params.add(new BasicNameValuePair("retype", retype));

        //getting JSON object
        JSONObject json = jsonParser.makeHttpRequest(url_create_customer, "POST", params);

        //check log cat for response
        Log.d("Create Response", json.toString());

        //check for success tag
        try{
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1){
                Intent i = new Intent (getApplicationContext(), Login.class);
                startActivity (i);

                finish();
            }else{
                //failed to create customer
                Intent i = new Intent (getApplicationContext(), SignUp.class);
                startActivity (i);

                finish();
            }
        }catch (JSONException e){
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(String file_url){
        pDialog.dismiss();
    }
}

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

}

bofredoの調整を取り入れた最新のLogCat

05-13 20:39:29.210: W/System.err(3258): org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2 refused
05-13 20:39:29.260: W/System.err(3258): Caused by: java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect failed: ETIMEDOUT (Connection timed out)
05-13 20:39:29.290: W/System.err(3258): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
05-13 20:39:29.300: E/Buffer Error(3258): Error converting result java.lang.NullPointerException: lock == null
05-13 20:39:29.305: E/JSON Parser(3258): Error parsing data org.json.JSONException: End of input at character 0 of 
05-13 20:39:29.315: W/dalvikvm(3258): threadid=11: thread exiting with uncaught exception (group=0x40dff930)
05-13 20:39:29.335: E/AndroidRuntime(3258): FATAL EXCEPTION: AsyncTask #1
05-13 20:39:29.335: E/AndroidRuntime(3258): java.lang.RuntimeException: An error occured while executing doInBackground()
05-13 20:39:29.335: E/AndroidRuntime(3258):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-13 20:39:29.335: E/AndroidRuntime(3258): Caused by: java.lang.NullPointerException

tolgap コメントを取り込んだ後の最新の logcat

05-13 21:25:09.995: E/JSON Parser(6967): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
05-13 21:25:09.995: W/dalvikvm(6967): threadid=12: thread exiting with uncaught exception (group=0x40dff930)
05-13 21:25:10.015: E/AndroidRuntime(6967): FATAL EXCEPTION: AsyncTask #1
05-13 21:25:10.015: E/AndroidRuntime(6967): java.lang.RuntimeException: An error occured while executing doInBackground()
05-13 21:25:10.015: E/AndroidRuntime(6967):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-13 21:25:10.015: E/AndroidRuntime(6967): Caused by: java.lang.NullPointerException

tolgap によって要求された PHP コード

    <?php
//Following code will create a new customer row

$response = array();

if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password']) && isset($_POST['retype'])){
    $C_Name = $_POST['name'];
    $C_Email_SignUp = $_POST['email'];
    $C_Password_SignUp = $_POST['password'];
    $C_Retype_SignUp = $_POST['retype'];
    $pregmatch = "/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$/";

    //include db connect class
    require_once __DIR__ . '/dbconnect.php';

    //connecting to db
    $db = new DB_CONNECT();

    //checking if email has been registered before
    $check = mysql_query("select count(Customer_ID) from customer where C_Email = '".$C_Email_SignUp."'");
    $data = mysql_fetch_array($check);

    if ($data['count (customer_id)'] == 0){
        if ($C_Password_SignUp == $C_Retype_SignUp){
            if (preg_match($pregmatch, $C_Email_SignUp)){
                $result = mysql_query("INSERT INTO customer (Customer_ID, C_name, C_Email, C_Password) VALUES ('', '".$C_Name."', '".$C_Email_SignUp."', '".$C_Password_SignUp."')");

                $response["success"] = 1;
                $response["message"] = "Registration completed!";

                echo json_encode($response);
            } else {
                //error for wrong email format              
                $response["success"] = 0;
                $response["message"] = "Wrong email format!";

                echo json_encode($response);
            }
        } else {
            //error for mismatch password and retype password
            $response["success"] = 0;
            $response["message"] = "Password and retype password is not the same!";

            echo json_encode($response);
        }
    } else {
        //error for registered email
        $response["success"] = 0;
        $response["message"] = "Email has been registered!";

        echo json_encode($response);
    }
    } else {
        //error for blank field
        $response["success"] = 0;
        $response["message"] = "Please fill in all the fields!";
    }
    ?>
4

2 に答える 2