Java 如何从一个方法更改静态类变量的值,然后从另一个方法获取它?

Java 如何从一个方法更改静态类变量的值,然后从另一个方法获取它?,java,android,Java,Android,我的问题是我不能从void转换为String。我无法在我的方法onResponse中使用返回,因此我决定使用一个全局变量,我将其值从ReadToken方法更改,然后在onResponse中调用此方法,并获得全局token\u value变量的新值。但我总是得到空值 public class TestPagerAdapter extends PagerAdapter { static String token_value; Context context; List<PagerMode

我的问题是我不能从void转换为String。我无法在我的方法onResponse中使用返回,因此我决定使用一个全局变量,我将其值从ReadToken方法更改,然后在onResponse中调用此方法,并获得全局token\u value变量的新值。但我总是得到空值

public class TestPagerAdapter extends PagerAdapter {

 static String token_value;

Context context;
List<PagerModel> pagerArr;
LayoutInflater inflater;

public TestPagerAdapter(Context context, List<PagerModel> pagerArr) {
    this.context = context;
    this.pagerArr = pagerArr;
    inflater = ((Activity)context).getLayoutInflater(); }


@Override
public int getCount() {
    return pagerArr.size();
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
    View view= inflater.inflate(R.layout.pop_up,container,false);

     TextView text_task=view.findViewById(R.id.textView8);
    TextView text_child_parent=view.findViewById(R.id.textView9);
     TextView edit_child_parent=view.findViewById(R.id.textView10);
    TextView text_deadline=view.findViewById(R.id.textView12);
     TextView text_avancement=view.findViewById(R.id.textView14);
     Button button=view.findViewById(R.id.button3);
      final Spinner s = view.findViewById(R.id.spinner2);
    ImageView rl=view.findViewById(R.id.imm11);



    view.setTag(position);
    ((ViewPager)container).addView(view);
    final PagerModel model=pagerArr.get(position);
    text_task.setText(model.getText_task());
    text_avancement.setText(model.getText_avancement());
    text_deadline.setText(model.getText_deadline());
    text_child_parent.setText(model.getText_child_parent());
    edit_child_parent.setText(model.getEdit_child_parent());
    button.setText(model.getButton());


    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context,R.array.avancement,android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s.setAdapter(adapter);



    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String d= model.getText_deadline();
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(context.getResources().getString(R.string.BaseUrl))
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            final MyInterface myInterface=retrofit.create(MyInterface.class);

             final String st=s.getSelectedItem().toString();
                Call<Success> call22= myInterface.UpdateTask(model.getId(),st);
                call22.enqueue(new Callback<Success>() {
                    @Override
                    public void onResponse(Call<Success> call, Response<Success> response) {
                        Success success = response.body();
                        int s=success.getCode();
                        if(s==0)  Toasty.error(context,"Error", Toast.LENGTH_SHORT).show();

                        else {
                            Toasty.success(context,"Success update",Toast.LENGTH_SHORT).show();

                            String date = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
                            ReadToken(model.getEdit_child_parent());

                            Toast.makeText(context, token_value,Toast.LENGTH_SHORT).show();

                            context.startActivity(new Intent(context, MainActivity.class));
                        }
                    }

                    @Override
                    public void onFailure(Call<Success> call, Throwable t) {
                        Toast.makeText(context,"failure",Toast.LENGTH_SHORT).show();

                    }
                });


        }
    });

    return view;
}


@Override
public boolean isViewFromObject(View view, Object object) {
    return view==((View)object);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager)container).removeView((View)object);
}




