求助帖:如何获取局部变量

最近在做一个获取和风天气城市 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]);

    }
}

猜你喜欢

转载自blog.csdn.net/kim5659/article/details/129483501