2016-07-29 5 views
1

REST APIへのアクセスに関する正しい構文とコードの順序について質問があります。リクエストヘッダーを使用したAndroidでのREST APIへのアクセス

私はbackendless.comというmBaasで作成したデータベースにアクセスしようとしています。 (以下のデータ情報はこのmBaasに固有のものですが、私の質問はAndroidのREST APIにアクセスする一般的なプロセスです)

チュートリアルによると、一括削除(https://backendless.com/documentation/data/rest/data_deleting_data_objects.htm)それを削除します。私はその価値があります。また、3つのリクエストヘッダ(アプリケーションID、秘密鍵、アプリケーションタイプ)も必要です。

私はASyncTaskクラスでこの情報をすべて利用し、技術的にはURLを開き、リクエストヘッダを設定し、REST APIを呼び出す必要があります。私の唯一の問題は、ここに何らかのコードがないのかどうか分かりません。私の現在のコードは適切な順序ですか?クラスが実行されるたびに何も起こりません。何でもするときにはつながらない...

URLをapi.backendless.com/v1/data/bulk /:java.io.FileNotFoundException:

私も自分のURLに関しては、ログ猫の例外を取得します私はそれを私のブラウザに置きますが、ブラウザがGETリクエストとしてそれを送るので、私はそれをすべきではないと言います。

とにかく、私のASyncTaskクラスはすべての情報を含んでいます。このコードが正しいかどうか知っていますか?私はこれらのタイプの呼び出しを行うのが初めてで、REST APIにアクセスする際にリクエストヘッダーが果たすロールを実際に理解していません。私にお知らせください。ありがとうございました!

class DeleteBulkFromBackEnd extends AsyncTask<Void,Void,String>{ 
    final String API_URL = "https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where%3DuserEmailID%[email protected]"; 

    @Override 
    protected String doInBackground(Void... params) { 
     HttpURLConnection urlConnection = null; 


     try { 
      URL url = new URL(API_URL); 
      urlConnection = (HttpURLConnection)url.openConnection(); 

     urlConnection.setRequestProperty("application-id","12345678"); 
      urlConnection.setRequestProperty("secret-key","12345678"); 
      urlConnection.setRequestProperty("application-type", "REST"); 
      urlConnection.connect(); 



     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } catch (IOException e) { 
      Log.d("Contact","ERROR " + e.toString());//IO Exception Prints in log cat not recognizing URL 
      e.printStackTrace(); 
     }finally { 
      urlConnection.disconnect(); 
     } 

     return null; 
    } 

} 
+1

'API_URL'とヘッダパラメータが正しいことを考慮すると、' urlConnection.connect();を呼び出す前に 'urlConnection.setRequestMethod(" DELETE ");を呼び出す必要があるかもしれません。 –

+0

はい、これが答えです!私が受け入れることができるよう投稿してください。ありがとう! –

答えて

1

、ここに解決策があります:

class DeleteBulkFromBackEnd extends AsyncTask<Void,Void,String>{ 
    final String API_URL = "https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where%3DuserEmailID%[email protected]"; 

    @Override 
    protected String doInBackground(Void... params) { 
     HttpURLConnection urlConnection = null; 


     try { 
      URL url = new URL(API_URL); 
      urlConnection = (HttpURLConnection)url.openConnection(); 

      urlConnection.setRequestProperty("application-id","12345678"); 
      urlConnection.setRequestProperty("secret-key","12345678"); 
      urlConnection.setRequestProperty("application-type", "REST"); 
      urlConnection.setRequestMethod("DELETE"); 

      urlConnection.connect(); 



     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } catch (IOException e) { 
      Log.d("Contact","ERROR " + e.toString());//IO Exception Prints in log cat not recognizing URL 
      e.printStackTrace(); 
     }finally { 
      urlConnection.disconnect(); 
     } 

     return null; 
    } 

} 
2

ネットワークへのアクセスを容易にするため、okhttpを使用することをお勧めします。

応答コードと応答本文を確認します。あなたのbuild.gradleで

compile 'com.squareup.okhttp3:okhttp:3.4.1' 

あなたのAsyncTaskは次のようになります。

class DeleteBulkFromBackEnd extends AsyncTask<Void, Void, String> { 

    final String API_URL = "https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where%3DuserEmailID%[email protected]"; 
    final OkHttpClient mClient; 

    public DeleteBulkFromBackEnd(OkHttpClient client) { 
     mClient = client; 
    } 

    @Override 
    protected String doInBackground(Void... params) { 
     try { 
      Request request = new Request.Builder() 
        .url(API_URL) 
        .delete() 
        .header("application-id", "12345678") 
        .header("secret-key", "12345678") 
        .header("application-type", "REST") 
        .build(); 

      Response response = mClient.newCall(request).execute(); 

      Log.d("DeleteBulkFromBackEnd", "Code: " + response.code()); 
      Log.d("DeleteBulkFromBackEnd", "Body: " + response.body().string()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

はこのようにAsyncTaskを実行します。私はコメントしてきたように

OkHttpClient client = new OkHttpClient(); 

void someMethod() { 
    ... 
    new DeleteBulkFromBackEnd(client).execute(); 
    ... 
} 
関連する問題