Java Android Studio变量未从函数调用更新

Java Android Studio变量未从函数调用更新,java,android,Java,Android,这可能是一个基本的Java问题。在同一个活动中,我声明了一个字符串[]数据,随后成功地对其进行了更新,但当我试图从更新数据[1]的调用函数中将textview设置为更新数据[1]时,没有显示任何内容。这是精简的代码 public class MyClass extends AppCompatActivity { String[] data = new String[4]; public void populateGrid() {}

这可能是一个基本的Java问题。在同一个活动中,我声明了一个字符串[]数据,随后成功地对其进行了更新,但当我试图从更新数据[1]的调用函数中将textview设置为更新数据[1]时,没有显示任何内容。这是精简的代码

    public class MyClass extends AppCompatActivity {
        String[] data = new String[4];

        public void populateGrid() {}
            getIndexData(indices);
            final TextView test = (TextView) findViewById(R.id.textView0B);
            test.post(new Runnable() {
                @Override
                public void run() {
                    test.setText(data[1]);
                }
            });

        public void getIndexData(final String[] indices){
             //lots of work accomplished, data[1] is updated, Log.d() logs good!
             // Tried passing data[] as a parameter from populateGrid(), but that didn't work.
             // Tried returning data[] to populateGrid(), also didn't work.
        }

    }
完成这项任务的正确方法是什么

根据请求,getIndexData()

public void getIndexData(最终字符串索引){
mOkHttpClient=new-OkHttpClient();
HttpUrl请求URL=HttpUrl.parse(“http://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" +
指数+
“&outputsize=compact&apikey=”+
阿皮奇);
Request Request=newrequest.Builder().url(reqUrl.build();
mOkHttpClient.newCall(request).enqueue(newcallback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
//如果未连接到internet等,则显示用户错误消息。
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Context=getApplicationContext();
CharSequence text=getResources().getString(R.string.Toast_1);
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(上下文、文本、持续时间);
toast.show();
}
});
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
int j=0;
String responseBody=response.body().String();
if(responseBody.contains(“\”错误消息\”)){
数据[j]=“无数据”;
数据[j+1]=“无数据”;
数据[j+2]=“无数据”;
数据[j+3]=“无数据”;
}else{//从json对象中提取数据点。
试一试{
JSONObject baseObject=新的JSONObject(ResponseBy);
JSONObject timeSeriesObj=baseObject.optJSONObject(“时间序列(每日)”;
迭代器迭代器=timeSeriesObj.keys();
List tickerData=new ArrayList();
while(iterator.hasNext()){
String key=iterator.next();
if(key!=null){
HashMap m=新的HashMap();
JSONObject finalObj=timeSeriesObj.optJSONObject(键);
m、 put(“1.打开”,finalObj.optString(“1.打开”);
m、 看跌期权(“2.high”,finalObj.optString(“2.high”);
m、 看跌期权(“3.low”,finalObj.optString(“3.low”);
m、 卖出(“4.收盘”,finalObj.期权字符串(“4.收盘”);
m、 卖出(“5.成交量”,finalObj.期权交易(“5.成交量”);
tickerData.add(m);
}
}
int k=0;
String str=tickerData.get(0.toString();
数据[k]=StringUtils.substringBetween(str,“open=”,“,”);
//Log.d(“数据[0]=”,数据[0]);
数据[k+1]=StringUtils.substringBetween(str,“close=”,“,”);
Log.d(“数据[1]”,数据[1]);//日志2431.7700
数据[k+2]=“”;
数据[k+3]=“”;
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
});
}

应该是这样的:

公共类MyClass扩展了AppCompatActivity{
字符串[]数据=新字符串[4];
public void populateGrid(){
getIndexData(索引);
}
public void getIndexData(最终字符串索引){
//设置http请求
mOkHttpClient.newCall(request).enqueue(newcallback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
// ...
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
//处理响应、填充数据等。
最终TextView测试=(TextView)findViewById(R.id.textView0B);
test.post(新的Runnable(){
@凌驾
公开募捐{
test.setText(数据[1]);
}
});
}
}
}
}

请发布
getIndexData()
代码的相关部分。在其中,您是在更新
数据
还是
索引
?您不能只做
test.setText()
而不做
test.post()
?另外,我建议您进行步进调试,在主线程上运行所有操作?这是对api的okHttp请求和响应。我在getIndexData()中更新数据[]数组。索引[]用于输入以派生数据[]。数据[]数组在getIndexData()中记录良好@nandsito-不,致命的例外:okHttpdispatcher只有创建层次结构的原始线程才能接触它的视图。准确地说!我甚至可以从那里设置一个新的函数调用来映射所有的数据点。感谢您坚持我的观点!
    public void getIndexData(final String indices){
            mOkHttpClient = new OkHttpClient();
            HttpUrl reqUrl = HttpUrl.parse("http://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" +
                    indices +
                    "&outputsize=compact&apikey=" +
                    apiKey);
            Request request = new Request.Builder().url(reqUrl).build();
            mOkHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    // Show user error message if not connected to internet, et. al.
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Context context = getApplicationContext();
                            CharSequence text = getResources().getString(R.string.Toast_1);
                            int duration = Toast.LENGTH_LONG;
                            Toast toast = Toast.makeText(context, text, duration);
                            toast.show();
                        }
                    });
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    int j = 0;
                    String responseBody = response.body().string();
                    if (responseBody.contains("\"Error Message\"")) {
                        data[j] = "No Data";
                        data[j+1] = "No Data";
                        data[j+2] = "No Data";
                        data[j+3] = "No Data";
                    } else { // Extract data points from json object.
                        try {
                            JSONObject baseObject = new JSONObject(responseBody);
                            JSONObject timeSeriesObj = baseObject.optJSONObject("Time Series (Daily)");
                            Iterator<String> iterator = timeSeriesObj.keys();
                            List<Map<String, String>> tickerData = new ArrayList<Map<String, String>>();
                            while (iterator.hasNext()) {
                                String key = iterator.next();
                                if (key != null) {
                                    HashMap<String, String> m = new HashMap<String, String>();
                                    JSONObject finalObj = timeSeriesObj.optJSONObject(key);
                                    m.put("1. open", finalObj.optString("1. open"));
                                    m.put("2. high", finalObj.optString("2. high"));
                                    m.put("3. low", finalObj.optString("3. low"));
                                    m.put("4. close", finalObj.optString("4. close"));
                                    m.put("5. volume", finalObj.optString("5. volume"));
                                    tickerData.add(m);
                                }
                            }
                            int k = 0;
                            String str = tickerData.get(0).toString();
                            data[k] = StringUtils.substringBetween(str, "open=", ", ");
                            //Log.d("data[0]= ", data[0]);
                            data[k+1] = StringUtils.substringBetween(str, "close=", ", ");
                            Log.d("data[1]", data[1]); // logs 2431.7700 
                            data[k+2] = ""; 
                            data[k+3] = "";


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });

    }