بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

یک سرویس هواشناسی ساده

aliakbar333  12 سال پیش  11 سال پیش
+18 0

 سلام دوستان 

میخوام یه سرویس آب و هوا رو بنویسم که بعضی از قسمت ها رو در زیر کدش رو آوردم و برای درک بهتر پروژه تجربیات شما قطعا مفیده

 

کدهای لازم برای سرویس هواشناسی

 package com.allmycode.services;


import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class MyWeatherService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        Toast.makeText(this, R.string.service_bound,
                       Toast.LENGTH_SHORT).show();
        System.out.println("onBindCalled");
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, 
                              int flags, int startId) {
        Toast.makeText(this, R.string.service_started, 
                       Toast.LENGTH_SHORT).show();
        System.out.println("onStartCommandCalled");

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, R.string.service_destroyed, 
                       Toast.LENGTH_SHORT).show();
    }
}

 

 

 

+1 0
شما بهتر بود اگه پروژه میخواین رایگان منتشر کنید توی گیت هاب بزارید و دوستان fork کنن.(یعنی تغییرات رو اعمال کنن بعد پروژه رو fork کنن بعد شما اگه دیدی تغییرات خوبی روی پروژه دادن accept کنید یا به عنوان یک Realese دیگه انتشارش کنی.) (12 سال پیش)
+2 0
جان ! حمید جان ! خوشم میاد مثل خودم عاشق مهندسی معکوسی ! منم کلا معکوس رو خیلی دوست دارم البته از هر چیز و هر نوعش و هر کجا ! چه پشت فرمون چه تو دنیای فناوری . در مورد سایت گیت هاپ باید بگم سرویس خوبیه اما من تا حالا باهاش کار نکردم . (12 سال پیش)
+2 0
با تشکر از شما ... اینجا هم یک آموزش برای برنامه های هواشناسی وجود دارد که میتواند مفید باشد : لینک (11 سال پیش)
 برای این سوال 25 پاسخ وجود دارد.
پاسخ به سوال 
aliakbar333  12 سال پیش
+1 0

 میرسیم به تجزیه اطلاعات آب و هوا 

برچسب آب و هوا یه آرایه است

 // We get weather info (This is an array)
JSONArray jArr = jObj.getJSONArray("weather");

// We use only the first value
JSONObject JSONWeather = jArr.getJSONObject(0);
weather.currentCondition.setWeatherId(getInt("id", JSONWeather));
weather.currentCondition.setDescr(getString("description", JSONWeather));
weather.currentCondition.setCondition(getString("main", JSONWeather));
weather.currentCondition.setIcon(getString("icon", JSONWeather));

JSONObject mainObj = getObject("main", jObj);
weather.currentCondition.setHumidity(getInt("humidity", mainObj));
weather.currentCondition.setPressure(getInt("pressure", mainObj));
weather.temperature.setMaxTemp(getFloat("temp_max", mainObj));
weather.temperature.setMinTemp(getFloat("temp_min", mainObj));
weather.temperature.setTemp(getFloat("temp", mainObj));

// Wind
JSONObject wObj = getObject("wind", jObj);
weather.wind.setSpeed(getFloat("speed", wObj));
weather.wind.setDeg(getFloat("deg", wObj));

// Clouds
JSONObject cObj = getObject("clouds", jObj);
weather.clouds.setPerc(getInt("all", cObj));

 

پاسخ به سوال 
aliakbar333  12 سال پیش
+1 0

نیازهای HTTP و پاسخ 

برای تبادل اطلاعات با سرور ما از HTTP استفاده می کنیم . این فرایند شامل ارسال اطلاعات ، خواندن اطلاعات و سپس پاسخ می باشد.

برای این کار از کد زیر استفاده می کنیم : 

 public class WeatherHttpClient {

    private static String BASE_URL = "http://api.openweathermap.org/data/2.5/weather?q=";
    private static String IMG_URL = "http://openweathermap.org/img/w/";

    public String getWeatherData(String location) {
        HttpURLConnection con = null ;
        InputStream is = null;

        try {
            con = (HttpURLConnection) ( new URL(BASE_URL + location)).openConnection();
            con.setRequestMethod("GET");
            con.setDoInput(true);
            con.setDoOutput(true);
            con.connect();

            // Let's read the response
            StringBuffer buffer = new StringBuffer();
            is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line = null;
            while (  (line = br.readLine()) != null )
                buffer.append(line + "\r\n");

            is.close();
            con.disconnect();
            return buffer.toString();
        }
        catch(Throwable t) {
            t.printStackTrace();
        }
        finally {
            try { is.close(); } catch(Throwable t) {}
            try { con.disconnect(); } catch(Throwable t) {}
        }

        return null;

    }

    public byte[] getImage(String code) {
        HttpURLConnection con = null ;
        InputStream is = null;
        try {
            con = (HttpURLConnection) ( new URL(IMG_URL + code)).openConnection();
            con.setRequestMethod("GET");
            con.setDoInput(true);
            con.setDoOutput(true);
            con.connect();

            // Let's read the response
            is = con.getInputStream();
            byte[] buffer = new byte[1024];
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            while ( is.read(buffer) != -1)
                baos.write(buffer);

            return baos.toByteArray();
        }
        catch(Throwable t) {
            t.printStackTrace();
        }
        finally {
            try { is.close(); } catch(Throwable t) {}
            try { con.disconnect(); } catch(Throwable t) {}
        }

        return null;

    }
}

 

