Java 按钮ID在OnPostExecute内

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中传递

我试图在OnPostExecute中使用else if语句,因此当单击按钮时,下载带有数据的API,在本例中,从字符串源文件中获取正确的标题Honda或Suzuki,这两个标题都放在一个包中并传输到另一个活动。然后,该标题用作我的DisplayDataActivity上的标题,并将数据放入TextView。 因此,我使用相同的活动来显示我的数据,只是标题和数据不同。 总共有20个按钮,但一旦我知道如何获取其中两个按钮的id,我会将其扩展到其余按钮。 但是,我无法在OnPostExecute中传递我的按钮id,因此我可以根据单击的按钮id选择正确的else\U if语句。 有办法吗? 如果有任何帮助,我将不胜感激

!!更新代码:

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。请发布更多代码,我知道可能是什么,但我需要了解您如何使用您的方法,更新您的问题,我将更新我的答案谢谢您的回答!我把我的主要活动代码放在上面的问题中。谢谢