实验 天气预报

本文介绍了一个天气预报App的实现过程及遇到的问题。该App通过HTTP请求获取天气数据,并使用JSON解析展示天气信息。但在模拟器上运行时仅显示成功消息而不显示天气详情,同时存在SoundPool加载文件错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 实验现象(未达到效果,不知道哪出问题了)


logCat出现的提示问题


二  实验部分代码

weatheractivity

public class WeatherActivity extends Activity {
    private EditText etCity;
    private ImageButton bthQuery;
    private ListView lvFutureWeather;
    public static final int SHOW_RESPONSE = 1;
    private List<Weather>data;
    private Handler handler =new Handler(){
    	public void handleMessage(Message msg){
    		switch(msg.what){
    		case SHOW_RESPONSE:
    			String response =(String) msg.obj;
    			if(response!=null){
    				parseWithJSON(response);
    				WeatherAdapter weatherAdapter = new WeatherAdapter(
    						WeatherActivity.this,
    						R.layout.activity_weather_listitem,data);
    				lvFutureWeather.setAdapter(weatherAdapter);
    				ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1);
    				scaleAnimation.setDuration(1000);
    				LayoutAnimationController animationController = new LayoutAnimationController(scaleAnimation, 0.6f);
    				lvFutureWeather.setLayoutAnimation(animationController);
    			}
    		
    			default:
    				break;
    		}
    	}
    	private void parseWithJSON(String response){
    		data = new ArrayList<Weather>();
    		JsonParser parser=new JsonParser();//json解析器
			JsonObject obj=(JsonObject)parser.parse(response);
			//获取返回状态吗
			String resultcode=obj.get("resultcode").getAsString();
			//状态码如果是200说明数据返回成功
			if(resultcode!=null&&resultcode.equals("200")){
				JsonObject resultObj=obj.get("result").getAsJsonObject();
				JsonArray futureWeatherArray=resultObj.get("future").getAsJsonArray();
				for(int i=0;i<futureWeatherArray.size();i++){
					Weather  weather=new Weather();
					JsonObject weatherObject=futureWeatherArray.get(i).getAsJsonObject();
					weather.setDayOfWeek(weatherObject.get("week").getAsString());
					weather.setDate(weatherObject.get("date").getAsString());
					weather.setTemperature(weatherObject.get("temperature")
							.getAsString());
					weather.setWeather(weatherObject.get("weather")
							.getAsString());
					data.add(weather);
				}
			}
    	}    	
    };
    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_weather);
		initViews();
		setListeners();

	}
	private void initViews() {
		// TODO Auto-generated method stub
		etCity=(EditText) findViewById(R.id.etCity);
		bthQuery=(ImageButton)findViewById(R.id.btnQuery);
		lvFutureWeather=(ListView) findViewById(R.id.lvFutureWeather);
	}

	private void setListeners() {
		// TODO Auto-generated method stub
		bthQuery.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				String city = etCity.getText().toString();
				System.out.println("lvFutureWeather"+lvFutureWeather);
				Toast.makeText(WeatherActivity.this,"success", Toast.LENGTH_LONG).show();
				String weatherUrl ="http://v.juhe.cn/weather/index?format=2&cityname="+city+"&key=1ee0812dbfce1067b71da9d6aac95b86"; 
				HttpUtil.sendHttpRequest(weatherUrl, new HttpCallbackListener() {
					
					@Override
					public void onFinish(String response) {
						// TODO Auto-generated method stub
						Message message = new Message();
						message.what=SHOW_RESPONSE;
						message.obj=response.toString();
						handler.sendMessage(message);
						
					}
					
					@Override
					public void onError(Exception e) {
						// TODO Auto-generated method stub
						System.out.println("访问失败");
					}
				});
			}
		});
	}
}
weathergettest

public class WeatherGetTest extends AndroidTestCase {
	public void testGetData(){	 
		 String weatherUrl="http://v.juhe.cn/weather/index?format=2&cityname=滨州&key=1ee0812dbfce1067b71da9d6aac95b86";		
		 HttpUtil.sendHttpRequest(weatherUrl, new HttpCallbackListener() {
			
			public void onFinish(String response) {
				// TODO Auto-generated method stub
				System.out.println(response);
			}
			
			public void onError(Exception e) {
				// TODO Auto-generated method stub
				
			}
			});
		 }
}
三 实验后的体会

      本次实验的天气预报,显示从聚合上申请key然后在网页上可以打开看到


但在模拟器上打开应用就只显示success,不弹出天气,而且还有soundpool could not load file这个问题,一开始以为是安卓版本的问题,但是其他人的都可以,可能是字符串的接收问题。一开始认为是网址弄错了,后来发现没错,但程序始终调试不出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值