android - 将JSON对象提取到菜单项上的Share按钮

时间:2017-08-30 08:11:29

标签: java android json menuitem android-collapsingtoolbarlayout

我有一个看起来像这样的分享按钮

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_item_share:

            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Subject here");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Subtext here");
            startActivity(Intent.createChooser(sharingIntent, "Share via"));
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

和json对象数组看起来像这样

final JSONObject json = jsonParser.makeHttpRequest(urlAPI + "/" + id + "/", "GET", params1);

final JSONObject data = json.getJSONObject("data");

runOnUiThread(new Runnable() {
       @Override
       public void run() {
                      try{
                          final String titleData = data.getString(TITLE);
                          final String permalinkData = data.getString(PERMALINK);
                          }
}
}

有没有办法更改EXTRA_SUBJECT,"Subject here"EXTRA_TEXT, "Subtext here"以获取titleDatapermalinkData

这是我的完整java类以防万一

public class Detail extends AppCompatActivity {

String id;

private ProgressDialog progressDialog;

JSONParser jsonParser = new JSONParser();
public static final String TITLE = "title";
public static final String PERMALINK = "permalink";
public static final String EXCERPT = "excerpt";

private  static final String urlAPI = "https://api.insertapihere.com";

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detail_activity);

    Intent i = getIntent();
    id = i.getStringExtra(ID);

    new GetDetail().execute();
}

class GetDetail extends AsyncTask<String, String, String>{
    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        //progress dialog here
    }

    protected String doInBackground(String... params){
        try{
            List<NameValuePair> params1 = new ArrayList<>();

            final JSONObject json = jsonParser.makeHttpRequest(urlAPI + "/" + id + "/", "GET", params1);

            final JSONObject data = json.getJSONObject("data");

            runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    try{
                        final String titleData = data.getString(TITLE);
                        final String permalinkData = data.getString(PERMALINK);
                        final String excerptData = data.getString(EXCERPT);


/** 
  *share button menu
  */

    @Override //annotations are not allowed here
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.detail_menu, menu);
        return true;
    }

    @Override //annotations are not allowed here
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item_share:
                Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
                sharingIntent.setType("text/plain");
                sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Subject here");
                sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBodyText);
                startActivity(Intent.createChooser(sharingIntent, "Share via"));
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }


                    }
                    catch (JSONException e){
                        e.printStackTrace();
                    }
                    catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
        }
        catch (JSONException e){
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(String file_url){
        // progressDialog.dismiss();
    }
}

}

1 个答案:

答案 0 :(得分:0)

public class Detail extends AppCompatActivity {

    // TODO changes, variable with global scope
    String titleData;
    String permalinkData;

    String id;

    private ProgressDialog progressDialog;

    JSONParser jsonParser = new JSONParser();
    public static final String TITLE = "title";
    public static final String PERMALINK = "permalink";
    public static final String EXCERPT = "excerpt";

    private  static final String urlAPI = "https://api.insertapihere.com";

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detail_activity);

        Intent i = getIntent();
        id = i.getStringExtra(ID);

        new GetDetail().execute();
    }

    class GetDetail extends AsyncTask<String, String, String>{
        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            //progress dialog here
        }

        protected String doInBackground(String... params){
            try{
                List<NameValuePair> params1 = new ArrayList<>();

                final JSONObject json = jsonParser.makeHttpRequest(urlAPI + "/" + id + "/", "GET", params1);

                final JSONObject data = json.getJSONObject("data");

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                        try{
                            // TODO changes
                            titleData = data.getString(TITLE);
                            permalinkData = data.getString(PERMALINK);
                            final String excerptData = data.getString(EXCERPT);


    /** 
      *share button menu
      */

        @Override //annotations are not allowed here
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.detail_menu, menu);
            return true;
        }

        @Override //annotations are not allowed here
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_item_share:
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
                    sharingIntent.setType("text/plain");
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,titleData);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, permalinkData );
                    startActivity(Intent.createChooser(sharingIntent, "Share via"));
                    return true;

                default:
                    return super.onOptionsItemSelected(item);
            }
        }


                        }
                        catch (JSONException e){
                            e.printStackTrace();
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                });
            }
            catch (JSONException e){
                e.printStackTrace();
            }
            return null;
        }
        protected void onPostExecute(String file_url){
            // progressDialog.dismiss();
        }
    }

}