forcedroid ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®å€æŽ
åŠç¿ã®ç®ç
ãã®åå ãå®äºãããšã次ã®ããšãã§ããããã«ãªããŸãã
- Android ãã€ãã£ããã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã倿ŽããŠããªã¹ãç»é¢ãã«ã¹ã¿ãã€ãºããã
- REST å¿çãåŠçããã
- REST èŠæ±ã䜿çšã㊠Salesforce ã¬ã³ãŒããåé€ããã
ãªã¹ãç»é¢ã®ã«ã¹ã¿ãã€ãº
ãã§ã«ç¢ºèªããããã«ãAndroid ãã€ãã£ããã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŠãŒã¶ãŒã® Salesforce çµç¹ããååŒå 責任è ãŸãã¯ååŒå ã®ãªã¹ãã衚瀺ãããŸããçŸåšã¯ãMobile SDK REST ã¯ã©ã¹ã«ããåŠçãããåçŽãª SOQL SELECT ã¯ãšãªããäœæããããåç §ã®ã¿ã®ãªã¹ãã§ããé·æŒãæäœã«åé€ã¢ã¯ã·ã§ã³ãæ·»ä»ããŠãç·šéæ©èœã匷åããŸãããããŠãŒã¶ãŒããªã¹ããã¥ãŒã§ååŒå 責任è åãã¿ãããããŸãŸæŒããããšãæ°ããåé€ã¢ã¯ã·ã§ã³ããé¢é£ä»ãããã Salesforce ã¬ã³ãŒãã®åé€ã詊ã¿ãŸãã詊è¡ãæåãããšãã¢ããªã±ãŒã·ã§ã³ã¯ååŒå 責任è ãªã¹ããã¥ãŒãã該åœããè¡ãå®å šã«åé€ããŸããèŠæ±ã倱æãããšãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã«å€±æã®çç±ã衚瀺ãããªã¹ããã¥ãŒã®è¡ã埩å ããŸãã
ãã³ã°ã¯ãªãã¯ãªã¹ããŒã«ã€ããŠ
ãã³ã°ã¯ãªãã¯ãªã¹ããŒã¯ãç°¡åã«å®è£ ã§ããŸãããã ãããã³ã°ã¯ãªãã¯ãªã¹ããŒã¯ã©ã¹ãäœæããæ¹æ³ã決ãããšãã¯å°ã泚æãå¿ èŠã§ããããŸããŸãªã³ãŒãã£ã³ã°ãªãã·ã§ã³ãæ€èšãããšããŸãããªã¹ããã¥ãŒã¬ãã«ã§ã¯ã¯ãªãã¯ããªã¹ã³ããªãããšãæããã«ãªããŸãã代ããã«ããªã¹ãé ç®ã¬ãã«ã§ãªã¹ã³ããŸããAndroid OnItemLongClickListener ã€ã³ã¿ãŒãã§ãŒã¹ã®ãããã§ããªã¹ãé ç®ã®ãªã¹ããŒãå®è£ ããã®ã¯é¢åãªäœæ¥ã§ã¯ãããŸããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ããªã¹ããã¥ãŒã«æ·»ä»ãããŠãªã¹ãã®é ç®ã®é·æŒãã«åå¿ãã 1 ã€ã®ãªã¹ããŒãå®çŸ©ããŸãããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¯ããã¥ãŒã¯ã©ã¹å ã«å ¬éã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããŸãã
次ã®èª²é¡ã¯ããã³ã°ã¯ãªãã¯ãªã¹ããŒãå®è£ ãããã¥ãŒã¯ã©ã¹ã決ããããšã§ããListView ãªããžã§ã¯ãã䜿çšããŠããªã¹ãã«è¡šç€ºãããæ å ±ãæäŸããããŒã¿ãªããžã§ã¯ããæå®ããŸããMobile SDK ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã¯ããã®ç®çã®ããã« ArrayAdapter<String> ãªããžã§ã¯ããäœæããListView ã«æ·»ä»ããŸãã
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); ((ListView) findViewById(R.id.contacts_list)).setAdapter(listAdapter);
ãã ããArrayAdapter<String> ã¯ãããŒã¿ãªããžã§ã¯ãã§ãã£ãŠãã¥ãŒã§ã¯ãããŸããããã以äžã®æ©èœããããŸããååŒå 責任è ãªã¹ããã¥ãŒã® ArrayAdapter ã¯ããªã¹ãã®ããŒã¿ã»ããã®é ç®ããšã« AdapterView ãªããžã§ã¯ããäœæããŸãããããã®ã¢ããã¿ãŒãã¥ãŒã¯ã察象ãªããžã§ã¯ãã衚ããããOnItemLongClickListener ã®å®è£ ã«ã¯ AdapterView ã¯ã©ã¹ã䜿çšããŸããæ¬¡ã«ããªã¹ããŒãªããžã§ã¯ãããåã«ä»£ãã£ãŠãã¹ãŠã®éç¥ãåä¿¡ãã ListView ãªããžã§ã¯ãã«é¢é£ä»ããŸãããã®é¢é£ä»ãã«ãããOnItemLongClickListener ãæäœããã®ã¯ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã®ãªã¹ããã¥ãŒå ã®é ç®ã®ã¿ã«å¶éãããŸããããã«ãåé€åäœãåç¬ã®ã€ã³ã¿ãŒãã§ãŒã¹ã¡ãœããã«å®è£ ããŸãã
æåŸã«çްããç¹ã§ããããã®ãã³ã°ã¯ãªãã¯ãªã¹ããŒã®ã³ãŒãã¯ã©ãã«é 眮ããã®ã§ãããããMobile SDK ã«ã¯ã次ã®ãšã³ããªãã€ã³ãã³ãŒã«ããã¯ã¡ãœããããããŸãã
public abstract void onResume(RestClient client);
@Override protected void onCreate(Bundle savedInstanceState);
@Override public void onResume();
onCreate(Bundle savedInstanceState) ã¯é€å€ã§ããŸãããã®ã¡ãœããã¯ããã¥ãŒãã€ã³ã¹ã¿ã³ã¹åãããåã«ã¢ã¯ãã£ããã£ãèšå®ããŠãèªèšŒãããŒãåŠçããŸãããã¥ãŒãç»å Žããã®ã¯ãonResume() ã¡ãœããã§ãããããã£ãŠããã®ã¡ãœãããæãå¯èœæ§ã®é«ãåè£ã§ããonResume(RestClient client) ã¡ãœããã¯ããã°ã€ã³æã«èªèšŒããã RestClient ãªããžã§ã¯ããååŸããããã«ã¹ãŒããŒã¯ã©ã¹ã«ãã£ãŠã³ãŒã«ãããŸããããã¯ãã®ãŸãŸã«ããŠãããŸããããããã§çµæãåºãŸãããonResume() ã«ãã³ã°ã¯ãªãã¯ãªã¹ããŒã³ãŒããé 眮ããŸãããã
åºæ¬çãªãã³ã°ã¯ãªãã¯ãªã¹ããŒã®å®è£
- Android Studio ã§ãMainActivity.java ãã¡ã€ã«ãéããŸãã
- onResume() ã¡ãœãããèŠã€ããŸããããŒã¯ã«åŸã£ãŠã³ãŒãã£ã³ã°ãéå§ããŸããListView çšã® listAdapter ãã»ãããããåŸã§ãsuper.onResume() ã³ãŒã«ã®åã§ããååŒå 責任è ãªã¹ããã¥ãŒãåç §ãã䟿å©ãª ListView 倿°ã宣èšããŠå²ãåœãŠãŸããActivity.findViewById() ã¡ãœããã䜿çšããŠãªã¹ããã¥ãŒãªãœãŒã¹ãæ€çŽ¢ããŸãã
@Override public void onResume() { // Hide everything until we are logged in findViewById(R.id.root).setVisibility(View.INVISIBLE); // Create list adapter listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); ((ListView) findViewById(R.id.contacts_list)).setAdapter(listAdapter); // ADD CODE HERE! super.onResume(); } ((ListView) findViewById(R.id.contacts_list)).setAdapter(listAdapter); ListView lv = ((ListView) findViewById(R.id.contacts_list)); super.onResume();
- lv 倿°ã䜿çšããŠãAdapterView.setOnItemLongClickListener() ãã³ãŒã«ããŠãã³ã°ã¯ãªãã¯ã€ãã³ãã®ãªã¹ããŒãèšå®ããŸãããªã¹ããŒã®ãã©ã¡ãŒã¿ãŒã«ã¯ãAdapterView.OnItemLongClickListener ã€ã³ã¿ãŒãã§ãŒã¹ã®ã€ã³ã©ã€ã³ã¹ã¿ããã€ã³ã¹ã¿ã³ã¹åããŸããAndroid Studio ã¯åäžã®ä»®æ³ã€ã³ã¿ãŒãã§ãŒã¹ã¡ãœãããã¹ã¿ãããŠããŸãã䟿å©ã§ããã
ListView lv = ((ListView) findViewById(R.id.contacts_list)); lv.setOnItemLongClickListener( new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { return false; } }); - (çç¥å¯èœ) ã€ã³ããŒãã®æ¬ èœã«é¢ãããšã©ãŒãçºçããå Žåã¯ãã¯ã©ã¹ã€ã³ããŒãã« import android.widget.AdapterView ã远å ããŸãã
- AdapterView.OnItemLongClickListener ããã£å
ã§ãå®åã® return ã¹ããŒãã¡ã³ãã確èªããŒã¹ãã¡ãã»ãŒãžã衚ãã³ãŒãã«çœ®ãæããŸãã
ListView lv = ((ListView) findViewById(R.id.contacts_list)); lv.setOnItemLongClickListener (new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "Long press received", Toast.LENGTH_SHORT).show(); return true; } }); - ã¢ããªã±ãŒã·ã§ã³ããã«ãããå®è¡ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ãããã[Fetch Contacts (ååŒå 責任è ãååŸ)] ãã¯ãªãã¯ããŸãã
- ååŒå 責任è ãªã¹ãå ã®ãšã³ããªãã¿ããããæ°ç§éæŒãããŸãŸã«ããŸãããã¹ãŠãæ£ããæ©èœãããšãããŒã¹ãã¡ãã»ãŒãžã衚瀺ãããŸãã
Mobile SDK REST èŠæ±ã®è¿œå
Mobile SDK èŠçŽ ã远å ããæºåãã»ãŒæŽããŸãããonItemLongClick() ã¡ãœããã§ãã¿ãããããè¡ã«é¢é£ä»ããããŠãã Salesforce ã¬ã³ãŒããåé€ãã REST èŠæ±ãäœæããŸããæ¬¡ã«ããã®èŠæ±ã Salesforce ã«éä¿¡ããŸããã³ãŒãã詳ããèŠãåã«ã次ã®éèŠäºé ã確èªããŸãã
RestClient ã€ã³ã¹ã¿ã³ã¹ã®ååŸ
RestClient ãªããžã§ã¯ãã¯çŽæ¥äœæã§ããŸãããMobile SDK ã«ãã£ãŠäœæãããonResume(RestClient client) ã¡ãœãããä»ã㊠MainActivity ã«è¿ãããŸãããã® RestClient ã€ã³ã¹ã¿ã³ã¹ã¯ãçŸåšã®ãŠãŒã¶ãŒã®ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿çšããŠèªèšŒãããŠããŸããonResume(RestClient client) ã¡ãœããã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã client ã¯ã©ã¹å€æ°ã«å²ãåœãŠãŠã䜿çšã§ããããã«ããŸãã
REST èŠæ±ã®äœæ
ãã®ç·Žç¿åé¡ã® REST èŠæ±ãäœæããã«ã¯ãã¬ã³ãŒããåé€ãã RestRequest ãã¡ã¯ããªãŒã¡ãœãããã³ãŒã«ããŸãã
public static RestRequest getRequestForDelete(String apiVersion, String objectType, String objectId);
åŒæ°ã®å€ã¯ã©ãã§ååŸããã®ã§ãããã? 次ã®è¡šãåç §ããŠãã ããã
| ãã©ã¡ãŒã¿ãŒ | å€ |
|---|---|
| apiVersion | ã¢ããªã±ãŒã·ã§ã³ã®ãªãœãŒã¹ã§å®çŸ©: getString(R.string.api_version) |
| objectType | âContactâ (ããŒãã³ãŒãå) |
| objectId | ?? |
- ID ãææããŠããªãã®ã¯ãå ã® REST èŠæ± (ãªã¹ããå ¥åããèŠæ±) ããããæ±ããªãããã§ãã
- REST èŠæ±ã倿Žããããšã«ãã£ãŠ ID ãååŸã§ããŸãã
ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã® SOQL èŠæ±ã®èª¿æŽ
MainActivity ã¯ã©ã¹ã¯ 2 ã€ã® REST èŠæ±ãçºè¡ããŸãã1 ã€ã¯ååŒå 責任è çšã§ããã 1 ã€ã¯ååŒå çšã§ããåèŠæ±ã«ã¯ SOQL ã¹ããŒãã¡ã³ããå«ãŸããŠããŸããååŒå ã¯äœ¿çšããªããããååŒå 責任è ã¬ã³ãŒããªã¯ãšã¹ãã ID å€ãè¿ãããã«å€æŽããŸãããã
- Android Studio ã§ãMainActivity.java ãã¡ã€ã«ãéããŸãã
- onFetchContactsClick() ã¡ãœãããèŠã€ããŸãã
public void onFetchContactsClick(View v) throws UnsupportedEncodingException { sendRequest("SELECT Name FROM Contact"); } - SOQL ã¯ãšãªã倿ŽããŠãName é
ç®ãš Id é
ç®ãéžæããããã«ããŸããID é
ç®åã®ãã£ã¡ã«ã±ãŒã¹ã®ã¹ãã«ã«æ³šæããŠãã ãããé
ç®åã§ã¯å€§æåãšå°æåãåºå¥ãããŸãã
public void onFetchContactsClick(View v) throws UnsupportedEncodingException { sendRequest("SELECT Name, Id FROM Contact"); }
ããã§ãREST å¿çã® ID å€ãåãåããããã«ãªããŸããããID å€ãã©ãã«ä¿åããã®ãããã§ããããããã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã¯ãåã¬ã³ãŒãã®ååå€ããªã¹ããã¥ãŒã®è¡ã«ã³ããŒããã ãã§ãID å€ããã£ãã·ã¥ããŸãããé·æŒããã³ãã©ãŒã§åç §ã§ããããã«ããã«ã¯ãã¯ã©ã¹ã®ç¯å²å ã« ID ãä¿åããå¿ èŠããããŸãã
ãã³ãã¬ãŒãã¢ããªã±ãŒã·ã§ã³ã® sendRequest() ã¡ãœããã®é©å
RestRequest restRequest = RestRequest.getRequestForQuery(
ApiVersionStrings.getVersionNumber(this), soql);次ã«ãclient.sendAsync() ã³ãŒã«å ã§ããã®æ°ãã RestRequest ãªããžã§ã¯ãã Salesforce ã«éä¿¡ããŸãã
client.sendAsync(restRequest, new AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, final RestResponse result) {
result.consumeQuietly(); // consume before going back to main thread
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
listAdapter.clear();
JSONArray records = result.asJSONObject().getJSONArray("records");
for (int i = 0; i < records.length(); i++) {
listAdapter.add(records.getJSONObject(i).getString("Name"));
}
} catch (Exception e) {
onError(e);
}
}
});
}
@Override
public void onError(final Exception exception) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
MainActivity.this.getString(
R.string.sf__generic_error,
exception.toString()),
Toast.LENGTH_LONG).show();
}
});
}
});sendAsync() ã³ãŒã«ã«ã¯ãRestRequest ãªããžã§ã¯ãã®ä»ã«ãMobile SDK AsyncRequestCallback ã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£ ãå¿ èŠã§ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã® onSuccess() ã¡ãœããã¯ãã³ãŒã«ããã¯ãä»ã㊠REST å¿çãéåæã«åä¿¡ããŸããããã©ã«ãã® AsyncRequestCallback å®è£ ã¯ãforcedroid ã¢ããªã±ãŒã·ã§ã³ã§å®çŸ©ããã SOQL ã¯ãšãªã®ã¿ãåŠçããŸãã
public class MainActivity extends SalesforceActivity { private RestClient client; private ArrayAdapter<String> listAdapter; private JSONArray records; âŠ.- onSuccess() ã¡ãœããã§ãrecords 倿°ã®å宣èšãåé€ããŸãã
public void onSuccess(RestRequest request, final RestResponse result) { result.consumeQuietly(); // consume before going back to main thread runOnUiThread(new Runnable() { @Override public void run() { try { listAdapter.clear(); records = result.asJSONObject().getJSONArray("records"); for (int i = 0; i < records.length(); i++) { listAdapter.add(records.getJSONObject(i).getString("Name")); } } catch (Exception e) { onError(e); } } }); }
onItemLongClick() ã¡ãœããã®çµäº
onItemLongClick() ã¡ãœãããçµäºããæºåãã§ããŸãããåºæ¬ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- é©å㪠Mobile SDK RestRequest ãã¡ã¯ããªãŒã¡ãœãããã³ãŒã«ããŠããåé€èŠæ±ããªããžã§ã¯ããååŸããŸãããã¹ãŠã® RestRequest ã¡ãœãããäŸå€ãçºçããããããã³ãŒã«ã try...catch ãããã¯ã§å²ãå¿ èŠããããŸãã
- çæããã RestClient ãªããžã§ã¯ãã䜿çšããŠãåé€èŠæ±ããªããžã§ã¯ãã Salesforce ã«éä¿¡ããŸãã
- ã³ãŒã«ããã¯ã¡ãœããã§ REST ã®çµæãåŠçããŸãã
RestRequest ãªããžã§ã¯ããååŸãã
- onResume() ã¡ãœããå ã® onItemLongClick() ã¡ãœãããŸã§ã¹ã¯ããŒã«ããŠæ»ããŸãã
- Toast.makeText() ã³ãŒã«ã®åŸã§ãrestRequest ãšããããŒã«ã« RestRequest ãªããžã§ã¯ãã宣èšããŸãããã®ãªããžã§ã¯ãã null ã«åæåããŸãã
RestRequest restRequest = null;
- 空㮠try...catch æ§é ã远å ããŸãã
RestRequest restRequest = null; try { } catch (Exception e) { } - try ãããã¯ã§ãå逿äœã®ããã® REST èŠæ±ãªããžã§ã¯ããååŸãããã¡ã¯ããªãŒã¡ãœãããã³ãŒã«ããŸãããã³ã: éç RestRequest.getRequestForDelete() ã¡ãœããã䜿çšããŸãã
RestRequest restRequest = null; try { restRequest = RestRequest.getRequestForDelete( // arguments? ); } catch (Exception e) { } - æåã®ãã©ã¡ãŒã¿ãŒã«ããããžã§ã¯ãã® Mobile SDK ãªãœãŒã¹ã§æå®ãããŠãã Salesforce API ããŒãžã§ã³ãååŸããŸãã
RestRequest restRequest = null; try { restRequest = RestRequest.getRequestForDelete( getString(R.string.api_version), //...); } catch (Exception e) { } - objectType ãã©ã¡ãŒã¿ãŒã« âContactâ ãæå®ããŸãã
RestRequest restRequest = null; try { restRequest = RestRequest.getRequestForDelete( getString(R.string.api_version), "Contact", //...); } catch (Exception e) { } - RestRequest.getRequestForDelete() ã«ãã¬ã³ãŒãé
åå
ã§çŸåšã®ãªã¹ããã¥ãŒäœçœ®ã«äžèŽãããšã³ããªã® ID ãæž¡ããŸãã以äžã«ãID ãååŸããæ¹æ³ã瀺ããŸãã
RestRequest restRequest = null; try { restRequest = RestRequest.getRequestForDelete( getString(R.string.api_version), "Contact", records.getJSONObject(position).getString("Id")); // Send the request // ... } catch (Exception e) { } - catch ãããã¯ã§ãException åŒæ°ã«å¯Ÿã㊠printStackTrace() ãã³ãŒã«ããŸãã
RestRequest restRequest = null; try { restRequest = RestRequest.getRequestForDelete( getString(R.string.api_version), "Contact", records.getJSONObject(position).getString("Id")); // Send the request // ... } catch (Exception e) { e.printStackTrace(); }
åé€èŠæ±ãªããžã§ã¯ããååŸããããããã Salesforce ã«éä¿¡ããã³ãŒã«ããã¯ã¡ãœããã§çµæãåŠçããŸãã
RestClient.sendAsync() ã¡ãœããã远å ãã
ããå°ãã§äœæ¥ã¯å®äºã§ããããºã«ã®æåŸã®ããŒã¹ã¯ãRestClient.sendAsync() ã¡ãœããã䜿çšããŠèŠæ±ãéä¿¡ããããšã§ãããã®ã¡ãœããã䜿çšããã«ã¯ãAsyncRequestCallback ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããå¿ èŠããããŸãããåç¥ã®ãšãããMobile SDK 㯠REST å¿çã AsyncRequestCallback ã¡ãœããã«éä¿¡ããŸãã
- onItemLongClick() ã§ãgetRequestForDelete() ã³ãŒã«ã®åŸã«ãsendRequest() ã¡ãœãããã RestClient.sendAsync() ã³ãŒããã³ããŒããŠè²Œãä»ããŸãã
- onSuccess() ã¡ãœããã® try ãã©ã³ãã®å éšã³ãŒããåé€ããŸããcatch ãã©ã³ãã¯ããšã©ãŒãã³ãã©ãŒãžã®ã³ãŒã«ã¢ãŠããè¡ãã ããªã®ã§ãåé€ããŸããã
- onError() äžæžãå®è£ ã¯æ±çšã§ãã©ã® Salesforce å¿çã§ãåäœããããããã®ãŸãŸã«ããŸãã
äžèŠãªéšåãåé€ãã RestClient.sendAsync() ãžã®ã³ãŒã«ã¯æ¬¡ã®ããã«ãªããŸãã
restRequest = RestRequest.getRequestForDelete(
getString(R.string.api_version), "Contact",
records.getJSONObject(position).getString("Id"));
client.sendAsync(restRequest, new AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, final RestResponse result) {
result.consumeQuietly();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Network component doesnât report app layer status.
// Use Mobile SDK RestResponse.isSuccess() method to check
// whether the REST request itself succeeded.
if (result.isSuccess()) {
try {
} catch (Exception e) {
onError(e);
}
}
}
});
}
@Override
public void onError(final Exception exception) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
MainActivity.this.getString(R.string.sf__generic_error, exception.toString()),
Toast.LENGTH_LONG).show();
}
});
}
});onSuccess() ã³ãŒã«ããã¯ã¡ãœãããå®è£ ãã
- HTTP ç¶æ³ããã¹ãããŠå逿äœãæåããããšã確èªãããåºç€éšåã®ãããã¯ãŒã¯ã³ã³ããŒãã³ãã§ã¯ããã©ã³ã¹ããŒãã¬ã€ã€ãŒã®ãšã©ãŒã®ã¿ãã¬ããŒããããREST èŠæ±ã®ãšã©ãŒã¯ã¬ããŒããããªãããããã®ãã§ãã¯ã¯å¿ é ã§ãã
- æäœãæåããå Žåã¯ããªã¹ããã¥ãŒã®æå®ãããäœçœ®ã®é ç®ãåé€ããã
- æåã¡ãã»ãŒãžãäœæããã
listAdapter.remove(listAdapter.getItem(position));
public class MainActivity extends SalesforceActivity { private RestClient client; private ArrayAdapter<String> listAdapter; private JSONArray records; private int pos = -1;- onItemLongClick() ã¡ãœããã®ç¬¬ 1 è¡ã§ãposition å€ãååŸããŸãã
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { pos = position; ... - AsyncRequestCallback å®è£
ã® onSuccess() ã¡ãœããã§ãæ°è¡äžã®ã¹ã¿ãã€ã³ãã if ãããã¯ãŸã§ã¹ã¯ããŒã«ããŠã³ããŸãã
if (result.isSuccess()) { try { } catch (Exception e) { onError(e); } } - result.isSuccess() ã true ã®å Žåã¯ãlistAdapter.remove() ã¡ãœãããã³ãŒã«ããŠè¡ãåé€ããŸããè¡ãåé€ããã«ã¯ãposition ã§ã¯ãªã pos ã䜿çšããŸãã
if (result.isSuccess()) { listAdapter.remove(listAdapter.getItem(pos)); } - ãªã¹ãé
ç®ãåé€ããåŸãsendRequest(request) ãã³ãŒã«ããŠäžŠã³æ¿ãããªã¹ããæŽæ°ããããŒã«ã«ã® records é
åãšåæããç¶æ
ã«ããŸãã
if (result.isSuccess()) { listAdapter.remove(listAdapter.getItem(pos)); sendRequest(âSELECT Name, Id FROM Contactâ); } - æåŸã«ãæåã¡ãã»ãŒãžã衚瀺ããã¢ã©ãŒãããã¯ã¹ãäœæããŸããããã§ãªãå Žåã¯ããšã©ãŒã¡ãã»ãŒãžãå ±åããŸãã
if (result.isSuccess()) { listAdapter.remove(listAdapter.getItem(pos)); sendRequest(âSELECT Name, Id FROM Contactâ); AlertDialog.Builder b = new AlertDialog.Builder(findViewById(R.id.contacts_list).getContext()); b.setMessage("Record successfully deleted!"); b.setCancelable(true); AlertDialog a = b.create(); a.show(); } else { Toast.makeText(MainActivity.this, MainActivity.this.getString(R.string.sf__generic_error, result.toString()), Toast.LENGTH_LONG).show(); }
以äžã¯ã宿ãã onItemLongClick() ã¡ãœããã§ãã
@Override
public boolean onItemLongClick(AdapterView<?> parent,
View view, int position, long id) {
pos = position;
Toast.makeText(getApplicationContext(),
"Long press detected", Toast.LENGTH_SHORT).show();
RestRequest restRequest = null;
try {
RestRequest request = RestRequest.getRequestForDelete(
getString(R.string.api_version), "Contact",
records.getJSONObject(position).getString("Id"));
client.sendAsync(request, new AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, final RestResponse result) {
result.consumeQuietly();
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
// Network component doesnât report app layer status.
// Use Mobile SDK RestResponse.isSuccess() method to check
// whether the REST request itself succeeded.
if (result.isSuccess()) {
listAdapter.remove(listAdapter.getItem(pos));
sendRequest(âSELECT Name, Id FROM Contactâ);
AlertDialog.Builder b =
new AlertDialog.Builder(findViewById
(R.id.contacts_list).getContext());
b.setMessage("Record successfully deleted!");
b.setCancelable(true);
AlertDialog a = b.create();
a.show();
} else {
Toast.makeText(MainActivity.this,
MainActivity.this.getString(
R.string.sf__generic_error,
result.toString()),
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
onError(e);
}
}});
}
@Override
public void onError(final Exception exception) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
MainActivity.this.getString(
R.string.sf__generic_error,
exception.toString()),
Toast.LENGTH_LONG).show();
}
});
}
});
} catch (Exception e) {
e.printStackTrace();
}
return true;
}æçµã¯ãªãŒã³ã¢ãããšå®è¡
ã¯ãªãŒã³ã¢ããã®æåŸã« [ååŒå ãååŸ] ãã¿ã³ãåé€ããŸãããªã¹ããã¥ãŒã¯ [ååŒå 責任è ãååŸ] ãš [ååŒå ãååŸ] ã§å ±æãããŠãããããé·æŒããã³ãã©ãŒã¯äž¡æ¹ã«çããé©çšãããŸãããã ããã¬ã³ãŒãã®åé€ã«äœ¿çšãã ID ã¯ååŒå 責任è ã«ã®ã¿é©çšãããããããã®ãã³ãã©ãŒã¯ååŒå ã«ã¯åœ¹ã«ç«ã¡ãŸããããŸãã¯ããã®åå ã®ç¯å²ã§ã¯ãããŸããããããã§åŠç¿ããå 容ãå¿çšããé·æŒããã³ãã©ãŒãååŒå 責任è ãšååŒå ã®äž¡æ¹ãåé€ããããã«èª¿æŽããããšãã§ããŸãããã®ãã¥ãŒããªã¢ã«ã§ã¯ãååŒå é¢é£ã®ã³ãŒãã¯åé€ããŸãã
æç€ºããããã¡ã€ã«ããæ¬¡ã®é ç®ãåé€ããŸãã
| File | ã¢ã¯ã·ã§ã³ |
|---|---|
| MainActivity.java | onFetchAccountsClick(View v) ã¡ãœãããåé€ããŸãã |
| res/layout/Main.xml | 次ã®ããããã®æäœãå®è¡ããŸãã
|
| res/values/strings.xml | 次ã®ããããã®æäœãå®è¡ããŸãã
|
ã€ãã«ã¢ããªã±ãŒã·ã§ã³ã宿ããå®è¡ã§ããç¶æ ã«ãªããŸããã
- Android Studio ã§ã ãã¯ãªãã¯ããŸãã
- Mobile SDK äºæã®ãšãã¥ã¬ãŒã¿ãŒãŸãã¯æ¥ç¶ããã€ã¹ãéžæããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããéã«ãSalesforce çµç¹ã«ãã°ã€ã³ãã[Fetch Contacts (ååŒå 責任è ãååŸ)] ãã¯ãªãã¯ããŠãªã¹ãã衚瀺ããŸããé·æŒãã確èªããããŒã¹ãã¡ãã»ãŒãžã衚瀺ããããŸã§ããªã¹ãã®ä»»æã®é ç®ãã¿ãããããŸãŸæŒãããŸãã
Developer Edition ããŒã¿ããŒã¹å ã®ããã©ã«ãã®ååŒå 責任è ãåé€ããããšãããšããšã©ãŒå¿çãè¿ãããŸãããããã®ãšã©ãŒã¯ãDeveloper Edition çµç¹ã«ãããããããã±ãŒãžãããåååŒå 責任è ãä»ã®ã¬ã³ãŒãã®èŠªã§ããããã«çºçããŸãããã¹ãã®æºåãããã«ã¯ãDeveloper Edition çµç¹ã«ãã°ã€ã³ããä»ã®ã¬ã³ãŒããææããŠããªããã¹ãååŒå 責任è ã 1 件以äžäœæããŸããåé€ãæåãããšãã¬ã³ãŒããåé€ãããããšã瀺ãã¡ãã»ãŒãžã衚瀺ãããŸãã