未从在线 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 时未从源中检索模式列表

未从 Dropbox 检索图像

UIImageView+AFNetworking 未从服务器检索最新图像

在 Angular 7 中未从 Firebase 检索数据

未从 firebase 数据库中检索个人资料图片

$_POST 未从 Javascript 的 Fetch() 中检索数据