2016-02-05 43 views
-1

我正在學習android和webservices。我有一個使用okHttp發送數據的android應用程序,我需要在我的服務器上獲取這些數據並將其放入數據庫。我有一點經驗調用並從webservices獲取數據,但從未收到數據。ASP.NET如何使用OkHttp從Android應用程序接收HTTP數據

據我所知,在ASP.Net中我需要使用HttpHandler,我已經看到了一些例子,但他們似乎總是按照請求返回數據。您如何保持HttpHandler始終監聽此特定傳入數據?

這裏是我的示例android應用程序的代碼。

public class MainActivity extends Activity { 

TextView outputText; 
Button sendData; 
EditText edtUser, edtPass; 
final String URL = "http://serviceapi.skholingua.com/open-feeds/display_received_params.php"; 

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

    outputText = (TextView) findViewById(R.id.textView1); 
    outputText.setMovementMethod(new ScrollingMovementMethod()); 
    sendData = (Button) findViewById(R.id.button1); 
    edtUser = (EditText) findViewById(R.id.editText1); 
    edtPass = (EditText) findViewById(R.id.editText2); 

    sendData.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String userName = edtUser.getText().toString(); 
      String passWord = edtPass.getText().toString(); 
      OkHttpHandler handler = new OkHttpHandler(userName, passWord); 
      String result = null; 
      try { 
       result = handler.execute(URL).get(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      outputText.append(result + "\n"); 
     } 
    }); 
} 

的Class

public class OkHttpHandler extends AsyncTask<String, Void, String> { 

OkHttpClient client = new OkHttpClient(); 
String userName, passWord; 

public OkHttpHandler(String userName, String passWord) { 
    // TODO Auto-generated constructor stub 
    this.userName = userName; 
    this.passWord = passWord; 
} 

@Override 
protected String doInBackground(String... params) { 

    RequestBody formBody = new FormEncodingBuilder() 
      .add("name", userName) 
      .add("pass", passWord) 
      .build(); 
    Request request = new Request.Builder() 
      .url(params[0]).post(formBody) 
      .build(); 
    try { 
     Response response = client.newCall(request).execute(); 
     if (!response.isSuccessful()) 
      throw new IOException("Unexpected code " + response.toString()); 
     return response.body().string(); 

    } catch (Exception e) { 
    } 

    return null; 
} 

URL將改爲無論我在我的服務器上創建。我的問題是......這將發送什麼類型的數據?我需要在我的服務器上創建什麼來攝取它? 如果有人有一個很有幫助的例子。

回答

0

研究Web API。

讀取地址爲hxxp:// yourdomain/test/[variable]/[variable]並獲取地址hxxp:// yourdomain/test/[id]的POST示例。例如:

hxxp://yourdomain/test2/1 will return the string "You requested number 1" 

hxxp://yourdomain/test2/2 will return the string "You requested number 2" 

控制器:

public class TestController : ApiController {  
    [Route("test/{username}/{password}")] 
    [AcceptVerbs("POST")] 
    public string Post(string username, string password) { 
     if(username == "user" && password == "pass") { // check user/pass 
      string data = Request.Content.ReadAsStringAsync().Result; 
      //do something 
      return "User is authenticated"; 
     } 
    } 

    [Route("test2/{id}")] { 
    [AcceptVerbs("GET")] 
    public string GetData(int id) { 
     return "You requested number " + id; 
    } 
} 

在你上面的例子,你會打電話:

hxxp://yourdomain/test/name/pass 

,並得到響應 「用戶進行身份驗證」

+0

嘿..謝謝幫助...我現在正在研究Web API,但仍然困惑......請你詳細說明你的示例是什麼?查找Web API我發現了大量關於如何從Web服務獲取數據的示例,但沒有太多關於如何監聽數據發佈到您的服務的示例。 – meyvn

+0

已更新的示例 – Mattias

相關問題