因此,我对编码非常陌生,我正在尝试为我的机器人团队开发一个侦察应用。我正在使用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/