我用来在下面的JSONArray中显示表值的代码

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的输出就像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时,我都会收到一条错误消息:

Value <html><body<>script of type java.lang.String cannot be converted to JSONArray

但是当我在android studio中创建具有相同输出here的新API时,它的工作正常,

我使用错误的代码从PHP编码JSON吗?

最佳答案

问题

HttpURLConnection不支持JavaScript,但是使用JavaScript生成了所需的cookie。

你的来电

String reqUrl = "http://zxccvvv.cuccfree.com/send_data.php";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();


失败,因为缺少cookie __test

固定

乍一看JavaScript源,对于给定的URL,cookie似乎是恒定的,因此设置恒定的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更改并且时间不多,它也不会损坏:

@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");
}


并按照上面的示例进行设置:

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"}]

关于php - ANDROID&PHP-如何使用PHP从MySql显示JSONArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40199853/

10-09 00:53