2017-01-10 14 views
0

私はアンドロイドに新しく、簡単な登録フォームの開発を習得しようとしています。私はyoutubeチュートリアルに続き、同じコードはgithubで入手できます。
私は自分のマシンにローカルにインストールされたphp-mysqlを使用しています。したがって、URLへのパスのために - 両方の要求だけでなく、ログイン要求を登録し、私は次のURLを使用しています:Androidへの登録フォームがMySQLに公開されていません - localhost

http://192.168.0.101/register.php 
http://192.168.0.101/login.php 

私が使用してローカルに私のブラウザでこれらのファイルを実行すると:

http://127.0.0.1/register.php 
http://127.0.0.1/login.php 

をそれはdoesnのエラーを返しません。次のように

レジスタとログインPHPファイル内の接続が行われます。

$con = mysqli_connect("localhost", "root", "ABCABC", "agnya"); 

ユーザー名とパスワードを提供する時にアプリは3ページ目を開く必要がありますか、私は登録ページを使用して登録する場合、DBを更新する必要がありますログインページを返します。

問題がある:

アプリがエラーなしでローカルVM上で動作する、しかし、詳細を入力し、ログインをクリックするか、ボタンを登録すると、私は何のアクションまたはエラーメッセージを見ることはありません。私は次のように様々な組み合わせでURLを変更しようとしている:

127.0.0.1, 127.0.0.1:3306, 192.168.0.101,192.168.0.101:3306, localhost, 10.0.2.2, 10.0.2.3 

、代わりにローカルホストのPHPファイルでは、私はこれらすべてを使用し、これらの様々な組み合わせできました。

私はこの3日間の解決策に苦労していますが、役に立たないものです。私はjsonparserを使用しなければならない - 私はどこかのようなオプションを見た。

クラウドでホストされているMysqlでテーブルを設定し、クラウドクレデンシャルを使用してもまだ動作しません。何かご意見は?

アプリケーションマニフェスト

<?xml version="1.0" encoding="utf-8"?> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".LoginActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".registerActivity" /> 
    <activity android:name=".userDetailsActivity"></activity> 
</application> 

RegisterActivity.java

package inagnya.axiomanalytics.www.agnya; 


import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.content.Intent; 

import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 
import com.android.volley.RequestQueue; 

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

public class registerActivity extends AppCompatActivity { 

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

     final EditText etNameReg = (EditText) findViewById(R.id.etNameReg); 
     final EditText etUsernameReg = (EditText) findViewById(R.id.etUsernameLog); 
     final EditText etPasswordReg = (EditText) findViewById(R.id.etPasswordLog); 
     final EditText etAgeReg = (EditText) findViewById(R.id.etAgeWel); 
     final Button btnRegister = (Button) findViewById(R.id.btnRegister); 


     btnRegister.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final String name = etNameReg.getText().toString(); 
       final String username = etUsernameReg.getText().toString(); 
       final String password = etPasswordReg.getText().toString(); 
       final int age = Integer.parseInt(etAgeReg.getText().toString()); 

       Response.Listener<String> responseListener = new Response.Listener<String>() { 

        @Override 
        public void onResponse(String response) { 
         try { 
          JSONObject jsonResponse = new JSONObject(response); 
          boolean success = jsonResponse.getBoolean("success"); 
          if (success) { 
           Intent intent = new Intent(registerActivity.this, LoginActivity.class); 
           registerActivity.this.startActivity(intent); 
          } else { 
           AlertDialog.Builder builder = new AlertDialog.Builder(registerActivity.this); 
           builder.setMessage("Registration Failed") 
             .setNegativeButton("Retry", null) 
             .create() 
             .show(); 

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

       RegisterRequest registerRequest = new RegisterRequest(name,username,password,age,responseListener); 
       RequestQueue queue = Volley.newRequestQueue(registerActivity.this); 
       queue.add(registerRequest); 
      } 
     }); 

    } 


    } 

RegisterRequest.java

package inagnya.axiomanalytics.www.agnya; 

import java.util.HashMap; 
import java.util.Map; 
import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

