最近在做一个获取和风天气城市 ID的小东西,大致内容如下:
通过:
QWeather.getGeoCityLookup(MainActivity.this, inputct, new QWeather.OnResultGeoListener(){
获取数据,然后修改UI显示数据,但有的城市,比如深圳,输入深圳的时候,其实深圳只是第一条数据,后面还有所有区的数据,比如福田区,罗湖区等等共计10个区,每个区的ID都不一样,如果这些都在ui界面上显示,是显示不了的。所以我打算做个前后翻的按钮,这样就可以在一组textview上显示所有区的id了,但如果很次都申请数据,就要浪费很多申请次数(申请次数有限),而且 体验也不好,速度慢,而且所有数据在一次申请的时候已经全部获取,所以我想把获取的数据写入一个数组变量,但在方法外是访问不了这个变量的,我想把这个数据写入文件,在别的地方调用,但在这个地方又用不了SharedPreferences.详细情况见下面代码注释。如果有更好的解决办法,也请大神不吝赐教!代码如下:
xml代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:text="城市ID查询程序"
android:textColor="@android:color/holo_red_light"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/inputcity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="140dp"
android:text="请输入查询地区/城市:"
android:textColor="@color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.167"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/cityname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="96dp"
android:text="地区/城市名:"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="@+id/inputcity"
app:layout_constraintTop_toBottomOf="@+id/inputcity" />
<TextView
android:id="@+id/num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:text="区个数:"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="@+id/inputcity"
app:layout_constraintTop_toBottomOf="@+id/inputcity" />
<TextView
android:id="@+id/cityid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="地区/城市ID:"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="@+id/cityname"
app:layout_constraintTop_toBottomOf="@+id/cityname" />
<TextView
android:id="@+id/belonearea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="所属行政区域:"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="@+id/cityid"
app:layout_constraintTop_toBottomOf="@+id/cityid" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="上级城市:"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="@+id/belonearea"
app:layout_constraintTop_toBottomOf="@+id/belonearea" />
<EditText
android:id="@+id/input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="19dp"
android:ems="8"
android:inputType="textPersonName"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/inputcity"
app:layout_constraintTop_toBottomOf="@+id/title1"
tools:ignore="SpeakableTextPresentCheck" />
<TextView
android:id="@+id/cityname1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="123"
app:layout_constraintStart_toEndOf="@+id/cityname"
app:layout_constraintTop_toTopOf="@+id/cityname" />
<TextView
android:id="@+id/showNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
app:layout_constraintStart_toEndOf="@+id/cityname"
app:layout_constraintTop_toTopOf="@+id/num" />
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="64dp"
android:layout_marginTop="8dp"
android:text="5"
app:layout_constraintStart_toEndOf="@+id/cityname"
app:layout_constraintTop_toTopOf="@+id/num" />
<TextView
android:id="@+id/cityid1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:text="456"
app:layout_constraintBottom_toBottomOf="@+id/cityid"
app:layout_constraintStart_toEndOf="@+id/cityname"
app:layout_constraintTop_toTopOf="@+id/cityname1" />
<TextView
android:id="@+id/area1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="456"
app:layout_constraintBottom_toBottomOf="@+id/belonearea"
app:layout_constraintStart_toEndOf="@+id/belonearea" />
<TextView
android:id="@+id/area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="456"
app:layout_constraintBottom_toBottomOf="@+id/textView11"
app:layout_constraintStart_toEndOf="@+id/belonearea" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.486"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/input"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/before"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="上一个"
android:textSize="10sp"
app:layout_constraintBottom_toTopOf="@+id/belonearea"
app:layout_constraintStart_toEndOf="@+id/cityid1" />
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="124dp"
android:text="下一个"
android:textSize="10sp"
app:layout_constraintBottom_toTopOf="@+id/belonearea"
app:layout_constraintStart_toEndOf="@+id/cityid1" />
</androidx.constraintlayout.widget.ConstraintLayout>
java代码:
package com.example.hfserachcityid;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import com.qweather.sdk.bean.base.Code;
import com.qweather.sdk.bean.geo.GeoBean;
import com.qweather.sdk.view.HeConfig;
import com.qweather.sdk.view.QWeather;
public class MainActivity extends AppCompatActivity {
public TextView viewname,viewid,viewarea,viewarea1,num,countNu;
private EditText inputcity;
private Button button,before,next;
//public int shownum;
//public static String[][] data123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewname=(TextView)findViewById(R.id.cityname1);
viewid=(TextView)findViewById(R.id.cityid1);
viewarea=(TextView)findViewById(R.id.area);
viewarea1=(TextView)findViewById(R.id.area1);
inputcity=(EditText)findViewById(R.id.input);
button=(Button)findViewById(R.id.button);
num=(TextView)findViewById(R.id.showNum);
countNu=(TextView)findViewById(R.id.count);
before=(Button)findViewById(R.id.before);
next=(Button)findViewById(R.id.next);
//和风初始化
HeConfig.init("HE2303010152481612", "3cbc9266e3b24f38afbf182611fc3de4");
HeConfig.switchToDevService();
//按钮监听
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//此处注意,gettext的值如果为空,不可以用inputcity.gettext().tostring()=="",此值永远为假。
//只能用equals,如果有值可以用==方式。
String string="";
if(string.equals(inputcity.getText().toString())){
}else{
getCity();
}
}
});
before.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (before.getText()=="1"){
before.setEnabled(false);
}else{
}
}
});
}
public void getCity(){
String inputct =inputcity.getText().toString();
//此方法为和风提供
QWeather.getGeoCityLookup(MainActivity.this, inputct, new QWeather.OnResultGeoListener(){
public static final String TAG="he_feng_city";
@Override
public void onError(Throwable e) {
Log.i(TAG, "onError: ", e);
System.out.println("Weather Now Error:"+new Gson());
}
@Override
public void onSuccess(GeoBean geoBean) {
if (Code.OK == geoBean.getCode()) {//getLocationBean
String id=geoBean.getLocationBean().get(0).getId();
String name=geoBean.getLocationBean().get(0).getName();
String adm2=geoBean.getLocationBean().get(0).getAdm2();
String adm1=geoBean.getLocationBean().get(0).getAdm1();
int shownum=geoBean.getLocationBean().size();
String str=Integer.toString(shownum);
//因不可以在非ui线程修改ui线程内容,所以必须使用runOnUiThread或类似方法。
//直接使用viewname.setText(name);会导致错误,程序退出。
runOnUiThread(new Runnable() {
@Override
public void run() {
viewname.setText(name);
viewid.setText(id);
viewarea1.setText(adm1);
viewarea.setText(adm2);
num.setText(str);
}
});
String[][] data123= new String[shownum][4];
for(int i=0;i<shownum;i++) {
String id1=geoBean.getLocationBean().get(i).getId();
String name1=geoBean.getLocationBean().get(i).getName();
String adm21=geoBean.getLocationBean().get(i).getAdm2();
String adm11=geoBean.getLocationBean().get(i).getAdm1();
//将内容写入数组
data123[i][0]=new String(id1);
data123[i][1]=new String(name1);
data123[i][2]=new String(adm21);
data123[i][3]=new String(adm11);
//3、此处不可写文件。
}
System.out.println("数组内容:"+data123[2][0]);
System.out.println("数组内容:"+data123[2][1]);
System.out.println("数组内容:"+data123[2][2]);
}else{
//在此查看返回数据失败的原因
Code code = geoBean.getCode();
System.out.println("失败代码: " + code);
//Log.i(TAG, "failed code: " + code);
}
//1、此处不可访问data123
System.out.println("数组内容:"+data123[2][2]);
}
});
//2、此处不可访问data123
System.out.println("数组内容(外部):"+data123[0][0]);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)