ANDROID& PHP-如何使用PHP从MySql显示JSONArray [英] ANDROID&PHP - How to display JSONArray from MySql using PHP
问题描述
我用来在下面的JSONArray中显示表值的代码
The code that I use to displaying value of table into JSONArray below
send_data.php
<?php
include 'dbconfig.php';
$con = new mysqli($servername, $username, $password, $dbname);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = "select id,ask from pertanyaan";
$result = mysqli_query($con,$query);
$rows = array();
while($r = mysqli_fetch_array($result)) {
$rows[] =$r;
}
echo json_encode(array_values($rows));
mysqli_close($con);
?>
,JSONArray输出类似于此
and the JSONArray output is like this
[{"0":"1","id":"1","1":"pertanyaan ke 1","ask":"pertanyaan ke 1"},{"0":"2","id":"2","1":"pertanyaan ke 2","ask":"pertanyaan ke 2"},{"0":"3","id":"3","1":"pertanyaan ke 3","ask":"pertanyaan ke 3"},{"0":"4","id":"4","1":"pertanyaan ke 4","ask":"pertanyaan ke 4"},{"0":"5","id":"5","1":"pertanyaan ke 5","ask":"pertanyaan ke 5"}]
但是每次我尝试在Android上显示该URL时,都会收到一条错误消息
but everytime i try that URL to display in android, i got an error that say
Value <html><body<>script of type java.lang.String cannot be converted to JSONArray
但是当我用相同的输出此处将新的API创建到android studio中时,它的工作正常,
but when i create new API with the same output here into android studio, its work fine,
我使用错误的代码从PHP编码JSON吗?
did i use wrong code to encode JSON from PHP?
推荐答案
问题
HttpURLConnection
不支持JavaScript,但是使用JavaScript会生成所需的cookie.
HttpURLConnection
has no JavaScript support, but a needed cookie is generated using JavaScript.
您的电话
String reqUrl = "http://zxccvvv.cuccfree.com/send_data.php";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
失败,因为缺少__test
cookie.
fails, because the cookie __test
is missing.
修复
乍一看JavaScript来源,对于给定的URL cookie似乎是恒定的,因此为恒定cookie 设置足够了:
From a first glance at the JavaScript source the cookie seems to be constant for a given url, so it might be enough to set for a constant cookie:
String cookie = "__test=2bf7c15501c0ec57f8e41cb84871a69c";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Cookie", cookie);
替代方法::使用WebView可以抓取cookie,因此这是首选方法,因为如果cookie更改并且它没有太多时间延迟,它也不会破坏:>
Alternative: Using a WebView we can grab the cookie, so this is the preferable approach, since it will not break, if the cookie changes and it is not much of a time delay:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getCookie();
if(cookie!=null) {
new GetContacts().execute();
}
}
private void getCookie(){
CookieManager.setAcceptFileSchemeCookies(true);
WebView wv = new WebView(getApplicationContext());
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(url);
cookie = CookieManager.getInstance().getCookie("zxccvvv.cuccfree.com");
}
并按照上面的示例进行设置:
and set it as in above example:
conn.setRequestProperty("Cookie", cookie);
logcat中的输出
Response from url: [{"0":"1","id":"1","1":"pertanyaan ke 1","ask":"pertanyaan ke 1"},{"0":"2","id":"2","1":"pertanyaan ke 2","ask":"pertanyaan ke 2"},{"0":"3","id":"3","1":"pertanyaan ke 3","ask":"pertanyaan ke 3"},{"0":"4","id":"4","1":"pertanyaan ke 4","ask":"pertanyaan ke 4"},{"0":"5","id":"5","1":"pertanyaan ke 5","ask":"pertanyaan ke 5"}]
这篇关于ANDROID& PHP-如何使用PHP从MySql显示JSONArray的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!