결과

데이터베이스2과목에서 Rust로 만드는 웹서버에서 API를 호출하여 스레드리스트를 받아 뿌리는 코드

<!-- HTML generated using hilite.me -->
using Android.App; using Android.Widget; using Android.OS; using System.Collections.Generic; using System.Threading.Tasks; using System; using Org.Apache.Http.Client.Methods; using Android.Util; using Java.IO; using Android.Views; using Java.Lang; namespace App1 { public class DMTask<TParams,TProgress,TResult> { public delegate void OnPostExecuteHandler(TResult result); public delegate TResult Handler(params TParams[] @params); public event OnPostExecuteHandler OnPostExecute; public event Action OnPreExecute; private class _T:AsyncTask<TParams,TProgress,TResult> { private Handler m_handler; private DMTask<TParams, TProgress, TResult> m_dMTask; public _T(Handler handler, DMTask<TParams, TProgress, TResult> dMTask) { m_handler = handler; m_dMTask = dMTask; } protected override void OnPreExecute() { if (m_dMTask.OnPreExecute != null) { m_dMTask.OnPreExecute(); } } protected override void OnPostExecute(TResult result) { if(m_dMTask.OnPostExecute != null) { m_dMTask.OnPostExecute(result); } } protected override TResult RunInBackground(params TParams[] @params) { return this.m_handler(@params); } } public void Run(Handler handler,params TParams[] @params) { var a = new _T(handler,this); a.Execute(@params); } } public class User { public string Nickname { get; set; } public string Email { get; set; } public int Uid { get; set; } public static User FromJson(JsonReader reader) { var user = new User(); reader.BeginObject(); while (reader.HasNext) { switch (reader.NextName()) { case "uid": user.Uid = reader.NextInt(); break; case "email": user.Email = reader.NextString(); break; case "nickname": user.Nickname = reader.NextString(); break; default: reader.SkipValue(); break; } } reader.EndObject(); return user; } } public class ThreadSummary { public static ThreadSummary FromJson(JsonReader reader) { var thread = new ThreadSummary(); reader.BeginObject(); while (reader.HasNext) { switch (reader.NextName()) { case "uid": thread.Uid = reader.NextInt(); break; case "subject": thread.Subject = reader.NextString(); break; case "opener": thread.Opener = User.FromJson(reader); break; case "recent_update_datetime": thread.LastUpdate = DateTime.Parse( reader.NextString()); break; default: reader.SkipValue(); break; } } reader.EndObject(); return thread; } public int Uid { get; set; } public string Subject { get; set; } public User Opener { get; set; } public System.DateTime LastUpdate { get; set; } } public class ThreadList { public static List<ThreadSummary> Get() { var client = System.Net.HttpWebRequest.CreateDefault(new Uri("http://192.168.1.103:9999/threads")) as System.Net.HttpWebRequest; client.Accept = "application/json"; var response = client.GetResponse() as System.Net.HttpWebResponse; if(response.StatusCode != System.Net.HttpStatusCode.OK) { return null; } var res = new List<ThreadSummary>(); var jsonReader = new JsonReader(new InputStreamReader(new System.IO.BufferedStream( response.GetResponseStream()))); jsonReader.BeginArray(); while(jsonReader.HasNext) { res.Add(ThreadSummary.FromJson(jsonReader)); } jsonReader.EndArray(); return res; } } public class ListAdaptor : BaseAdapter<ThreadSummary> { private List<ThreadSummary> m_list; private Activity m_context; public ListAdaptor(Activity context, List<ThreadSummary> list) { m_context = context; m_list = list; } public override int Count => m_list.Count; public override ThreadSummary this[int position] { get { return m_list[position]; } } public override long GetItemId(int position) { return (long)position; } public override View GetView(int position, View convertView, ViewGroup parent) { View view = convertView; if(view == null) { view = m_context.LayoutInflater.Inflate(Resource.Layout.threadlist_item,null); } view.FindViewById<TextView>(Resource.Id.threadlist_item_subject).Text = m_list[position].Subject; return view; } } [Activity(Label = "App1", MainLauncher = true)] public class MainActivity : Activity { private ListView listView; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); listView = FindViewById<ListView>(Resource.Id.listview1); } protected override void OnStart() { base.OnStart(); var a = new DMTask<object,object, List<ThreadSummary>>(); ProgressDialog progressDialog = new Android.App.ProgressDialog(this); progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner); progressDialog.SetMessage("스레드 리스트를 다운받고 있습니다"); progressDialog.Show(); DMTask<object, object, List<ThreadSummary>>.Handler handler = (object[] args)=> { return ThreadList.Get(); }; a.OnPostExecute += delegate (List<ThreadSummary> msg) { progressDialog.Dismiss(); this.listView.Adapter = new ListAdaptor(this, msg); //this.textView.Text = msg; }; a.Run(handler); } } }