【问题标题】:display api data with realm not working android studios显示 api 数据,领域不工作 android studios
【发布时间】:2019-08-04 01:44:29
【问题描述】:

我正在尝试使用领域数据库来显示我的 api 数据。我想显示公司名称,但是数据说它已插入日志但似乎无法在 UI 上显示数据。这是代码.. 对于这个问题,任何帮助将不胜感激。变量在顶部,问题是当它成功时,我编写了“写入数据库”的代码,但它不显示数据但告诉我数据已插入。

 // Variables for the search input field and results TextViews.
    private EditText mCompanyInput;
    private TextView mTitleText;
    private TextView mDescriptionText;
    private TextView mOfficerText;
    private TextView mTitleText1;
    private TextView mDescriptionText1;
    private OkHttpClient okHttpClient;
    private static final String TAG = "MainActivity";

    private Request request;

    private String url = "https://api.companieshouse.gov.uk/search/companies?q=";

    Button save;
    TextView log;
    Realm realm;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mCompanyInput = findViewById(R.id.companyInput);
        log = findViewById(R.id.log);
        mDescriptionText = findViewById(R.id.descriptionText);
        mOfficerText = findViewById(R.id.officerText);
        mTitleText1 = findViewById(R.id.titleText1);
        mTitleText = findViewById(R.id.titleText);
        mDescriptionText1 = findViewById(R.id.descriptionText1);


        save = findViewById(R.id.searchButton);
        realm = Realm.getDefaultInstance();
        save.setOnClickListener(this);

    }

    public void onClick(View view){
        okHttpClient = new OkHttpClient();

        request = new Request.Builder().url(url).header("Authorization", "k6DNRbTp-AnQWn51JBz5VuPiTl8jv4_etdzoMyhf") .method("GET", null).build();
        Log.d(TAG, "onClick:"+url);

        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG,response.body().string());
                Log.d(TAG, "onResponse:"+response.code());
            }
        });

        writeToDB(mCompanyInput.getText().toString().trim(), (mDescriptionText.getText().toString().trim()));
        showData();
    }
    public void showData(){
        RealmResults<Company> guests = realm.where(Company.class).findAll();

// Use an iterator to invite all guests
        String op="";

        for (Company guest : guests) {
            op+=guest.getName();
            op+=guest.getAppointments();

        }

        log.setText(op);
    }

    public void writeToDB(final String mTitleText1, final String mDescriptionText1){

        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm bgRealm) {
                Company user = new Company(mTitleText1, mDescriptionText1);
                bgRealm.insert(user);
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                writeToDB(mCompanyInput.getText().toString().trim(), (mOfficerText.getText().toString().trim()));
                showData();
                // Transaction was a success.
                Log.v("Database", "Data Inserted");
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                // Transaction failed and was automatically canceled.
                Log.e("Database", error.getMessage());
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }

【问题讨论】:

    标签: java android api realm okhttp


    【解决方案1】:

    你为什么从onSuccess() 方法调用writeToDB()?这将导致递归并继续将相同的数据写入领域。从onSuccess() 调用showData() 是正确的,但是直接从onClick() 调用它没有多大意义。

    我认为您的问题是您正在尝试从线程更新 UI:它是从异步事务线程而不是主线程调用的。请参阅此答案(知道问题后,您可以轻松找到其他答案:Updating UI / runOnUiThread / final variables: How to write lean code that does UI updating when called from another Thread

    【讨论】:

    • 如果这能解决问题,请告诉我 - 如果您满意,请将其标记为答案。
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多