2012-04-01 3 views
1

나는 following this tutorial입니다. 지시 사항을 정확히 따르도록주의를 기울였습니다. 내가 한 모든 일은 사람이하고있는 것과 동일합니다. 단, PHP 파일에서는 내 호스트, 사용자 이름, 암호 및 데이터베이스를 제공합니다. 내 데이터베이스에서 튜토리얼과 동일한 테이블을 만들었습니다 (같은 필드 유형의 이름, 모든 것, 동일한 스크립트를 실행했습니다). 그리고 Eclipse에서 똑같은 코드를 가지고 있습니다.Android에서 mySQL db에 연결할 때 오류가 발생했습니다.

여기 내 코드입니다. 그것은 주어진 것과 동일하지만 내 HttpPost 링크는 내 것입니다. 내 응용 프로그램을 실행할 때

package com.heatscore.pregame; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class AlertsActivity extends Activity 
{ 
    JSONArray jArray; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb=null; 


    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     // Uses the scores xml layout 
     setContentView(R.layout.alerts); 

     String result = ""; 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("year","1980")); 

     //http post 
     try 
     { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://<EXCLUDED FOR QUESTION>/getAllPeopleBornAfter.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       InputStream is = entity.getContent(); 
     } 
     catch(Exception e) 
     { 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 

     //convert response to string 
     try 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) 
       { 
         sb.append(line + "\n"); 
       } 
       is.close(); 

       result=sb.toString(); 
     } 
     catch(Exception e) 
     { 
       Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     //parse json data 
     try 
     { 
      JSONArray jArray = new JSONArray(result); 
      for(int i=0;i<jArray.length();i++) 
      { 
        JSONObject json_data = jArray.getJSONObject(i); 
        Log.i("log_tag","id: "+json_data.getInt("id")+ 
          ", name: "+json_data.getString("name")+ 
          ", sex: "+json_data.getInt("sex")+ 
          ", birthyear: "+json_data.getInt("birthyear")); 
      } 
     } 
     catch(JSONException e) 
     { 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 
    } 
} 

불행하게도의 로그 캣 오류를 보여줍니다

04-01 00:01:18.483: E/log_tag(5218): Error converting result java.lang.NullPointerException 
04-01 00:01:18.483: E/log_tag(5218): Error parsing data org.json.JSONException: End of input at character 0 of 

가 나는 또한 매니페스트 파일에 올바른 사용 권한을 추가했습니다. 그리고 네, 그 줄은 신청 마감 태그 뒤에 있습니다.

<uses-permission android:name="android.permission.INTERNET"/> 

호스트에 ping을 실행하여 네트워크에 문제가 없는지 확인합니다. 결과는 성공적이었다. 또한 에뮬레이터가 아닌 내 휴대 전화에서 앱을 실행 중입니다. 프로그램이 충돌하지 않지만 로그에 오류가 있습니다.

거의 모든 것이 예제와 동일하다면 왜 내 기능이 작동하지 않습니까? 다른 누구에게도이 문제가 있었으며 무엇을 했습니까? 이것을 알아내는 방법이 있습니까?

+0

업데이트 : [{ "ID": "1", "이름"내 PHP 파일 나는 서버를 찾아 나는이 다음과 같은 출력을 얻을 파일을 클릭하면 때문에 문제라고 생각하지 않습니다 : "bob", "sex": "1", "birthyear": "1990"}, { "id": "2", "name": "sue", "sex": "1", "birthyear" "1981"}, { "id": "3", "name": "mike", "sex": "1", "birthyear": "1989"}] – Zolt

+0

그래서 다른 문제 여야합니다. – Zolt

+0

업데이트 : jArray의 길이가 0 인 것을 알았습니다. lblShow.setText (jArray.length() + ""); 출력하지 말라. 또한 "result"변수의 값은 빈 문자열입니다. 또한 while ((line = reader.readLine())! = null) 반복은 0 번 반복됩니다. – Zolt

답변

0

알아 냈어! "is"변수 (InputStream)는 다른 try catch 블록에 있었고 다음 블록에서 실제로 null이었습니다.

다음 코드는 모든 것을 수정합니다. 참고 try catch 중 하나를 제거하고 코드를 이전 코드로 옮겼습니다.

희망이 있으면 도움이됩니다.

package xxx.xxx.xxx; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AlertsActivity extends Activity 
{ 
JSONArray jArray; 
String result; 
InputStream is; 
StringBuilder sb; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.alerts); 

    String result = ""; 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("year","1980")); 

    //http post 
    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://xxx/getAllPeopleBornAfter.php"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) 
     { 
      sb.append(line + "\n"); 
     } 
     is.close(); 

     result=sb.toString(); 
    } 
    catch(Exception e) 
    { 
     Log.e("log_tag", "Error in http connection " + e.toString()); 
    } 

    //parse json data 
    try 
    { 
     JSONArray jArray = new JSONArray(result); 
     for(int i=0;i<jArray.length();i++) 
     { 
      JSONObject json_data = jArray.getJSONObject(i); 
      Log.i("log_tag","id: " + json_data.getInt("id")+ 
        ", name: " + json_data.getString("name")+ 
        ", sex: " + json_data.getInt("sex")+ 
        ", birthyear: " + json_data.getInt("birthyear"));  
     } 
    } 
    catch(JSONException e) 
    { 
     Log.e("log_tag", "Error parsing data " + e.toString()); 
    } 
} 
    } 
관련 문제