0

编辑:我终于弄清楚问题出在哪里。我在这条线上不断收到 IOException 响应 = httpClient.execute(httpPost)。

但是,会导致此错误的正常问题(我在网上搜索的问题,例如 url 错误等)不是这里的问题。网址是正确的。任何人都可以帮助或列出我会收到此错误的所有可能原因。谢谢你。


我知道这个问题已经被问过好几次了,实际上我查看了为这些问题给出的答案,以便最初弄清楚如何做到这一点,但由于某种原因它不起作用,我不知道为什么。

我有一个需要用户注册的应用程序。他们注册后,我将他们输入的信息发送到服务器。

安卓代码:

//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();

?>
4

3 回答 3

0

这是你的问题:

RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

您正在尝试显示并非旨在显示 Toast 的类中的 Toast。或者,也许,不准备表现出tost。包含该方法的类是什么registerUser

于 2013-04-29T22:41:16.527 回答
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];

如果这不起作用,请在 php 程序中添加一个询问最后插入 id 的 mySql 查询并打印结果以在客户端获得响应:

response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();    
Log.i(tag,EntityUtils.toString(entity).toString());

所以你可以看到你是否在数据库上插入。

于 2013-04-29T22:38:52.680 回答
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.
    
于 2013-05-06T13:12:20.833 回答