2012-02-21 2 views
1

Yii Framework에서 실행되는 서버 측 응용 프로그램이 있습니다. Android에 Yii와 함께 데이터베이스 (MySQL)에 연결하려고합니다.Android HttpPost는 Yii Framework를 통해 500을 반환합니다.

그래서 나는이 같은 클라이언트에서 게시 :

여기
HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("myurl/reach"); 

try { 
    List<NameValuePair> nmp = new ArrayList<NameValuePair>(); 
    ResponseHandler<String> responseHandler=new BasicResponseHandler(); 

    // Parameters are here 
    // nmp.add(new BasicNameValuePair("name", "value")); 

    httpPost.setEntity(new UrlEncodedFormEntity(nmp)); 
    String rs = httpClient.execute(httpPost, responseHandler); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

입니다 YII의urlManager 규칙 :

'/reach' => 'site/reach', 

그리고 마지막으로 actionReach() 방법 siteController에 :

if(Yii::app()->request->isPostRequest) 
{ 
    // Reach MySQL 
} else 
{ 
    $this->redirect(Yii::app()->homeUrl); 
} 

모든 스택 내가 여기

org.apache.http.client.HttpResponseException: Internal Server Error 뻥, 응용 프로그램을 실행하려고입니다 :

02-22 01:11:18.803: W/System.err(3924): org.apache.http.client.HttpResponseException: Internal Server Error 
02-22 01:11:18.823: W/System.err(3924):  at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71) 
02-22 01:11:18.823: W/System.err(3924):  at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59) 
02-22 01:11:18.823: W/System.err(3924):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657) 
02-22 01:11:18.823: W/System.err(3924):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627) 
02-22 01:11:18.828: W/System.err(3924):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616) 
02-22 01:11:18.828: W/System.err(3924):  at com.app.myapp.PostActivity$postInfoTask.doInBackground(PostActivity.java:175) 
02-22 01:11:18.828: W/System.err(3924):  at com.app.myapp.PostActivity$postInfoTask.doInBackground(PostActivity.java:1) 
02-22 01:11:18.828: W/System.err(3924):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
02-22 01:11:18.833: W/System.err(3924):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
02-22 01:11:18.833: W/System.err(3924):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
02-22 01:11:18.833: W/System.err(3924):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
02-22 01:11:18.833: W/System.err(3924):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
02-22 01:11:18.838: W/System.err(3924):  at java.lang.Thread.run(Thread.java:1096) 

마지막으로, 나는 오류가 없습니다 내 URL을reach/reach에 변경하지만 YII도 홈 페이지의 HTML 출력을 반환 할 때 이미 게시 한 경우

무엇이 누락 되었습니까? 약 .htaccess 또는 무엇입니까?

+1

먼저 예상되는 출력을 보려면 브라우저에서 yii URL을 사용해보십시오. – Arfeen

+0

및 서버에서 PHP 오류를 확인하십시오. 내가 오류 500 그 대부분은 PHP 오류 –

+0

또한 Yii 경로를 확인하십시오. '도달 범위'에 특별한 규칙이 있습니까? 또한 아파치 로그 및 PHP 오류 로그를 꼬리로 사용해보십시오. –

답변

2

오랜 연구 끝에 답변을 찾았습니다. 죄송하지만 .htaccess은 (는) $_POST을 (를) 차단하고 있습니다. 그래서 나는 내 행동을 존재하는 컨트롤러으로 옮기기로 결정했으며, 이는 이미 으로 잘 작동합니다.

그래서에서 첫 번째로 내 라우팅 규칙을 변경 :

'reach/' => 'existed/reach', 

그리고 existedController에, 나는 reachAction라는 새로운 액션 썼다 : 문이 좋은 경우

if(Yii::app()->request->isPostRequest) 
{ 
    // MySQL Insert 
} 

이 있습니다. 마지막으로 모델에서 인스턴스를 가져와 사용했습니다. $model->save();

그게 전부입니다.

관련 문제