繁体   English   中英

受保护的虚空内的按钮开关案例声明

[英]Buttons switch-case statement inside Protected Void

我正在从Android应用程序中的API提取数据,并在活动之间bundle传输。

OnPostExectute我创建了一个在第二个活动中显示的JSON 数据标题包。

现在,我想使用switch-case语句,以便在单击button时从正确的API提取数据并在bundle传输正确的标题。

我已将xml文件中的OnClick函数分配给我的按钮。

有人能指出我正确的方向吗?

我可以在“ Protected Void (OnPostExecute)内使用Switch Case语句放置public void吗? 由于它似乎不起作用。

如果有人可以看一下我的代码并给我一些有关代码结构的提示,我将不胜感激。

谢谢!

以下是我的PostExecute代码:

@Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

    public void btnHelp(View v) {
        Button clickedButton = (Button) v;
        switch (clickedButton.getId()) {
            case R.id.btnHousing:
                String activity_title = getResources().getString(R.string.title2);
                Intent intent = new Intent(MainActivity.this, DisplayDataActivity.class);
                Bundle extras = new Bundle();
                extras.putString("title", activity_title);
                extras.putString("JSON_Object", result);
                intent.putExtras(extras);
                startActivity(intent);
                break;

            case R.id.btnFood:
                String activity_title = getResources().getString(R.string.title1);
                Intent intent = new Intent(MainActivity.this, DisplayDataActivity.class);
                Bundle extras = new Bundle();
                extras.putString("title", activity_title);
                extras.putString("JSON_Object", result);
                intent.putExtras(extras);
                startActivity(intent);
                break;
        }

    }
}

以下是我的.java按钮:

public void btnHelp1(View view) {
    JSONTask objJSONTask=new JSONTask(MainActivity.this);
    objJSONTask.execute("URL_with_API_1");
}

public void btnHelp2(View view) {

    JSONTask objJSONTask=new JSONTask(MainActivity.this);
    objJSONTask.execute("URL_with_API_2");
}

这是我的两个按钮的.xml文件:

<Button
        android:text="@string/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"     
        android:onClick="btnHelp"
        android:id="@+id/btnHousing"
        />
    <Button
        android:text="@string/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="btnHelp"
        android:id="@+id/btnFood"
        />

请尝试这个...

1. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<Button
    android:text="@string/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onHouse"
    android:id="@+id/btnHousing"
    />
<Button
    android:text="@string/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onFood"
    android:layout_below="@+id/btnHousing"
    android:id="@+id/btnFood"
    />

2. OnTaskCompleted.java

public interface OnTaskCompleted {
   public void onTaskOne(String result);
   public void onTaskTwo(String result);
}

3. Constants.java

public class Constants {
  public static final int URL_with_API_1 = 1;
  public static final int URL_with_API_2 = 2;
}

4. JSONTask.java

    public class JSONTask extends AsyncTask<String, Void, String> {
       private OnTaskCompleted mOnTaskCompleted;
       private int apiType = 0;

       public JSONTask(int apiType, OnTaskCompleted mOnTaskCompleted) {
         this.apiType = apiType;
         this.mOnTaskCompleted = mOnTaskCompleted;
       }

      @Override
      protected void onPreExecute() {
        super.onPreExecute();
      }

      @Override
      protected String doInBackground(String... params) {
          String api = params[0];

          // make rest call and return valid data to onPostExecute callback.
          return null;
      }

      @Override
      protected void onPostExecute(String result) {
           super.onPostExecute(result);

           //Magic...
           switch (apiType) {
               case Constants.URL_with_API_1:
                    if (mOnTaskCompleted != null) mOnTaskCompleted.onTaskOne(result);
                 break;
               case Constants.URL_with_API_2:
                    if (mOnTaskCompleted != null) mOnTaskCompleted.onTaskTwo(result);
                 break;
              default:
            }
          }
        }

5. MainActivity.java

public class MainActivity extends AppCompatActivity {

private String JSON_RESULT_API_1 = "";
private String JSON_RESULT_API_2 = "";
private JSONTask mJsonTask;

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

    //make api 1
    mJsonTask = new JSONTask(Constants.URL_with_API_1, mOnTaskCompleted);
    mJsonTask.execute("URL_with_API_1");

    //make api 2
    mJsonTask = new JSONTask(Constants.URL_with_API_2, mOnTaskCompleted);
    mJsonTask.execute("URL_with_API_2");

}

public void onHouse(View view) {
    String activity_title = getResources().getString(R.string.title2);
    Intent intent = new Intent(MainActivity.this, DisplayDataActivity.class);
    Bundle extras = new Bundle();
    extras.putString("title", activity_title);
    extras.putString("JSON_Object", JSON_RESULT_API_1);
    intent.putExtras(extras);
    startActivity(intent);
}

public void onFood(View view) {
    String activity_title = getResources().getString(R.string.title1);
    Intent intent = new Intent(MainActivity.this, DisplayDataActivity.class);
    Bundle extras = new Bundle();
    extras.putString("title", activity_title);
    extras.putString("JSON_Object", JSON_RESULT_API_2);
    intent.putExtras(extras);
    startActivity(intent);
}


  OnTaskCompleted mOnTaskCompleted = new OnTaskCompleted() {
    @Override
    public void onTaskOne(String result) {
        JSON_RESULT_API_1 = result;
    }

    @Override
    public void onTaskTwo(String result) {
        JSON_RESULT_API_2 = result;
    }
    };
    }
  1. 编码愉快...如有任何疑问,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM