gpt4 book ai didi

php - Android 中与服务器数据库的连接

转载 作者:行者123 更新时间:2023-11-29 20:37:05 25 4
gpt4 key购买 nike

我正在尝试将 Android 应用连接到服务器,但出现错误,但我不知道出了什么问题。

这是我的 MainActivity 类:

public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
JsonReader jsonReader=new JsonReader(new JsonReader.AsyncResponse() {
@Override
public void processfinish(JSONObject output) {
Gson gson=new Gson();
String message=gson.toJson(output);
Toast.makeText(getApplicationContext(),"this is "+message,Toast.LENGTH_LONG).show();
}
});
jsonReader.execute();


} catch (IOException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();

}
}
}

这是我的 JsonReader 类:

public class JsonReader extends AsyncTask<String,String,JSONObject>{
final static String myurl="http://example.com";
public interface AsyncResponse{
void processfinish(JSONObject output);
}
public AsyncResponse delegate = null;

public JsonReader(AsyncResponse delegate){
this.delegate = delegate;
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
}
finally {
is.close();
}
}
@Override
protected JSONObject doInBackground(String... strings) {
try {
JSONObject s = readJsonFromUrl(myurl);
return s;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}

@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
delegate.processfinish(jsonObject);
}
}

我使用本指南创建了 AsyncResponse: How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?

以及我的 PHP 服务器代码:

<?php
$dbhost = "myhost";
$dbuser = "myuser";
$dbname = "myname";
$dbpass = "mypassword";

$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname,$connect_db);
if ($connect_db){
$result= mysql_query("SELECT * FROM `ask` ",$connect_db)or die(mysql_error());
while($row = mysql_fetch_array($result))
{
$qa=new StdClass();
$qa->Question=$row['Question'];
$qa->Answer=$row['Answer'];
$qa->Answer2=$row['Answer2'];
$qa->Answer3=$row['Answer3'];
$qa->Answer4=$row['Answer4'];
echo "<br />";

$rses=json_encode($qa);
echo $rses;

}

}else{
echo "error in connecting db";
}
?>

当我启动我的应用程序时,它显示“this is null”,但是当我在浏览器中打开我的 php 代码时,它会正确显示数据。有什么问题吗?

更新:

我使用了另一个网址并且它有效。所以问题出在我的 php 代码中。我删除了 echo "<br />";并在浏览器中打开它,结果是 {"Question":"question","Answer":"a","Answer2":"b","Answer3":"c","Answer4":"d"}我对 json 格式不专业,但我认为它的格式不正确。我该如何解决这个问题?

最佳答案

您的浏览器可以正确呈现 HTML。这将隐藏在你的眼睛之外

 echo "<br />";

Android 只关心字符串内容,因此无法解析该中断标记。

您可能会检查 logcat 以查看是否发生 JSONParseException,尽管您捕获了它并返回 null,因此应用程序不会崩溃

仅在 PHP 中回显 JSON

由于您有一个 while 循环,因此您想要构建一个 JSONArray 并解析它,而不是尝试逐行解析 JsonObject。

此外,这不是必需的

String message=gson.toJson(output);

你有一个 JsonObject 作为输出,所以只需 toString

关于php - Android 中与服务器数据库的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38752251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com