پاسخ به سوال 
aliakbar333  12 سال پیش
+1 0

اپلیکیشن آب و هوا

در این مرحله ما به یک اسکلت برای بهبود روند پروژه نیازمندیم . میتونیم برای این کار از یه طرح ساده استفاده کنیم و لزومی نداره اون رو زیاد پیچیده کنیم .

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/cityText"
        style="?android:attr/textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <ImageView
        android:id="@+id/condIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/cityText" />

    <TextView
        android:id="@+id/condDescr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/condIcon"
        android:layout_alignLeft="@id/condIcon" 
       />

    <TextView
        android:id="@+id/temp"
        style="@style/tempStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:layout_alignBaseline="@id/condDescr"
        android:layout_toRightOf="@id/condDescr"/>

    <TextView
        android:id="@+id/pressLab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/condDescr"
        android:text="Pressure"
        android:layout_marginTop="15dp" />

    <TextView
        android:id="@+id/press"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/pressLab"
        android:layout_toRightOf="@id/pressLab" 
        style="@style/valData"/>

    <TextView
        android:id="@+id/humLab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/pressLab"
        android:text="Humidity" />

    <TextView
        android:id="@+id/hum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/humLab"
        android:layout_toRightOf="@id/humLab" 
        android:layout_marginLeft="4dp"
        style="@style/valData"/>

    <TextView
        android:id="@+id/windLab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/humLab"
        android:text="Wind" />

    <TextView
        android:id="@+id/windSpeed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/windLab"
        android:layout_toRightOf="@id/windLab"
        android:layout_marginLeft="4dp"
        style="@style/valData" />

    <TextView
        android:id="@+id/windDeg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/windLab"
        android:layout_toRightOf="@id/windSpeed"
        android:layout_marginLeft="4dp" 
        style="@style/valData"/>

</RelativeLayout>

 

 

پاسخ به سوال 
aliakbar333  12 سال پیش
+1 0

در متود onCreate  ما میتونیم از یه روش ساده استفاده کنیم تا اونو توی layout به نمایش بذاریم و بعد اونو کاملتر کرد : 

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String city = "Rome,IT";

    cityText = (TextView) findViewById(R.id.cityText);
    condDescr = (TextView) findViewById(R.id.condDescr);
    temp = (TextView) findViewById(R.id.temp);
    hum = (TextView) findViewById(R.id.hum);
    press = (TextView) findViewById(R.id.press);
    windSpeed = (TextView) findViewById(R.id.windSpeed);
    windDeg = (TextView) findViewById(R.id.windDeg);
    imgView = (ImageView) findViewById(R.id.condIcon);

    JSONWeatherTask task = new JSONWeatherTask();
    task.execute(new String[]{city});
}

 

پاسخ به سوال 
aliakbar333  12 سال پیش
+1 0

به قسمت مشکل برنامه یعنی شبکه و سرور که برسیم دیگه کار کند میشه و اینجاست که باید ببینیم باید چکار کرد که برنامه بتونه بدون اشکال کدنویسی بشه و هنگام ارتباط با سرور و شبکه در دریافت اطلاعات صحیح با مشکل مواجه نشه . 

اما در اجرای این قسمت هم نباید روند کلی برنامه رو فراموش کرد چرا که ما میتونیم با در نظر گرفتن روند کلی از پیچیدگی کار کم کنیم 

کلیت کار اینه : درخواست HTTP  تجزیه آب و هوا و در نهایت پاسخ . 

0 0
بیزحمت سورس رو در قالب پروژه در سایت بزارید تا بقیه اونو راحت تر fork کنن. (12 سال پیش)
+2 0
به روی چشم . یه خورده دیگه با پروژه ور برم ایشاا... سورس رو واسه fork میزارم. (12 سال پیش)
+2 0
منبع پروژه لینک (12 سال پیش)
+2 0
و اینجا هم پروژه های مشابه لینک (12 سال پیش)
+2 0
لینک کمکی من لینک (12 سال پیش)
0 0
فقط یه مشکل اساسی هست و اون هم اینه که openweathermap اطلاعاتش به هیچ دردی نمیخوره چون پیش بینیش که هیچ، آب و هوای همون روزش هم با تمامی سرویسهای داخلی و خاجی فرق داره، اما یاهو خوبه فقط نحوه استفادش فرق داره. توی این لینک هم همین پروژه با استفاده از یاهو هست که من نتونستم ازش استفاده کنم، اگه راهنمایی کنید خیلی خوب میشه. (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .