محمد معین عبدی 255 ارسال شده در 26 دی، ۱۳۹۵ اشتراک گذاری ارسال شده در 26 دی، ۱۳۹۵ سلام دوستان عزیز ، امروز من ی قسمتی از نرم افزارمو داشتم تکمیل میکردم ، به قسمت هواشناسی رسیدم، نیاز داشتم از ی api هواشناسی استفاده کنم ، همونطور که میدونید سرور های زیادی api هواشناسی رو ارایه میکنن ولی بیشتر اون ها برای توسعه دهنده های ایرانی بستس از جمله یاهو !! خب ما در این آموزش سعی داریم که از api هواشناسی سایت زیر استفاده کنیم : openweathermap.org خب اول از همه وارد سایت میشید و ثبت نام میکنید ، توجه داشته باشید که پنل رایگان رو انتخاب کنید ، و بعد از ثبت نام ، وارد پنل خودتون بشید و بعد از انتخاب سرویس ، وارد قسمت API keys بشید و key خودتون رو ی جایی ذخیره کنید. خب حالا وارد اندروید استدیو بشید و یک پروژه جدید تشکیل بدید: خب حالا در اندروید استدیو یک کلاس به نام Function ایجاد کنید و کد های زیر رو در کلاس قرار بدید : import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; import java.util.Locale; /** * Created by moein on 15/01/2017. */ public class Function { private static final String OPEN_WEATHER_MAP_URL = "http://api.openweathermap.org/data/2.5/weather?lat=%s&lon=%s&units=metric"; private static final String OPEN_WEATHER_MAP_API = "b996dd71d70d2b9f4e72a87e5c3b9260"; public static String setWeatherIcon(int actualId, long sunrise, long sunset){ int id = actualId / 100; String icon = ""; if(actualId == 800){ long currentTime = new Date().getTime(); if(currentTime>=sunrise && currentTime<sunset) { icon = ""; } else { icon = ""; } } else { switch(id) { case 2 : icon = ""; break; case 3 : icon = ""; break; case 7 : icon = ""; break; case 8 : icon = ""; break; case 6 : icon = ""; break; case 5 : icon = ""; break; } } return icon; } public interface AsyncResponse { void processFinish(String output1, String output2, String output3, String output4, String output5, String output6, String output7); } public static class placeIdTask extends AsyncTask<String, Void, JSONObject> { public AsyncResponse delegate = null;//Call back interface public placeIdTask(AsyncResponse asyncResponse) { delegate = asyncResponse;//Assigning call back interfacethrough constructor } @Override protected JSONObject doInBackground(String... params) { JSONObject jsonWeather = null; try { jsonWeather = getWeatherJSON(params[0], params[1]); } catch (Exception e) { Log.d("Error", "Cannot process JSON results", e); } return jsonWeather; } @Override protected void onPostExecute(JSONObject json) { try { if(json != null){ JSONObject details = json.getJSONArray("weather").getJSONObject(0); JSONObject main = json.getJSONObject("main"); DateFormat df; String city = json.getString("name").toUpperCase(Locale.US) + ", " + json.getJSONObject("sys").getString("country"); String description = details.getString("description").toUpperCase(Locale.US); String temperature = String.format("%.2f", main.getDouble("temp"))+ "°"; String humidity = main.getString("humidity") + "%"; String pressure = main.getString("pressure") + " hPa"; String iconText = setWeatherIcon(details.getInt("id"), json.getJSONObject("sys").getLong("sunrise") * 1000, json.getJSONObject("sys").getLong("sunset") * 1000); delegate.processFinish(city, description, temperature, humidity, pressure, iconText, ""+ (json.getJSONObject("sys").getLong("sunrise") * 1000)); } } catch (JSONException e) { //Log.e(LOG_TAG, "Cannot process JSON results", e); } } } public static JSONObject getWeatherJSON(String lat, String lon){ try { URL url = new URL(String.format(OPEN_WEATHER_MAP_URL, lat, lon)); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.addRequestProperty("x-api-key", OPEN_WEATHER_MAP_API); BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream())); StringBuffer json = new StringBuffer(1024); String tmp=""; while((tmp=reader.readLine())!=null) json.append(tmp).append("\n"); reader.close(); JSONObject data = new JSONObject(json.toString()); // This value will be 404 if the request was not // successful if(data.getInt("cod") != 200){ return null; } return data; }catch(Exception e){ return null; } } } سپس در اندروید استدیو وارد قسمت لایه اکتیوتی مورد نظرتون بشید و کد های زیر رو اضافه کنید: <TextView android:id="@+id/city_field" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/weather_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="90sp" /> <TextView android:id="@+id/current_temperature_field" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="50sp" /> <TextView android:id="@+id/details_field" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/weather_icon" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/humidity_field" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/details_field" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/pressure_field" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/humidity_field" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" android:textAppearance="?android:attr/textAppearanceMedium" /> و بعد از این وارد کلاس اکتیویتی خودتون بشید و کد های زیر رو اضافه کنید : TextView cityField, detailsField, currentTemperatureField, humidity_field, pressure_field, weatherIcon; Typeface weatherFont; cityField = (TextView)findViewById(R.id.city_field); detailsField = (TextView)findViewById(R.id.details_field); currentTemperatureField = (TextView)findViewById(R.id.current_temperature_field); humidity_field = (TextView)findViewById(R.id.humidity_field); pressure_field = (TextView)findViewById(R.id.pressure_field); weatherIcon = (TextView)findViewById(R.id.weather_icon); weatherIcon.setTypeface(weatherFont); Function.placeIdTask asyncTask =new Function.placeIdTask(new Function.AsyncResponse() { public void processFinish(String weather_city, String weather_description, String weather_temperature, String weather_humidity, String weather_pressure, String weather_iconText, String sun_rise) { cityField.setText(weather_city); detailsField.setText(weather_description); currentTemperatureField.setText(weather_temperature); humidity_field.setText("Humidity: "+weather_humidity); pressure_field.setText("Pressure: "+weather_pressure); weatherIcon.setText(Html.fromHtml(weather_iconText)); } }); asyncTask.execute("34.3277", "47.0778"); // asyncTask.execute("Latitude", "Longitude") و در آخر هم بیاید دسترسی اینترنت رو بهش بدید از طریق Manifest <uses-permission android:name="android.permission.INTERNET"/> و آخرین نکته اینه که فونتی رو که واستون پیوست میکنم به برنامه اضافه کنید و در پوشه assets/fonts قرار بدید. اگه بخوام همشو توضیح بدم زیاد میشه اگه دوستان میخان درخواست بدن که فیلم آموزشیشو تهیه کنم. با تشکر. weathericons-regular-webfont.zip لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
101011 50 ارسال شده در 27 دی، ۱۳۹۵ اشتراک گذاری ارسال شده در 27 دی، ۱۳۹۵ ببخشید از api چجوری میشه در بیسیک فور اندروید استفاده کرد هیچ نمونه ای چیزی کسی نداره.یاد بگیریم؟ لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمد معین عبدی 255 ارسال شده در 27 دی، ۱۳۹۵ سازنده اشتراک گذاری ارسال شده در 27 دی، ۱۳۹۵ در 7 ساعت قبل، 101011 گفته است : ببخشید از api چجوری میشه در بیسیک فور اندروید استفاده کرد هیچ نمونه ای چیزی کسی نداره.یاد بگیریم؟ والا نمیدونم، زیاد بیسیک کار نکردم دوست نداشتم ، ولی فک کنم بشه استفاده کرد چون فقط اطلاعات با فرمت جیسون JSON دریافت میشن و کتابخانه جیسون هم واسه بیسیک موجوده ، بستگی به خلاقیت شما داره. لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
mr.ehsan8001 57 ارسال شده در 27 دی، ۱۳۹۵ اشتراک گذاری ارسال شده در 27 دی، ۱۳۹۵ برای هر سایتی همین کد ها استفاده میشه؟ مثلا سایت weatherunderground.com لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمد معین عبدی 255 ارسال شده در 27 دی، ۱۳۹۵ سازنده اشتراک گذاری ارسال شده در 27 دی، ۱۳۹۵ در 1 ساعت قبل، mr.ehsan8001 گفته است : برای هر سایتی همین کد ها استفاده میشه؟ مثلا سایت weatherunderground.com سلام بله تقریبا همشون تو ی قالبن ولی باید ببینید که. مقدار جیسون در سرور اون سایت چی هست که با این جایگزین کنید. موفق باشید. لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.