编辑: 我终于找到了问题所在。我在这一行上不断收到IOException response = httpClient.execute(httpPost)。
然而,导致此错误的正常问题(我在网上搜索的那些,如网址错误等)不是问题。网址是正确的。任何人都可以帮助或列出我会收到此错误的所有可能原因。谢谢。
我知道这个问题已被问过几次了,我实际上看了这些问题的答案,以便最初弄清楚如何做到这一点,但由于某种原因,它不起作用,我不知道为什么。< / p>
我有一个需要用户注册的应用。注册后,我将他们输入的信息发送到服务器。
Android代码:
//This is the method called when user presses submit button. The variables not declared
//are global
public void registerUser(View v){
context = getApplicationContext();
username = ((EditText) this.findViewById(R.id.username)).getText().toString();
email = ((EditText) this.findViewById(R.id.email)).getText().toString();
password=((EditText)this.findViewById(R.id.password)).getText().toString();
String[] params = {username,email,password};
(new SendRegisterInfo(this.getApplicationContext())).execute(params);
Toast t = Toast.makeText(context, "Thank you for Signing up "+username, Toast.LENGTH_SHORT);
t.show();
//Start Main Page Activity. Page they'll see everytime they login
Intent i = new Intent(this,HomeActivity.class);
startActivity(i);
}
public class SendRegisterInfo extends AsyncTask<String,Void,Void>{
private String tag = "SendRegisterInfo";
private InputStream is;
private Context c;
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
public SendRegisterInfo(Context c){
this.c = c;
}
@Override
protected Void doInBackground(String... params) {
String URI="http://www.mysite.com/registerUser.php";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URI);
HttpResponse response;
String username,email,password;
username = params[0];
email = params[1];
password = params[2];
try {
ArrayList<NameValuePair> submit = new ArrayList<NameValuePair>(2);
submit.add(new BasicNameValuePair("username",username));
submit.add(new BasicNameValuePair("email",email));
submit.add(new BasicNameValuePair("password",password));
httpPost.setEntity(new UrlEncodedFormEntity(submit));
response = httpClient.execute(httpPost);
Log.i(tag,response.getStatusLine().toString());
} catch (ClientProtocolException e) {
Log.e(tag, "Error in http connection "+e.toString());
e.printStackTrace();
} catch (IOException e) {
Log.e(tag, "Error in http connection "+e.toString());
e.printStackTrace();
}catch (Exception e){
Log.e(tag, "Error in http connection "+e.toString());
e.printStackTrace();
}
return null;
}
}
清单文件:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
PHP代码:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
$pswrd = $_POST["password"];
$score = 0;
$user = "root";
$password="pword";
$database = "databasename";
mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die("Unable to Select Database");
$query="INSERT INTO Players VALUES ('','$username','$email','$pswrd','','$score')";
mysql_query($query);
mysql_close();
?>
答案 0 :(得分:0)
读取doInBackground()方法的(String ... params)参数时出错。
启动AsyncTask时:
String[] params = {username,email,password};
阅读参数时
String username,email,weight,password;
username = params[0];
email = params[1];
password = params[3]; // should be: password = params[2];
如果这不起作用,请添加一个mySql查询,询问php程序中的最后一个插入ID并打印结果以在客户端获取响应:
response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
Log.i(tag,EntityUtils.toString(entity).toString());
所以你可以看到你是否插入数据库。
答案 1 :(得分:0)
这是你的问题:
RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
您正尝试从不是为了展示Toast的类中显示Toast。或者,也许,并不准备显示出来。包含方法registerUser
答案 2 :(得分:0)
请检查以下代码。
在请求中添加函数名称和密钥以及数据。
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add((NameValuePair) new BasicNameValuePair("f", "yourFunctionName."+methodName));
nameValuePairs.add((NameValuePair) new BasicNameValuePair("u", "a0ff8a6a0a831ec25cf4de6c730be54c"));
//u is the key used by server to identify valid request.