今天介绍一个Android天气界面
通过Spinner选取城市之后获取天气
MainActivity.java
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import com.example.dell.shoppingmall.R;
import com.example.dell.shoppingmall.View.MainActivity;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class WeatherActivity extends AppCompatActivity {
private TextView textView1;
private TextView textView2;
private TextView textView3;
private TextView textView4;
private EditText editText;
private Spinner spinner;
private String city;
private String[] spinnerArray;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_weather);
new Thread(new MyHttpRequest()).start();
ImageView imageView=(ImageView)findViewById(R.id.weather_bg);
String url="http://img8.zol.com.cn/bbs/upload/23932/23931932.jpg";
//动态引图
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(config);
imageLoader.displayImage(url,imageView);
//搜索框
editText=(EditText)findViewById(R.id.weather_et);
button=(Button)findViewById(R.id.wb);
spinner=(Spinner)findViewById(R.id.weather_sp);
spinner.setVisibility(View.INVISIBLE);
//获取文本框,并连接网络数据
textView1=(TextView)findViewById(R.id.weather_tv1);
textView2=(TextView)findViewById(R.id.weather_tv2);
textView3=(TextView)findViewById(R.id.weather_tv3);
textView4=(TextView)findViewById(R.id.weather_tv4);
}
private class MyHttpRequest implements Runnable{
@Override
public void run() {
try {
//准备请求的地址
URL url=new URL("http://v.juhe.cn/weather/index?format=2&key=a95f4761381587458485a997e442a915&cityname=" + URLEncoder.encode(city,"UTF-8"));
// URL url=new URL("http://v.juhe.cn/weather/index?format=2&cityname="+ URLEncoder.encode(city,"UTF-8")+"&key=a95f4761381587458485a997e442a915");
//得到HttpURLConnection对象
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
//设置HTTP请求属性
connection.setConnectTimeout(100000);//超过这个时间后断开连接(单位是毫秒)
connection.setRequestMethod("GET");//设置HTTP请求方法
connection.setDoInput(true);//是否向服务器进行数据输入
connection.setDoOutput(true);//是否从服务器获得数据
connection.connect();//发出请求
//如果响应码不是500的错误,获取数据
if(connection.getResponseCode()!=HttpURLConnection.HTTP_BAD_REQUEST){
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(connection.getInputStream()));//获取输入流,读取返回内容
String temp="";
final StringBuilder response=new StringBuilder();
while ((temp=bufferedReader.readLine())!=null){ //用readLine读取返回的字符串,每次读一行
response.append(temp);
}
Log.d(MyHttpRequest.class.toString(),response.toString());
//解析JSON
JSONObject jsonObject=new JSONObject(response.toString());
final String result=jsonObject.getString("result");
final String resultcode=jsonObject.getString("resultcode");
JSONObject jsonObject1=new JSONObject(result);
String today=jsonObject1.getString("today");
String sk=jsonObject1.getString("sk");
JSONObject jsonObject2=new JSONObject(today);
final String temp1=jsonObject2.getString("temperature");
final String weather1=jsonObject2.getString("weather");
JSONObject sk1=new JSONObject(sk);
final String wind=sk1.getString("wind_direction");
// JSONArray jsonArray=jsonObject1.getJSONArray("future");
//JSONObject jsonObject3=(JSONObject)jsonArray.get(0);//数组里的第一项数据
//weather2=jsonObject3.getString("weather");//获取未来一天的天气
Log.d(MyHttpRequest.class.toString(),temp1+","+weather1);
//把内容显示到界面
//显示天气
textView1.post(new Runnable() {
@Override
public void run() {
textView1.setText(weather1);
}
});
//显示温度
textView2.post(new Runnable() {
@Override
public void run() {
textView2.setText(temp1);
}
});
//显示风向
textView3.post(new Runnable() {
@Override
public void run() {
textView3.setText("风向:"+wind);
}
});
bufferedReader.close();
}
connection.disconnect();//断开连接
}catch (Exception e){
Log.e(WeatherActivity.class.toString(),e.toString());
}
}
}
public void search(View view){
spinner.setVisibility(View.VISIBLE);
Resources resources=getResources();
spinnerArray=resources.getStringArray(R.array.city);
ArrayAdapter arrayAdapter=new ArrayAdapter(this,R.layout.spinner_item,spinnerArray);
spinner.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
WeatherActivity.this.city = spinnerArray[position];
new Thread(new MyHttpRequest()).start();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
WeatherActivity.this.city="济南";
new Thread(new MyHttpRequest()).start();
}
});
}
//搜索按钮实现搜索
public void searchWeather(View view){
String s=editText.getText().toString();
city=s;
}
//返回首页
public void toLoginPage(View view){
Intent intent=new Intent(this, MainActivity.class);
startActivity(intent);
}
}
Layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="@color/floralwhite"
android:layout_height="match_parent"
android:weightSum="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/blue"
android:orientation="horizontal">
<Button
android:id="@+id/login_back_bt"
android:layout_width="56dp"
android:layout_height="51dp"
android:background="@drawable/back"
android:onClick="toLoginPage"
android:textColor="#fff"
android:textSize="30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="0.2"
android:gravity="center_vertical"
android:text=" 天气情况"
android:textColor="#fff"
android:textSize="27dp" />
<Button
android:layout_width="wrap_content"
android:id="@+id/wb"
android:onClick="search"
android:background="@drawable/button_style"
android:layout_gravity="center"
android:gravity="center"
android:text="search"
android:textColor="#fff"
android:textSize="25dp"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="10dp" />
<LinearLayout
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_height="wrap_content">
<EditText
android:layout_width="wrap_content"
android:background="@drawable/allcorner"
android:hint=" 搜索更多地方天气 "
android:textSize="20dp"
android:id="@+id/weather_et"
android:gravity="center"
android:layout_gravity="center"
android:layout_height="wrap_content" />
<ImageView
android:layout_width="59dp"
android:src="@drawable/search"
android:id="@+id/weather_search"
android:onClick="searchWeather"
android:layout_height="match_parent" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="10dp" />
<LinearLayout
android:layout_width="351dp"
android:background="@drawable/allcorner"
android:layout_gravity="center"
android:layout_height="100dp"
android:orientation="vertical"
android:layout_weight="0.95">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:id="@+id/weather_bg"
android:layout_height="200dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
android:layout_height="wrap_content">
<ImageView
android:layout_width="51dp"
android:layout_gravity="center"
android:src="@drawable/place"
android:layout_height="52dp" />
<Spinner
android:layout_width="119dp"
android:layout_gravity="center"
android:id="@+id/weather_sp"
android:layout_height="match_parent"></Spinner>
</LinearLayout>
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="10dp" />
<TextView
android:layout_width="match_parent"
android:id="@+id/weather_tv1"
android:textSize="25dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="15dp" />
<TextView
android:layout_width="match_parent"
android:id="@+id/weather_tv2"
android:textSize="25dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="15dp" />
<TextView
android:layout_width="match_parent"
android:id="@+id/weather_tv3"
android:textSize="25dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="15dp" />
<TextView
android:layout_width="match_parent"
android:id="@+id/weather_tv4"
android:textSize="25dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
drawable下spinner样式
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:id="@+id/spinner_tv1"
android:textSize="26dp"
android:textColor="#000"
android:layout_height="match_parent">
</TextView>
drawable下button样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="15dp"></corners>
<gradient android:startColor="@color/silver"
android:endColor="@color/lightyellow"
android:centerColor="@color/greypink"
android:type="linear"
android:angle="45"/>
</shape>
</item>
<item android:state_focused="true">
<shape>
<corners android:radius="15dp"></corners>
<solid android:color="@color/greypink"/>
</shape>
</item>
</selector>