尝试运行以下代码时出现此错误:一个简单的登录/向上Android
活动链接到PHP
脚本和MYSQL
数据库,托管在{{ 1}}。
我该如何解决这个问题?注意:这是在停止填充数据库。
点击提交按钮后
00WebHost
LongOperation类:
public void onClick(View v) {
// get The User name and Password
String userName=editTextUserName.getText().toString();
String password=editTextPassword.getText().toString();
// WebServer Request URL
String serverURL = "http://ry.net16.net/login_web_service.php?username=" + userName + "&password=" + password;
// Use AsyncTask execute Method To Prevent ANR Problem
new LongOperation().execute(serverURL);
Log.d("trace url", "URL TRACE");
{
}
{
}
}
});
对应的PHP脚本:(已排除登录详细信息
private class LongOperation extends AsyncTask<String, Void, Void> {
// Required initialization
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(SignInActivity.this);
String data ="";
int sizeData = 0;
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//Start Progress Dialog (Message)
Dialog.setMessage("Please wait..");
Dialog.show();
}
// Call after onPreExecute method
protected Void doInBackground(String... urls) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
// Send data
try
{
// Defined URL where to send data
URL url = new URL(urls[0]);
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "");
}
// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
/*****************************************************/
return null;
}
protected void onPostExecute(Void unused) {
// NOTE: You can call UI Element here.
// Close progress dialog
Dialog.dismiss();
if (Error != null) {
// uiUpdate.setText("Output : "+Error);
} else {
// Show Response Json On Screen (activity)
// uiUpdate.setText( Content );
/****************** Start Parse Response JSON Data *************/
String OutputData = "";
JSONObject jsonResponse;
try {
/****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
jsonResponse = new JSONObject(Content);
String result = jsonResponse.get("result").toString();
if (result.equals("true"))
{
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
/**************** Storing data as KEY/VALUE pair *******************/
editor.putBoolean("loggedIn", true); // Saving boolean - true/false
// Save the changes in SharedPreferences
editor.commit(); // commit changes
Toast.makeText(SignInActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
Intent i = new Intent(SignInActivity.this , MainActivity.class);
startActivity(i);
}
else
{
Toast.makeText(SignInActivity.this, "User Name or Password does not match. Please Sign Up if you are new. ", Toast.LENGTH_LONG).show();
}
}
/****************** End Parse Response JSON Data *************/
catch (JSONException e) {
e.printStackTrace();
}
}
}
}
完整Logcat错误:
<?php
// To check if passed parameters are present or not.
if(isset($_GET['username']) && isset($_GET['password']))
{
//NOTE THESE ARE INTENTIONALLY LEFT BLANK FOR SECURITY
$mysql_host = "";
$mysql_database = "";
$mysql_user = "";
$mysql_password = "";
// Provide host ip, mysql user name, password to make connection
$con = mysql_connect($mysql_host,$mysql_user,$mysql_password);
// Provide database name.
mysql_select_db($mysql_database);
// Fetching the passed parameters
$username=$_GET['username'];
$password=$_GET['password'];
$flag="false";
// Checking if parameters are not null
if(!empty($username) && !empty($password))
{
$sql="select * from `Login` where `UserName`='$username' and `Password`='$password' ";
$result=mysql_query($sql);
if($result)
{
// count number of rows returned .
$count= mysql_num_rows($result);
if($count > 0)
{
$flag="true"; //result true
}
}
// closing connection
mysql_close($con);
//returning json response
echo json_encode(array("result"=>$flag));
}
}
?>
修改: JSON PARSER CLASS:
以下是与应用程序相关的JSON解析器类。
08-15 18:24:59.117: W/System.err(29260): org.json.JSONException: Value <br><table of type java.lang.String cannot be converted to JSONObject
08-15 18:24:59.117: W/System.err(29260): at org.json.JSON.typeMismatch(JSON.java:111)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:159)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:172)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:160)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:1)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.finish(AsyncTask.java:632)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-15 18:24:59.117: W/System.err(29260): at android.os.Handler.dispatchMessage(Handler.java:102)
08-15 18:24:59.127: W/System.err(29260): at android.os.Looper.loop(Looper.java:157)
08-15 18:24:59.127: W/System.err(29260): at android.app.ActivityThread.main(ActivityThread.java:5356)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invoke(Method.java:515)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
08-15 18:24:59.127: W/System.err(29260): at dalvik.system.NativeStart.main(Native Method)
08-15 18:24:59.147: E/ViewRootImpl(29260): sendUserActionEvent() mView == null
答案 0 :(得分:0)
试试这个:
String serverURL = "http://ry.net16.net/login_web_service.php?username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);
答案 1 :(得分:0)
问题在于非JSON字符串
什么是
http://ry.net16.net/login_web_service.php?username=&#34; + userName +&#34;&amp; password =&#34; +密码
在浏览器中给出?如果这不是JSON输出,那么您需要检查URL为何没有为您提供JSON格式的文本。
请发布网址的输出。
答案 2 :(得分:0)
你的PHP脚本存在严重问题,我只是在浏览器中打开了这个URL,看到了很多错误。简而言之,PHP脚本没有返回任何JSON
它给你HTML
这只是所有PHP警告......
答案 3 :(得分:0)
您收到此错误是因为您没有获得实际的JSON编码响应。正如其他答案中所提到的,您在尝试连接数据库时遇到错误。:
Warning: mysql_connect() [function.mysql-connect]: Host 'srv36.000webhost.com' is not allowed to connect to this MySQL server in /home/a5369581/public_html/login_web_service.php on line 14
您需要确保$mysql_user
在MySQL数据库上设置了相应的权限。如果php脚本位于000webhost服务器上,该服务器也托管您的sql server,那么您应该能够使用成员区域中000webhost仪表板上提供的登录凭据。
答案 4 :(得分:0)
我发现了这个问题,而且非常尴尬,基本上我没有使用log-in
的正确MYSQL Database.
个详细信息