/** 
* Created by mageshpoondi on 08/01/17. 
*/ 

public class RegisterRequest extends StringRequest{ 

    private static final String REGISTER_REQUEST_URL = "http://192.168.0.101/register.php"; 
    private Map<String, String> params; 

    public RegisterRequest(String name, String username, String password, int age, Response.Listener<String> listener) { 
     super(Method.POST, REGISTER_REQUEST_URL,listener,null); 
     params = new HashMap<>(); 
     params.put("name", name); 
     params.put("username", username); 
     params.put("password", password); 
     params.put("age", age + ""); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
    } 

activity_register.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_register" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="inagnya.axiomanalytics.www.agnya.registerActivity"> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:ems="10" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginLeft="11dp" 
     android:layout_marginStart="11dp" 
     android:id="@+id/etNameReg" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:hint="Name" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:ems="10" 
     android:layout_below="@+id/etNameReg" 
     android:id="@+id/etUsernameLog" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignLeft="@+id/etNameReg" 
     android:layout_alignStart="@+id/etNameReg" 
     android:hint="Username" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:ems="10" 
     android:id="@+id/etPasswordLog" 
     android:layout_below="@+id/etUsernameLog" 
     android:layout_alignLeft="@+id/etUsernameLog" 
     android:layout_alignStart="@+id/etUsernameLog" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:hint="Password" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:ems="10" 
     android:layout_below="@+id/etPasswordLog" 
     android:id="@+id/etAgeWel" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignLeft="@+id/etPasswordLog" 
     android:layout_alignStart="@+id/etPasswordLog" 
     android:hint="Age" /> 

    <Button 
     android:text="Register" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/etAgeWel" 
     android:layout_alignLeft="@+id/etAgeWel" 
     android:layout_alignStart="@+id/etAgeWel" 
     android:layout_marginTop="21dp" 
     android:id="@+id/btnRegister" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

ifconfigコマンドの出力

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 
    ether a4:5e:60:c1:9d:6b 
    inet6 fe80::a65e:60ff:fec1:9d6b%en0 prefixlen 64 scopeid 0x4 
    inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255 
    nd6 options=1<PERFORMNUD> 
    media: autoselect 
    status: active 
+0

あなたの質問はまだありませんか?あなたが何をしたいのか、何が起こっているのか、起こらないはずですか? –

+0

登録しようとすると、MySqlで登録の詳細が更新されません....ログインしようとすると...ログインできませんでしたが、VMがエラーを返さない。 – Apricot

+0

あなたのPCのIPアドレスを知っていますか?あなたが使用しているローカルサーバーはすべてのファイルを正しく入れていますか? – W4R10CK

答えて

0

確かに実現する方法を示すための例(表示する例であり、ユーザーが求めて正確な答えが含まれていません)。通話のためにNetworking Lib。( "Volley")を試してください。私はログインと登録の例です。

//Layout of Activity 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="2dp" 
tools:context="com.test.test.ScreenOne"> 


<EditText 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/etUsername" 
    android:layout_marginTop="150dp" 
    android:hint="username" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

<EditText 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/etPassword" 
    android:hint="password" 
    android:layout_below="@+id/etUsername" 
    android:layout_centerHorizontal="true" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Login" 
    android:id="@+id/bLogin" 
    android:layout_below="@+id/etPassword" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="50dp" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Save" 
    android:id="@+id/bSave" 
    android:layout_below="@+id/bLogin" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="42dp" /> 
</RelativeLayout> 

活動は2つのボタンと2のEditText、サーバーを経由してログインボタンログインを持っているし、[保存]ボタンは、サーバーにデータを保存します。

package com.test.test; 

import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

public class ScreenOne extends AppCompatActivity { 

private static final String URL_LOGIN = "http://IP_ADDRESS/login.php"; 
private static final String URL_SAVE = "http://IP_ADDRESS/save.php"; 
private EditText username; 
private EditText password; 
private Button login; 
Button save; 
String name; 
String pass; 

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

