Java 按钮ID在OnPostExecute内
我试图在OnPostExecute中使用else if语句,因此当单击按钮时,下载带有数据的API,在本例中,从字符串源文件中获取正确的标题Honda或Suzuki,这两个标题都放在一个包中并传输到另一个活动。然后,该标题用作我的DisplayDataActivity上的标题,并将数据放入TextView。 因此,我使用相同的活动来显示我的数据,只是标题和数据不同。 总共有20个按钮,但一旦我知道如何获取其中两个按钮的id,我会将其扩展到其余按钮。 但是,我无法在OnPostExecute中传递我的按钮id,因此我可以根据单击的按钮id选择正确的else\U if语句。 有办法吗? 如果有任何帮助,我将不胜感激 !!更新代码:Java 按钮ID在OnPostExecute内,java,android,if-statement,button,view,Java,Android,If Statement,Button,View,我试图在OnPostExecute中使用else if语句,因此当单击按钮时,下载带有数据的API,在本例中,从字符串源文件中获取正确的标题Honda或Suzuki,这两个标题都放在一个包中并传输到另一个活动。然后,该标题用作我的DisplayDataActivity上的标题,并将数据放入TextView。 因此,我使用相同的活动来显示我的数据,只是标题和数据不同。 总共有20个按钮,但一旦我知道如何获取其中两个按钮的id,我会将其扩展到其余按钮。 但是,我无法在OnPostExecute中传递
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public class Wrap
{
public String dataPassedInOnClick;
public String resultData;
}
public class JSONTask extends AsyncTask<String, String, Wrap> {
private Context mContext;
private View rootView;
ProgressDialog pDialog;
JSONTask(Context mContext) {
this.mContext = mContext;
}
public JSONTask(Context context, View rootView){
this.mContext=context;
this.rootView=rootView;
}
@Override
protected Wrap doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
Wrap wrapper=new Wrap();
wrapper.dataPassedInOnClick=params[0];
wrapper.resultData=buffer.toString();
return wrapper;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPreExecute(){
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading data...");
pDialog.show();
}
protected void onPostExecute(Wrap wrapResult) {
super.onPostExecute(wrapResult);
this.pDialog.dismiss();
if (wrapResult.dataPassedInOnClick.contains("api_suzuki")) {
String activity_title =
getResources().getString(R.string.suzuki);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_honda")) {
String activity_title =
getResources().getString(R.string.honda);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_kawasaki")) {
String activity_title =
getResources().getString(R.string.kawasaki);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_triumph")) {
String activity_title =
getResources().getString(R.string.triumph);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_bmw")) {
String activity_title =
getResources().getString(R.string.bmw);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_hyousung")) {
String activity_title =
getResources().getString(R.string.hyousung);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_ducati")) {
String activity_title =
getResources().getString(R.string.ducati);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_harley")) {
String activity_title =
getResources().getString(R.string.harley);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_aprilia")) {
String activity_title =
getResources().getString(R.string.aprilia);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_ktm")) {
String activity_title =
getResources().getString(R.string.ktm);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_mv")) {
String activity_title =
getResources().getString(R.string.mv);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_bajaj")) {
String activity_title =
getResources().getString(R.string.bajaj);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("royal")) {
String activity_title =
getResources().getString(R.string.royal);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_hero")) {
String activity_title =
getResources().getString(R.string.hero);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
else if (wrapResult.dataPassedInOnClick.contains("api_indian")) {
String activity_title =
getResources().getString(R.string.indian);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
}
}
public void onSuzuki(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_suzuki");
}
public void onHonda(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_honda");
}
public void onKawasaki(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_kawasaki");
}
public void onTriumph(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_triumph");
}
public void onBmw(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_bmw");
}
public void onHyuosung(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_hyuosung");
}
public void onDucati(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_ducati");
}
public void onHarley(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_harley");
}
public void onAprilia(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_aprilia");
}
public void onKtm(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_ktm");
}
public void onMv(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_mv");
}
public void onBajaj(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_bajaj");
}
public void onRoyal(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_royal");
}
public void onHero(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_hero");
}
public void onIndian(View view) {
JSONTask objJSONTask=new JSONTask(MainActivity.this);
objJSONTask.execute("api_indian");
}
当您试图通过调用int id=view.getId来获取id时,您正在为onPostExecute中的每个案例传递并获取rootView;实际上,您每次都会获得rootView的id,因此您必须传递每个按钮的视图,或者想出另一种方法来实现这一点 在这种情况下,您可以做的是比较在onClick方法中传递的字符串,因为您已经为每种情况传递了不同的字符串,您已经知道从哪里调用了您的JSONTask方法,所以您不需要按下按钮的视图,因为它是多余的 试试这个:
public class Wrap
{
public String dataPassedInOnClick;
public String resultData;
}
public class JSONTask extends AsyncTask<String, String, Wrap> {
private Context mContext;
private View rootView;
ProgressDialog pDialog;
JSONTask(Context mContext) {
this.mContext = mContext;
}
public JSONTask(Context context, View rootView){
this.mContext=context;
this.rootView=rootView;
}
@Override
protected Wrap doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
Wrap wrapper=new Wrap();
wrapper.dataPassedInOnClick=params[0];
wrapper.resultData=buffer.toString();
return wrapper;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPreExecute(){
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading data...");
pDialog.show();
}
protected void onPostExecute(Wrap wrapResult) {
super.onPostExecute(wrapResult);
this.pDialog.dismiss();
if (wrapResult.dataPassedInOnClick.contains("Honda") ||
wrapResult.dataPassedInOnClick.contains("honda")) {
String activity_title =
getResources().getString(R.string.Honda);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
} else if (wrapResult.dataPassedInOnClick.contains("Suzuki") ||
wrapResult.dataPassedInOnClick.contains("suzuki")) {
String activity_title =
getResources().getString(R.string.Suzuki);
Intent intent = new Intent(MainActivity.this,
DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", wrapResult.resultData);
intent.putExtras(extras);
startActivity(intent);
}
}
}
我们必须定义类包装,因为doInBackground方法只能返回单个对象。Hi!我的按钮执行API,在OnPostExecute中,我希望有一个else_if语句,根据按下的按钮ID从字符串源文件中选择正确的标题,以便Honda或Suzuki将其放入一个包中并转移到另一个活动中。因此,我的按钮工作正常,这是将按钮ID传输到OnPostExecuted的问题您将在OnPostExecute中传递哪个视图?这是我要问的问题。如何访问OnPostExecute中的按钮ID。请发布更多代码,我知道可能是什么,但我需要了解您如何使用您的方法,更新您的问题,我将更新我的答案谢谢您的回答!我把我的主要活动代码放在上面的问题中。谢谢