因此,我对编码非常陌生,我正在尝试为我的机器人团队开发一个侦察应用。我正在使用The Blue Alliance的API,现在我正尝试一次仅从某个api取回一个数据。

我已经得到它,以便在按下按钮时可以取回一个(城市),但是现在我想添加第二个按钮以取回其他东西。我将如何处理?

我再次对此很陌生。

谢谢高级
这是行之有效的。我必须评论第二次退货,因为它将无法正常工作

    import com.thebluealliance.api.v3.models.Team;

import java.io.IOException;

public class TBAAsyncGetter extends AsyncTask<TBA, Void, String> {

    @Override
    protected String doInBackground(TBA... tbas) {

        try {
            Event[] ourEvents = tbas[0].teamRequest.getEvents(5496);
            Event event = ourEvents[0];

            return ourEvents[0].event_code;
            //return ourEvents[0].event_code;


        } catch (IOException e) {
            e.printStackTrace();
            return  null;
        }


    }


}


这些是按钮之类的。 (忽略所有评论)

package com.example.scoutingapp4;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.google.gson.Gson;
import com.thebluealliance.api.v3.TBA;

import java.util.concurrent.ExecutionException;

public class OurTeamFragment extends Fragment implements View.OnClickListener {
    Gson gson = new Gson();
    String authKey = "tatIjlJ60oDWTv9aDk1ZDTL5GM1IJyafzPeJpWk4dR5adIgsdJt3sXvimEHA3MrI";
    TBA tba = new TBA(authKey);

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        return inflater.inflate(R.layout.fragment_ourteam, container, false);
    }


    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button btnGet = (Button) getView().findViewById(R.id.btnRegional);
        assert btnGet != null;
        btnGet.setOnClickListener(this);

        Button btnGet2 = (Button) getView().findViewById(R.id.btnEventCode);
        assert btnGet2 != null;
        btnGet2.setOnClickListener(this);




    }


    public void onClick(final View v) {
        v.setEnabled(false);
        switch (v.getId()) {

            case R.id.btnRegional:

                try {

                    TextView textHeyo = (TextView) getView().findViewById(R.id.text_regional);
                    textHeyo.setText(new TBAAsyncGetter().execute(tba).get());

                } catch (  ExecutionException | InterruptedException e) {
                    e.printStackTrace();
                }
//                AsyncHttpClient client = new AsyncHttpClient();
//                client.addHeader("X-TBA-Auth-Key", "tatIjlJ60oDWTv9aDk1ZDTL5GM1IJyafzPeJpWk4dR5adIgsdJt3sXvimEHA3MrI");
//                client.get("https://www.thebluealliance.com/api/v3/team/frc5496/events/2019", new AsyncHttpResponseHandler() {
//                    @Override
//                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//                        if (responseBody != null) {
//                            TextView textHeyo = (TextView) getView().findViewById(R.id.text_view_result);
//                            assert textHeyo != null;
//                            gson.toJson(new String(responseBody));
//
//                            System.out.println("body=" + new String(responseBody));
//                            textHeyo.setText(new String(responseBody));
//
//                        }
//                        v.setEnabled(true);
//                    }
//
//                    @Override
//                    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
//
//                        TextView textHeyo = (TextView) getView().findViewById(R.id.text_view_result);
//                        textHeyo.setText(new String("Boom! ") + new String(responseBody));
//
//                        v.setEnabled(true);
//                    }
//
//                });
                break;

            case R.id.btnEventCode:
                try {

                    TextView textHeyo = (TextView) getView().findViewById(R.id.text_event_code);
                    textHeyo.setText(new TBAAsyncGetter().execute(tba).get());

                } catch (  ExecutionException | InterruptedException e) {
                    e.printStackTrace();
                }
//                AsyncHttpClient client2 = new AsyncHttpClient();
//                client2.addHeader("X-TBA-Auth-Key", "tatIjlJ60oDWTv9aDk1ZDTL5GM1IJyafzPeJpWk4dR5adIgsdJt3sXvimEHA3MrI");
//                client2.get("https://www.thebluealliance.com/api/v3/event/2020cadm/teams", new AsyncHttpResponseHandler() {
//                    @Override
//                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//                        if (responseBody != null) {
//                            TextView textHeyo = (TextView) getView().findViewById(R.id.text_view_result);
//                            assert textHeyo != null;
//                            System.out.println("body=" + new String(responseBody));
//                            textHeyo.setText(new String(responseBody));
//                        }
//                        v.setEnabled(true);
//                    }
//
//                    @Override
//                    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
//
//                        TextView textHeyo = (TextView) getView().findViewById(R.id.text_view_result);
//                        textHeyo.setText(new String("Boom! ") + new String(responseBody));
//
//                        v.setEnabled(true);
//                    }
//
//                });
                break;
        }
    }
}

最佳答案

看起来,通过设置方式,您可以对其进行更改,以使其接受TBAAsyncGetter类的doInBackground方法上的其他参数,在其中您还可以传递一些内容来指定要返回的值。提到的另一种方法是将返回类型从String更改为包含信息的创建对象,甚至只是返回整个Event数组信息并在OurTeamFragment类中选择所需的对象。

另一种方法是调用两个单独的doInBackground方法,每个要获取的数据集对应一个,而每次只调用所需的一个即可。例如,它可以是doInBackgroundGetCity和doInBackgroundGetOther,并且每个都经过硬编码以返回该特定值。这不是最干净的解决方案,但是这些可能会为您提供正确的方向,以帮助您解决问题。

关于java - 如何使用try catch从字符串取回两个数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60288841/

10-12 05:10