    username = (EditText) findViewById(R.id.etUsername); 
    password = (EditText) findViewById(R.id.etPassword); 

    (login = (Button) findViewById(R.id.bLogin)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      request(); 
     } 
    }); 

    (save = (Button) findViewById(R.id.bSave)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      saveRequest(); 
     } 
    }); 
} 

private void saveRequest() { 
    name = username.getText().toString().trim(); 
    pass = password.getText().toString().trim(); 
    final ProgressDialog mDialog = new ProgressDialog(this); 
    mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mDialog.setMessage("Loading..."); 
    mDialog.show(); 

    StringRequest request = new StringRequest(Request.Method.POST, URL_SAVE, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        mDialog.dismiss(); 
        Toast.makeText(ScreenOne.this, response, Toast.LENGTH_LONG).show(); 
        username.setText(""); 
        password.setText(""); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        mDialog.dismiss(); 
        Toast.makeText(ScreenOne.this, "Something went wrong", Toast.LENGTH_LONG).show(); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> key = new HashMap<>(); 
      key.put("username", name); 
      key.put("password", pass); 
      return key; 
     } 
    }; 

    NetworkCalls.getInstance().addToRequestQueue(request); 
} 

private synchronized void request() { 
    name = username.getText().toString().trim(); 
    pass = password.getText().toString().trim(); 
    final ProgressDialog mDialog = new ProgressDialog(this); 
    mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mDialog.setMessage("Loading..."); 
    mDialog.show(); 

    StringRequest request = new StringRequest(Request.Method.POST, URL_LOGIN, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        mDialog.dismiss(); 
        Toast.makeText(ScreenOne.this, response, Toast.LENGTH_LONG).show(); 
        username.setText(""); 
        password.setText(""); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        mDialog.dismiss(); 
        Toast.makeText(ScreenOne.this, "Something went wrong", Toast.LENGTH_LONG).show(); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> key = new HashMap<>(); 
      key.put("username", name); 
      key.put("password", pass); 
      return key; 
     } 
    }; 

    NetworkCalls.getInstance().addToRequestQueue(request); 
} 
} 

バレーボール要求のためのシングルトンクラス:

import android.content.Context; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.toolbox.Volley; 

/** 
* Created by W4R10CK on 12-09-2016. 
*/ 
public class NetworkCalls { 
    private RequestQueue requestQueue; 
    private static Context context; 

    private static NetworkCalls ourInstance = new NetworkCalls(); 

    public static NetworkCalls getInstance() { 
     return ourInstance; 
    } 

    private NetworkCalls() { 
    } 

    public RequestQueue getRequestQueue(){ 
     requestQueue = Volley.newRequestQueue(context.getApplicationContext()); 
     return requestQueue; 
    } 

    public <T> void addToRequestQueue(Request<T> request){ 
     getRequestQueue().add(request); 
    } 
} 

APIコールサーバーへ:

//conn.php for connection (file one) 
<?php 
$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$db_name = "hello"; 

$con = new mysqli($host,$user,$pass,$db_name); 

if($con -> connect_error){ 
echo "Connection error"; 
} 


//save.php(file two) 
<?php 
$username = $_POST['username']; 
$password = $_POST['password']; 
require_once('conn.php'); 

$sql = "INSERT INTO user (username, password) VALUES ('$username','$password')"; 

if($con -> query($sql) === TRUE) { 
echo "User added"; 
} 
//$con -> close(); 
?> 
?> 

//login.php(file three) 
<?php 
require_once('conn.php'); 

$username = $_POST['username']; 
$password = $_POST['password']; 

$sql = "SELECT * FROM user WHERE username = '$username' AND password = '$password'"; 

$result = mysqli_query($con,$sql); 

if(mysqli_fetch_array($result) == NULL){ 
echo "Invalid Cred."; 
}else{ 
echo "Success"; 
} 

$con->close(); 
?> 

は、最後に2つのフィールドユーザ名パスワードでlocalhostのユーザーハローとテーブルをという名前のDBを作成します。

here

+0

リンクとコードをありがとう....それらをチェックします – Apricot

関連する問題