2016-08-06 8 views
2

私はネイティブのAndroidアプリを作成しています。私はAndroidアプリからDrupalにログインするためにRest APIを使用します。私がセットアップしたDrupalサービスは正常に動作しています。私は郵便配達員とそれをテストしました。残りのAPIを使用してAndroidのDrupalにログイン

私は初心者であり、これを行う方法を説明する良いリソースと新しいリソースを見つけることができました。この古いチュートリアルが見つかりました。残念ながら、私はそれを働かせることができませんでした。

これを書くより良い方法が分かっている場合は、教えてください。 ご協力いただければ幸いです。

public class LoginActivity extends AppCompatActivity { 

public String session_name; 
public String session_id; 

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

//background task to login into Drupal 
private class LoginProcess extends AsyncTask<String, Integer, Integer> { 

    protected Integer doInBackground(String... params) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     //set the remote endpoint URL 
     HttpPost httppost = new HttpPost("http://localhost:8012/Adrupal/apistuff/user/login.json"); 

     try { 
      //get the UI elements for username and password 
      EditText username= (EditText) findViewById(R.id.editUsername); 
      EditText password= (EditText) findViewById(R.id.editPassword); 

      JSONObject json = new JSONObject(); 
      //extract the username and password from UI elements and create a JSON object 
      json.put("name", username.getText().toString().trim()); 
      json.put("pass", password.getText().toString().trim()); 

      //add serialised JSON object into POST request 
      StringEntity se = new StringEntity(json.toString()); 
      //set request content type 
      se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
      httppost.setEntity(se); 

      //send the POST request 
      HttpResponse response = httpclient.execute(httppost); 

      //read the response from Services endpoint 
      String jsonResponse = EntityUtils.toString(response.getEntity()); 

      JSONObject jsonObject = new JSONObject(jsonResponse); 
      //read the session information 
      session_name=jsonObject.getString("session_name"); 
      session_id=jsonObject.getString("sessid"); 

      Toast.makeText(LoginActivity.this, session_id + "this" + session_name, Toast.LENGTH_LONG).show(); 
      return 0; 

     }catch (Exception e) { 
      Log.v("Error adding article", e.getMessage()); 
     } 
     return 0; 
    } 


    protected void onPostExecute(Integer result) { 
     //create an intent to start the ListActivity 
     Intent intent = new Intent(LoginActivity.this, ListActivity.class); 
     //pass the session_id and session_name to ListActivity 
     intent.putExtra("SESSION_ID", session_id); 
     intent.putExtra("SESSION_NAME", session_name); 
     //start the ListActivity 
     Toast.makeText(LoginActivity.this, session_id + "this" + session_name, Toast.LENGTH_LONG).show(); 
     startActivity(intent); 
    } 
} 

//click listener for doLogin button 
public void doLoginButton_click(View view){ 
    new LoginProcess().execute(); 
} 

}

+0

これは何のエラーでしたか? – technico

+0

私は愚かな間違いをした。私のマシン上のローカルホスト上でDrupalサイトが実行されていました。私はそれをオンラインで動かすと効果がありました。とにかくありがとう。 – Kong

答えて

0

は、問題を解決しました。私は本当にばかな間違いをした。 Drupalサイトは私のマシンのlocalhost上で動作していました。私はアプリをテストするために私のデバイスを使っていました。私がサイトをオンラインにしたとき、それはうまくいった。

+0

私を助けてもらえますか? drupalは、Webサービス呼び出しの応答として常に完全な表を公開しますか?私たちのバックエンドdevloperは、ログインAPIの応答として複雑なJSONを送信しています。彼はこれがdrupalのデフォルトの動作であると伝えています。単純なjsonレスポンスを提供することはできません。 –

関連する問題