未从在线 mysql 服务器检索数据
Posted
技术标签:
【中文标题】未从在线 mysql 服务器检索数据【英文标题】:data not retrieving from online mysql server 【发布时间】:2017-08-18 14:35:33 【问题描述】:我正在尝试通过 json 从在线数据库(mysql)中获取数据,并希望将其显示为 ListView。到目前为止我做了什么:
Downloader.java
public class Downloader extends AsyncTask<Void,Integer,String>
Context c;
String address;
ListView lv;
ProgressDialog pd;
public Downloader(Context c, String address, ListView lv)
this.c = c;
this.address = address;
this.lv = lv;
//B4 JOB STARTS
@Override
protected void onPreExecute()
super.onPreExecute();
pd=new ProgressDialog(c);
pd.setTitle("Fetch Data");
pd.setMessage("Fetching Data...Please wait");
pd.show();
@Override
protected String doInBackground(Void... params)
String data=downloadData();
return data;
@Override
protected void onPostExecute(String s)
super.onPostExecute(s);
pd.dismiss();;
if(s != null)
Parser p=new Parser(c,s,lv);
p.execute();
else
Toast.makeText(c,"Unable to download data",Toast.LENGTH_SHORT).show();
private String downloadData()
//connect and get a stream
InputStream is=null;
String line =null;
try
URL url=new URL(address);
HttpURLConnection con= (HttpURLConnection) url.openConnection();
is=new BufferedInputStream(con.getInputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(is));
StringBuffer sb=new StringBuffer();
if(br != null)
while ((line=br.readLine()) != null)
sb.append(line+"n");
else
return null;
return sb.toString();
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
finally
if(is != null)
try
is.close();
catch (IOException e)
e.printStackTrace();
return null;
MainActivity.java
public class MainActivity extends Activity
String url="http://bookvilla.esy.es/book.php";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView lv= (ListView) findViewById(R.id.lv);
final Downloader d=new Downloader(this,url,lv);
d.execute();
当我运行该应用程序时,我收到一条提示消息“无法下载数据”,该消息位于 Downloader.java 类的第 35 行。所以我猜测我从数据库中获取的数据是空的……但是为什么会这样……
$con = mysqli_connect($host,$u_name,$pwd,$db) or die('无法连接'); if(mysqli_connect_error($con)) echo "连接失败 数据库".mysqli_connect_error();
$query = mysqli_query($con,"SELECT * FROM playerstb");如果($查询)
while($row=mysqli_fetch_array($query)) $flag[] = $row;
打印(json_encode($flag)); mysqli_close($con);
上面是我的php文件
【问题讨论】:
没人帮忙吗?private String downloadData()
甚至被调用了吗?我不这么认为。我想你忘了覆盖public void execute()
方法
【参考方案1】:
不确定如何解决您的问题,但我使用了不同的方法:
db_config.php:
<?php
define('DB_USER',"root");
define('DB_PASSWORD',null);
define('DB_DATABASE',"phoneshop");
define('DB_SERVER',"localhost");
?>
db_connect.php:
<?php
class DB_CONNECT
private $con = '';
function __construct()
$this->connect();
function __destruct()
$this->close();
function connect()
require_once __DIR__ . '/db_config.php';
$this->con = mysqli_connect(DB_SERVER , DB_USER , null , DB_DATABASE) or die(mysqli_error());
return $this->con;
function close()
mysqli_close($this->con);
function query($query)
return mysqli_query($this->con, $query);
?>
然后我制作了这个文件来接收数据:
<?php
$response = array();
require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();
$result = $db->query('SELECT * FROM products') or die('error');
if (mysqli_num_rows($result) > 0)
$response["products"] = array();
while ($row = mysqli_fetch_array($result))
$product = array();
$product["pid"] = $row["pid"];
$product["name"] = $row["name"];
$product["price"] = $row["price"];
$product["description"] = $row["description"];
array_push($response["products"], $product);
$response["success"] = 1;
echo json_encode($response);
else
$response["success"] = 0;
$response["message"] = "No products found";
echo json_encode($response);
?>
然后从 android 工作室:
电话:
private String url_all_products = "http://10.0.0.10:8012/onlineShop/get_all_products.php";
//ip of the server or 10.0.2.2 if in emulator
ContentValues params = new ContentValues();
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
解析器:
public class JSONParser
static JSONObject jObj;
static String json;
// constructor
public JSONParser()
// function get json from url
// by making HTTP POST or GET mehtod
public static JSONObject makeHttpRequest(String url, String method, ContentValues params)
// Making HTTP request
try
final OkHttpClient client = new OkHttpClient();
Request request;
// check for request method
if (method.equals("POST"))
// request method is POST
MediaType contentType = MediaType.parse("application/x-www-form-urlencoded; charset=UTF-8");
String content = "";
for (String key : params.keySet())
if ( !content.isEmpty())
content += "&";
content += key + "=" + params.get(key);
RequestBody body = RequestBody.create(contentType, content);
request = new Request.Builder().url(url).post(body).build();
else
// request method is GET
request = new Request.Builder().url(url).build();
final Response response = client.newCall(request).execute();
json = response.body().string();
catch (IOException e)
e.printStackTrace();
// try parse the string to a JSON object
try
jObj = new JSONObject(json);
catch (JSONException e )
Log.e("JSON Parser", "Error parsing data " + e.toString());
// return JSON String
return jObj;
将其添加到 gradle 时:
compile 'com.squareup.okhttp3:okhttp:3.4.2'
【讨论】:
兄弟,我解决了我的错误......这是一个愚蠢的错误......我把“http://”输入了两次......哈哈。无论如何,谢谢你抽出时间。 你把它放在哪里了? 在 MainActivity.java 的第二行...你不会看到它,因为我已经编辑了问题。以上是关于未从在线 mysql 服务器检索数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 Workbench 从 MSSQL 迁移到 MySQL 时未从源中检索模式列表