Я пытаюсь извлечь данные из базы данных MySQL, размещенной в Microsoft Azure, и отобразить ее в виде списка (во фрагменте).
Я следовал указаниям этого поста:
Извлечение данных из Mysql DB с помощью PHP и JSON в Xamarin Android C # .NET
Но я все еще получаю пустой список. Я думаю, что ошибка происходит из-за моего PHP, так как когда я запускаю свой PHP-скрипт, я ничего не получаю в своем браузере.
Вот мой код:
PHP:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$servername = "eu-cdbr-azure-north-e.cloudapp.net";
$username = "****************";
$password = "**********";
try
{
$conn = new PDO("mysql:host=$servername;dbname=******",$username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
$query = $conn->prepare("SELECT FROM contact_info");
$rows = array();while($row = $query->fetch(PDO::FETCH_ASSOC))
{
$rows['contact_name'][]= $row;
$rows['contact_email'][]= $row;
$rows['contact_password'][]= $row;
$rows['contact_trip'][]=$row;
}
header("Content-type: application/json; charset=utf-8");
echo json_encode($rows);
C # (фрагмент):
public class Customers : Android.Support.V4.App.Fragment
{
List<people> mClient = new List<people>();
ListView client;
private WebClient webClient;
private Uri mUrl;
private BaseAdapter<people> mAdapter;
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
client = View.FindViewById<ListView>(Resource.Id.list);
webClient = new WebClient();
mUrl = new Uri("http://*********.azurewebsites.net/admin.php");
webClient.DownloadDataAsync(mUrl);
webClient.DownloadDataCompleted += webClient_DownloadDataCompleted;
MyListViewAdapter adapter = new MyListViewAdapter(this.Activity, mClient);
client.Adapter = adapter;
}
private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
Activity.RunOnUiThread(() =>
{
string json = Encoding.UTF8.GetString(e.Result);
mClient = JsonConvert.DeserializeObject<List<people>>(json);
mAdapter = new MyListViewAdapter(this.Activity, mClient);
client.Adapter = mAdapter;
});
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate(Resource.Layout.Frag1Layout, container, false);
return view;
}public override string ToString()
{
return "Customers";
}
}
C # (адаптер):
using System;
using Android.App;
using Android.Content;
using Android.Widget;
using Android.Runtime;
using System.Collections.Generic;
using Android.Views;
using Android.OS;
namespace Tonio_Pick_Me_Up.Droid
{
class MyListViewAdapter : BaseAdapter<people>
{
public List<people> mItems;
private Context mContext;
public MyListViewAdapter(Context context, List<people> items)
{
mItems = items;
mContext = context;
}
public override int Count
{
get { return mItems.Count; }
}
public override long GetItemId(int position)
{
return position;
}
public override people this[int position]
{
get { return mItems[position]; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = LayoutInflater.From(mContext).Inflate(Resource.Layout.contactlist, null, false);
}
TextView ContactName = row.FindViewById<TextView>(Resource.Id.ContactName);
ContactName.Text = mItems[position].Contact_Name;
TextView ContactEmail = row.FindViewById<TextView>(Resource.Id.ContactEmail);
ContactName.Text = mItems[position].Contact_Email;
TextView ContactNextTrip = row.FindViewById<TextView>(Resource.Id.ContactNextTrip);
ContactName.Text = mItems[position].Contact_Email;
return row;
}
}
}C#(people class):
using System;
using Newtonsoft.Json;
namespace Tonio_Pick_Me_Up.Droid
{
public class people
{
[JsonProperty("Contact_Name")]
public string Contact_Name { get; set;}
[JsonProperty("Contact_Email")]
public string Contact_Email { get; set; }
[JsonProperty("Contact_Trip")]
public string Contact_Trip { get; set; }
}
}
Надеюсь, ты сможешь помочь,
заранее спасибо.
Задача ещё не решена.
Других решений пока нет …