public void ReadToken(String uid){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(context.getResources().getString(R.string.BaseUrl))
            .addConverterFactory(GsonConverterFactory.create())
            .build();


    final MyInterface myInterface=retrofit.create(MyInterface.class);

    Call<List<User>> call55 = myInterface.readToken(uid);
    call55.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(Call<List<User>> call, Response<List<User>> response) {

            List<User> users = response.body();
            String token=users.get(0).getToken();
             token_value =token;
            Toast.makeText(context,"Token ok",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<List<User>> call, Throwable t) {
            Toast.makeText(context,"Token failure",Toast.LENGTH_SHORT).show();

        }
    });
}
公共类TestPagerAdapter扩展了PagerAdapter{
静态字符串标记_值;
语境;
列表寻呼机;
充气机;
公共TestPagerAdapter(上下文、列表PageRar){
this.context=上下文;
this.pagerar=pagerar;
充气器=((活动)上下文).GetLayoutFlater();}
@凌驾
public int getCount(){
返回pagerar.size();
}
@凌驾
公共对象实例化项(视图组容器,int位置){
视图=充气机。充气(右布局。弹出,容器,错误);
TextView text_task=view.findViewById(R.id.textView8);
TextView text\u child\u parent=view.findViewById(R.id.textView9);
TextView edit\u child\u parent=view.findviewbyd(R.id.textView10);
TextView text_deadline=view.findViewById(R.id.textView12);
TextView text\u avancement=view.findViewById(R.id.textView14);
Button Button=view.findViewById(R.id.button3);
最终微调器s=view.findViewById(R.id.spinner2);
ImageView rl=view.findViewById(R.id.imm11);
视图.设置标签(位置);
((ViewPager)容器).addView(视图);
final PagerModel model=pagerar.get(位置);
text_task.setText(model.getText_task());
text_avancement.setText(model.getText_avancement());
text_deadline.setText(model.getText_deadline());
text_child_parent.setText(model.getText_child_parent());
edit_child_parent.setText(model.getEdit_child_parent());
setText(model.getButton());
ArrayAdapter=ArrayAdapter.createFromResource(上下文,R.array.avancement,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
s、 设置适配器(适配器);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
字符串d=model.getText_deadline();
改装改装=新改装.Builder()
.baseUrl(context.getResources().getString(R.string.baseUrl))
.addConverterFactory(GsonConverterFactory.create())
.build();
final MyInterface MyInterface=reformation.create(MyInterface.class);
最后一个字符串st=s.getSelectedItem().toString();
调用call22=myInterface.UpdateTask(model.getId(),st);
call22.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Success=response.body();
int s=success.getCode();
如果(s==0)Toasty.error(上下文“error”,Toast.LENGTH_SHORT).show();
否则{
Toasty.success(上下文,“success update”,Toast.LENGTH_SHORT).show();
字符串日期=新的SimpleDataFormat(“dd-MM-yyyy”,Locale.getDefault()).format(新日期());
ReadToken(model.getEdit_child_parent());
Toast.makeText(上下文、标记值、Toast.LENGTH.SHORT).show();
新意图(context,MainActivity.class));
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(上下文,“失败”,Toast.LENGTH_SHORT).show();
}
});
}
});
返回视图;
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图==((视图)对象);
}
@凌驾
公共项(视图组容器、int位置、对象){
((ViewPager)容器)。移除视图((视图)对象);
}
公共void ReadToken(字符串uid){
改装改装=新改装.Builder()
.baseUrl(context.getResources().getString(R.string.baseUrl))
.addConverterFactory(GsonConverterFactory.create())
.build();
final MyInterface MyInterface=reformation.create(MyInterface.class);
调用call55=myInterface.readToken(uid);
call55.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List users=response.body();
字符串标记=users.get(0.getToken();
令牌_值=令牌;
Toast.makeText(上下文,“tokenOK”,Toast.LENGTH_SHORT).show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(上下文,“令牌失败”,Toast.LENGTH_SHORT).show();
}
});
}

}

您在另一个线程中读取令牌,因为
改造.enqueue()
是异步工作的。因此,您需要在方法
ReadToken()
中的
onResponse()
内使用您的令牌执行所有逻辑,因为
改型.enqueue()
是异步工作的,所以您需要在另一个线程中读取您的令牌。因此,您需要使用
onResponse()
中的令牌执行所有逻辑,该令牌位于方法
ReadToken()
中,将响应存储在共享首选项中。并且在你想去的任何地方使用它

SharedPreferences sharedPref = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit(); 
preferencesHelper.editor.putString(“response”, response.toString()).commit();

将响应存储在共享首选项中。并且在你想去的任何地方使用它

SharedPreferences sharedPref = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit(); 
preferencesHelper.editor.putString(“response”, response.toString()).commit();

Java没有全局变量。你是指类中的静态变量吗?“全局”变量不属于方法,那么“方法的全局变量”是什么意思?确切地说,静态类变量尝试
toast
token的值,看看token的值是否为nu