我正在尝试从我在wamp服务器中使用select.php查询的表中获取json数据,该数据在浏览器中显示,但是android由于某些原因无法下载该数据。
select.php
<?php
$conn=mysqli_connect("localhost","root","", "shady") or die("Unable to connect");
if(mysqli_connect_error($conn)) {
echo "Failed To Connect";
}
$qry = "SELECT * FROM `wellden`";
$res = mysqli_query($conn, $qry);
if ($res) {
while ($row = mysqli_fetch_array($res)) {
$flag[] = $row;
}
// returns tthe json data
echo json_encode($flag);
}
mysqli_close($conn);
?>
工作正常并在浏览器中打印数据:
但是出于某些奇怪的原因,android似乎无法从php文件中获取回显的数据。
Android代码:
public class ListOfCourses extends AppCompatActivity {
ListView listView;
ArrayList<String> arrayList;
ArrayAdapter<String> arrayAdapter;
String REG_URL;
public class Listdata extends AsyncTask<String, Void, String>{
HttpURLConnection conn;
URL url;
String jsonStringForMe;
@Override
protected String doInBackground(String... strings) {
// MOST CRITICAL PART.....................................
String s = strings[0];
try {
url = new URL(s);
conn = (HttpURLConnection) url.openConnection();
BufferedReader 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);
}
// Stroring it to use in the onPostExecute Cause we do not have any Button in this view
jsonStringForMe = sb.toString();
return jsonStringForMe;
}catch (Exception e){
return e.getMessage();
}
// MOST CRITICA PART ENDS HERE..............................
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// JsonParsing Happens Here
Toast.makeText(getApplicationContext(), jsonStringForMe+" ", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_of_courses);
Listdata listdata = new Listdata();
REG_URL="http://1.0.0.2/android_db_pool/select.php";
listdata.execute(REG_URL);
}
}
,但是每次jsonStringForMe在postExecute中为我提供空值时,一切似乎都应该可以,但由于某些原因不起作用。 android端未接收到json数据的原因可能是什么?
编辑 我还添加了互联网许可:
AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.slimshady.jamalsir1">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ListOfCourses"></activity>
</application>
</manifest>
编辑2
似乎ip地址可能是一个问题,但在insert.php中插入不起作用,我可以使用ip地址获取json数据,该ip地址是我服务器的ip地址 1.0。 0.2 。在android中,我仅在php中使用服务器的IP地址而不是localhost,因为php文件在我的服务器中,所以我使用 localhost 。
答案 0 :(得分:1)
已经评论;
使用它存储在
onPostExecute
中,因为我们没有任何 此视图中的按钮
您没有在onPostExecute()
方法中添加或用来获取json ,但是您在Toast
中添加了onPreExecute
。
尝试添加onPostExecute()
,然后显示Toast
。
受保护的空白
onPreExecute()
在之前的UI线程上运行
doInBackground(Params...)
。
https://developer.android.com/reference/android/os/AsyncTask#onPreExecute%28%29