[英]connection to server database in Android
我正在嘗試將我的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: 由於AsyncTask是一個單獨的類,如何將OnPostExecute()的結果獲取到主要活動中?
而我的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";
}
?>
當我啟動我的應用程序時,它顯示“這是null”,但是當我在瀏覽器中打開php代碼時,它可以正確顯示數據。 問題是什么?
更新:
我用了另一個網址,它的工作。 所以問題出在我的PHP代碼中。我刪除了echo "<br />";
並在瀏覽器上將其打開。結果為{"Question":"question","Answer":"a","Answer2":"b","Answer3":"c","Answer4":"d"}
我不是專業的json格式,但我認為它的格式不正確。我該如何解決?
您的瀏覽器可以正確呈現HTML。 這將隱藏在您的眼中
echo "<br />";
Android僅關心字符串內容,因此無法解析該break標記。
您可以檢查logcat以查看JSONParseException發生了,盡管您捕獲了它並返回null,所以應用程序不會崩潰
只在PHP中回顯JSON
而且,由於有一個while循環,因此您想構建一個JSONArray並對其進行解析,而不是嘗試逐行解析JsonObject。
此外,這不是必需的
String message=gson.toJson(output);
您有一個JsonObject作為output
,因此只需toString
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.