无法建立连接,我已经测试了php文件,它正常,但仍然无法登录,并说;“登录未成功”; package com.example.login; 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.InputStreamReader; 导入java.util.ArrayList; 导入org.apache.http.HttpEntity; 导入org.apache.http.HttpResponse; 导入org.apache.http.NameValuePair; 导入org.apache.http.client.HttpClient; 导入org.apache.http.client.entity.UrlEncodedFormEntity; 导入org.apache.http.client.methods.HttpPost; 导入org.apache.http.impl.client.DefaultHttpClient; 导入org.apache.http.message.BasicNameValuePair; 导入org.json.JSONObject; 导入android.os.Bundle; 导入android.app.Activity; 导入android.content.SharedReferences; 导入android.view.view; 导入android.view.view.OnClickListener; 导入android.widget.Button; 导入android.widget.EditText; 导入android.widget.Toast; 公共类MainActivity扩展活动实现OnClickListener{ 编辑文本etUser,etPass; 按钮博客; 字符串用户名、密码; HttpClient-HttpClient; HttpPost-HttpPost; ArrayList名称值对; HttpResponse响应; http实体; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 初始化(); } 私有无效初始化(){ etUser=(EditText)findViewById(R.id.etUser); etPass=(EditText)findViewById(R.id.etPass); bLogin=(按钮)findviewbyd(R.id.bSubmit); setOnClickListener(this); } @凌驾 公共void onClick(视图v){ //TODO自动生成的方法存根 httpclient=新的DefaultHttpClient(); httppost=新的httppost(“http://10.0.2.2/login/index.php"); username=etUser.getText().toString(); password=etPass.getText().toString(); 试一试{ nameValuePairs=新的ArrayList(); 添加(新的BasicNameValuePair(“用户名”,username)); 添加(新的BasicNameValuePair(“密码”,password)); setEntity(新的UrlEncodedFormEntity(nameValuePairs)); response=httpclient.execute(httppost); if(response.getStatusLine().getStatusCode()==200){ entity=response.getEntity(); 如果(实体!=null){ InputStream instream=entity.getContent(); JSONObject jsonResponse=新的JSONObject(convertStreamToString(instream)); String retUser=jsonResponse.getString(“用户”); String retPass=jsonResponse.getString(“pass”); if(username.equals(retUser)和password.equals(retPass)){ SharedReferences sp=GetSharedReferences(“登录详细信息”,0); SharedReferences.Editor spedit=sp.edit(); spedit.putString(“用户”,用户名); spedit.putString(“pass”,密码); 提交(); Toast.makeText(getBaseContext(),“SUCCESS”,Toast.LENGTH_SHORT.show(); }否则{ Toast.makeText(getBaseContext(),“无效登录详细信息”,Toast.LENGTH\u SHORT.show(); } } } }捕获(例外e){ e、 printStackTrace(); Toast.makeText(getBaseContext(),“Login Unsuccessfull”,Toast.LENGTH\u SHORT.show(); } } 私有静态字符串convertStreamToString(InputStream为){ BufferedReader reader=新的BufferedReader(新的InputStreamReader(is)); StringBuilder sb=新的StringBuilder(); 字符串行=null; 试一试{ 而((line=reader.readLine())!=null){ sb.追加(第+行“\n”); } }捕获(IOE异常){ e、 printStackTrace(); }最后{ 试一试{ is.close(); }捕获(IOE异常){ e、 printStackTrace(); } } 使某人返回字符串(); } }
您必须获得NetworkOnMainThreadException,请检查日志猫。也请张贴它。如果不是这样,将编辑/删除我的答案 最好知道它发生的原因以及如何使用异步任务:无法建立连接,我已经测试了php文件,它正常,但仍然无法登录,并说;“登录未成功”; package com.example.login; 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.InputStreamReader; 导入java.util.ArrayList; 导入org.apache.http.HttpEntity; 导入org.apache.http.HttpResponse; 导入org.apache.http.NameValuePair; 导入org.apache.http.client.HttpClient; 导入org.apache.http.client.entity.UrlEncodedFormEntity; 导入org.apache.http.client.methods.HttpPost; 导入org.apache.http.impl.client.DefaultHttpClient; 导入org.apache.http.message.BasicNameValuePair; 导入org.json.JSONObject; 导入android.os.Bundle; 导入android.app.Activity; 导入android.content.SharedReferences; 导入android.view.view; 导入android.view.view.OnClickListener; 导入android.widget.Button; 导入android.widget.EditText; 导入android.widget.Toast; 公共类MainActivity扩展活动实现OnClickListener{ 编辑文本etUser,etPass; 按钮博客; 字符串用户名、密码; HttpClient-HttpClient; HttpPost-HttpPost; ArrayList名称值对; HttpResponse响应; http实体; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 初始化(); } 私有无效初始化(){ etUser=(EditText)findViewById(R.id.etUser); etPass=(EditText)findViewById(R.id.etPass); bLogin=(按钮)findviewbyd(R.id.bSubmit); setOnClickListener(this); } @凌驾 公共void onClick(视图v){ //TODO自动生成的方法存根 httpclient=新的DefaultHttpClient(); httppost=新的httppost(“http://10.0.2.2/login/index.php"); username=etUser.getText().toString(); password=etPass.getText().toString(); 试一试{ nameValuePairs=新的ArrayList(); 添加(新的BasicNameValuePair(“用户名”,username)); 添加(新的BasicNameValuePair(“密码”,password)); setEntity(新的UrlEncodedFormEntity(nameValuePairs)); response=httpclient.execute(httppost); if(response.getStatusLine().getStatusCode()==200){ entity=response.getEntity(); 如果(实体!=null){ InputStream instream=entity.getContent(); JSONObject jsonResponse=新的JSONObject(convertStreamToString(instream)); String retUser=jsonResponse.getString(“用户”); String retPass=jsonResponse.getString(“pass”); if(username.equals(retUser)和password.equals(retPass)){ SharedReferences sp=GetSharedReferences(“登录详细信息”,0); SharedReferences.Editor spedit=sp.edit(); spedit.putString(“用户”,用户名); spedit.putString(“pass”,密码); 提交(); Toast.makeText(getBaseContext(),“SUCCESS”,Toast.LENGTH_SHORT.show(); }否则{ Toast.makeText(getBaseContext(),“无效登录详细信息”,Toast.LENGTH\u SHORT.show(); } } } }捕获(例外e){ e、 printStackTrace(); Toast.makeText(getBaseContext(),“Login Unsuccessfull”,Toast.LENGTH\u SHORT.show(); } } 私有静态字符串convertStreamToString(InputStream为){ BufferedReader reader=新的BufferedReader(新的InputStreamReader(is)); StringBuilder sb=新的StringBuilder(); 字符串行=null; 试一试{ 而((line=reader.readLine())!=null){ sb.追加(第+行“\n”); } }捕获(IOE异常){ e、 printStackTrace(); }最后{ 试一试{ is.close(); }捕获(IOE异常){ e、 printStackTrace(); } } 使某人返回字符串(); } },android,Android,您必须获得NetworkOnMainThreadException,请检查日志猫。也请张贴它。如果不是这样,将编辑/删除我的答案 最好知道它发生的原因以及如何使用异步任务: 必须检查您的用户名和密码是否正确且成功发布,还必须确保您使用的密钥与Json响应中的密钥相同。同时发布日志猫。发布日志猫,检查是否存在异常,尤其是在单击首次发生时使用AsyncTask或线程与服务器通信。如果没有,则会出现高于api7的NetworkMainThreadException异常。问题是HttpClient
必须检查您的用户名和密码是否正确且成功发布,还必须确保您使用的密钥与Json响应中的密钥相同。同时发布日志猫。发布日志猫,检查是否存在异常,尤其是在单击首次发生时使用AsyncTask或线程与服务器通信。如果没有,则会出现高于api7的NetworkMainThreadException异常。问题是HttpClient没有执行httppost,我不知道为什么,我确信发布的用户和pass是相同的。@user3382695您试图在其主线程上执行网络操作。
package com.example.login;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
EditText etUser, etPass;
Button bLogin;
String username, password;
HttpClient httpclient;
HttpPost httppost;
ArrayList<NameValuePair> nameValuePairs;
HttpResponse response;
HttpEntity entity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialise();
}
private void initialise(){
etUser =(EditText) findViewById(R.id.etUser);
etPass = (EditText) findViewById(R.id.etPass);
bLogin = (Button)findViewById(R.id.bSubmit);
bLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
httpclient= new DefaultHttpClient();
httppost = new HttpPost("http://10.0.2.2/login/index.php");
username = etUser.getText().toString();
password = etPass.getText().toString();
try{
nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", password));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpclient.execute(httppost);
if(response.getStatusLine().getStatusCode()==200){
entity=response.getEntity();
if(entity != null){
InputStream instream = entity.getContent();
JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));
String retUser = jsonResponse.getString("user");
String retPass = jsonResponse.getString("pass");
if(username.equals(retUser) && password.equals(retPass)){
SharedPreferences sp = getSharedPreferences("logindetails",0);
SharedPreferences.Editor spedit = sp.edit();
spedit.putString("user",username);
spedit.putString("pass",password);
spedit.commit();
Toast.makeText(getBaseContext(),"SUCCESS", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getBaseContext(),"Invalid Logind Details", Toast.LENGTH_SHORT).show();
}
}
}
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getBaseContext(),"Login Unsuccessfull", Toast.LENGTH_SHORT).show();
}
}
private static String convertStreamToString(InputStream is){
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try{
while((line = reader.readLine())!= null){
sb.append(line + "\n");
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
is.close();
}catch(IOException e){
e.printStackTrace();
}
}
return sb.toString();
}
}