Android Java:如何更新方法中的对象?

Android Java:如何更新方法中的对象?,java,android,Java,Android,所以我和一个朋友一直在开发一款基本的android应用程序。我们已经封锁了逻辑并进行了伪编码,但是我们在更新一个对象时遇到了一些问题。(顺便说一句,我们都是新手,所以如果我的术语不正确,我很抱歉,欢迎更正。)据我所知,btcCurrent应该在dataGet方法中更新。我认为这个值的变化会持续,但当我设置textView时,btcCurrent.last_price显然是空的,而不是它设置的值。在androidstudio中进行的调试表明,该值在dataGet中设置正确,但在dataGet之外不

所以我和一个朋友一直在开发一款基本的android应用程序。我们已经封锁了逻辑并进行了伪编码,但是我们在更新一个对象时遇到了一些问题。(顺便说一句,我们都是新手,所以如果我的术语不正确,我很抱歉,欢迎更正。)据我所知,btcCurrent应该在dataGet方法中更新。我认为这个值的变化会持续,但当我设置textView时,btcCurrent.last_price显然是空的,而不是它设置的值。在androidstudio中进行的调试表明,该值在dataGet中设置正确,但在dataGet之外不会持久存在。我不明白我做错了什么

MainActivity.java

package com.twodudesdev.bitcoinalert;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;

import cz.msebera.android.httpclient.Header;

public class MainActivity extends AppCompatActivity {
    Context context = this;
    TextView textView;
    BitCoinInfo btcCurrent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AsyncHttpClient client = new AsyncHttpClient();
        textView = this.findViewById(R.id.textDisplayPrice);
        dataGet(client);
        textView.setText(btcCurrent.last_price);
    }

    private void dataGet(AsyncHttpClient client) {
        client.get("https://api.bitfinex.com/v1/ticker/btcusd", new TextHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, String response) {
                String toastText = "Successfully downloaded JSON File";
                Toast successfulJsonToast = Toast.makeText(context, toastText, Toast.LENGTH_SHORT);
                successfulJsonToast.show();
                Gson btcGson = new GsonBuilder().create();
                btcCurrent = btcGson.fromJson(response, BitCoinInfo.class);
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, String response, Throwable throwable) {
                String toastText = "Cannot load JSON File: " + throwable;
                Toast failedJsonToast = Toast.makeText(context, toastText, Toast.LENGTH_SHORT);
                failedJsonToast.show();
            }
        });
    }
}
package com.twodudesdev.bitcoinalert;

public class BitCoinInfo {
    public int id;
    public String mid;
    public String bid;
    public String ask;
    public String last_price;
    public String timestamp;
}
BitCoinInfo.java

package com.twodudesdev.bitcoinalert;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;

import cz.msebera.android.httpclient.Header;

public class MainActivity extends AppCompatActivity {
    Context context = this;
    TextView textView;
    BitCoinInfo btcCurrent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AsyncHttpClient client = new AsyncHttpClient();
        textView = this.findViewById(R.id.textDisplayPrice);
        dataGet(client);
        textView.setText(btcCurrent.last_price);
    }

    private void dataGet(AsyncHttpClient client) {
        client.get("https://api.bitfinex.com/v1/ticker/btcusd", new TextHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, String response) {
                String toastText = "Successfully downloaded JSON File";
                Toast successfulJsonToast = Toast.makeText(context, toastText, Toast.LENGTH_SHORT);
                successfulJsonToast.show();
                Gson btcGson = new GsonBuilder().create();
                btcCurrent = btcGson.fromJson(response, BitCoinInfo.class);
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, String response, Throwable throwable) {
                String toastText = "Cannot load JSON File: " + throwable;
                Toast failedJsonToast = Toast.makeText(context, toastText, Toast.LENGTH_SHORT);
                failedJsonToast.show();
            }
        });
    }
}
package com.twodudesdev.bitcoinalert;

public class BitCoinInfo {
    public int id;
    public String mid;
    public String bid;
    public String ask;
    public String last_price;
    public String timestamp;
}

您正在尝试在进行异步http调用后立即更新textview文本,因此btcCurrent.last\u price此时为空。移动此行
textView.setText(btcCurrent.last_price)
to
onSuccess
method.

返回的JSON响应是什么样子的?请注意,将方法命名为getData比dataGet更为传统。dataGet听起来真的很不错weird@csmckelvey,JSON很好地通过了,在代码中的地址可见,并且被正确地处理。这确实做到了,尽管我可以发誓我已经做到了。非常感谢。