Java 无法从android emulator连接到本地主机
我是android开发的新手,我正在尝试用android连接我的api。 我已经使用laravel框架开发了我的api。 这里是Login.javaJava 无法从android emulator连接到本地主机,java,api,android-studio,laravel-5,android-emulator,Java,Api,Android Studio,Laravel 5,Android Emulator,我是android开发的新手,我正在尝试用android连接我的api。 我已经使用laravel框架开发了我的api。 这里是Login.java package com.example.yasha.myapplication; import android.app.ProgressDialog; import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTa
package com.example.yasha.myapplication;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutionException;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import javax.net.ssl.HttpsURLConnection;
public class Login extends AppCompatActivity {
EditText emailText;
EditText passwordText ;
TextView signup;
Button loginButton ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
emailText = (EditText) findViewById(R.id.email);
passwordText = (EditText) findViewById(R.id.password);
signup = (TextView) findViewById(R.id.signup);
loginButton = (Button) findViewById(R.id.login);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Start the Signup activity
Intent signupIntent = new Intent(getApplicationContext(), SignUp.class);
startActivity(signupIntent);
}
});
}
public class MakeAccessToken extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
//int responseCode = urlConnection.getResponseCode();
//if(responseCode == HttpsURLConnection.HTTP_OK){
return result;
//}else{
// return "Wrong Creditinal";
// }
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.i("Access Token", result);
}
}
public void login(View view) {
if (!validate()) {
onLoginFailed();
return;
}
final String email = emailText.getText().toString();
final String password = passwordText.getText().toString();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final int client_id = prefs.getInt("client_id", 1);
final String client_secret = prefs.getString("client_secret", " ");
loginButton.setEnabled(false);
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Verifying...");
progressDialog.show();
// TODO: Implement your own authentication logic here.
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
MakeAccessToken task = new MakeAccessToken();
task.execute("http://10.0.2.3:8000/oauth/token?grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+email+"&password="+password);
}
}, 3000);
}
public void onLoginSuccess() {
loginButton.setEnabled(true);
Intent profileIntent = new Intent(getApplicationContext(), Profile.class);
startActivity(profileIntent);
}
public void onLoginFailed() {
Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();
loginButton.setEnabled(true);
}
public boolean validate() {
boolean valid = true;
String email = emailText.getText().toString();
String password = passwordText.getText().toString();
if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
emailText.setError("enter a valid email address");
valid = false;
} else {
emailText.setError(null);
}
if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
passwordText.setError("between 4 and 10 alphanumeric characters");
valid = false;
} else {
passwordText.setError(null);
}
return valid;
}
}
谢谢你的帮助。请帮帮我,我试着这样做了3天。你可以选择SOAP,让你的PHP代码连接到你的本地主机,你的android代码只调用你的PHP代码的方法 在PHP代码中:
<?php
class service{
public function getUser(){
$user = "root";`enter code here`
$pass = "";
$database = "";
$server = "localhost";
$mysqli = new mysqli($server,$user,$pass,$database);
$vquery = "Your query here";
//<Your code in iterating the data you can put it as JSON >
$mysqli->close();
return $<return JSON user data>;
}
}
$server = new SoapServer(null, array(
'uri' => "urn://<url>",
'soap_version' => SOAP_1_2)
);
$server->setClass("service");
$server->handle();
?>
在ANDROID中:
请在此处引用您的代码
您需要使用运行Laravel项目的系统的ip地址。Localhost只能用于连接到同一系统内的服务器。而不是
Localhost
您应该使用ip和端口号(如果有的话)。假设您的ip为10.10.2.2
,端口为8000
。那么您的URL应该是这样的:
我的laravel项目在同一个系统上,我已经尝试使用ip地址。您是否已更改httpd.conf文件以允许从所有ip地址连接?您能否告诉我如何执行此操作?您可以对所有ip地址进行注释拒绝,并添加一行-允许从所有ip地址进行连接。这是allI我不明白你的意思有一个替代的解决方案,这是来自android的SOAP你调用你的方法到嵌入在你的laravel文件夹中的PHP代码PHP方法然后查询到你的localhost。是的,你把这个放在你的文件夹中,然后设置你的localhost服务器来监听
<?php
class service{
public function getUser(){
$user = "root";`enter code here`
$pass = "";
$database = "";
$server = "localhost";
$mysqli = new mysqli($server,$user,$pass,$database);
$vquery = "Your query here";
//<Your code in iterating the data you can put it as JSON >
$mysqli->close();
return $<return JSON user data>;
}
}
$server = new SoapServer(null, array(
'uri' => "urn://<url>",
'soap_version' => SOAP_1_2)
);
$server->setClass("service");
$server->handle();
?>