Java 如何从一个方法更改静态类变量的值,然后从另一个方法获取它?
我的问题是我不能从void转换为String。我无法在我的方法onResponse中使用返回,因此我决定使用一个全局变量,我将其值从ReadToken方法更改,然后在onResponse中调用此方法,并获得全局token\u value变量的新值。但我总是得到空值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
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