2012-04-01 66 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()); 
     } 
    } 
} 

不幸的是,當我運行我的應用程序時,logcat的顯示錯誤:

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主機以確保它不是網絡問題。結果是成功的。另外,我在手機上運行應用程序,而不是仿真器。該程序不會崩潰,但是錯誤在日誌中。

所以,如果幾乎everthing是相同的例子,那麼爲什麼我不工作?有沒有其他人有這個問題,你做了什麼?有什麼方法可以解決這個問題嗎?

+0

更新:我不認爲我的php文件是問題,因爲當我瀏覽到服務器並單擊該文件時,我得到以下輸出:[{「id」:「1」,「name」 「鮑勃」, 「性別」: 「1」, 「birthyear」: 「1990」},{ 「ID」: 「2」, 「名稱」: 「告」, 「性別」: 「1」, 「birthyear」: 「1981」},{「id」:「3」,「name」:「mike」,「sex」:「1」,「birthyear」:「1989」}] – Zolt 2012-04-01 04:31:51

+0

所以它一定是另一個問題。 – Zolt 2012-04-01 04:33:07

+0

更新:我發現jArray的長度是0. lblShow.setText(jArray.length()+「」);沒有輸出。而且,「結果」變量的值是一個空字符串。另外,while((line = reader.readLine())!= null)經歷了0次迭代。 – Zolt 2012-04-01 06:00:39

回答

0

想通了! 「is」變量(InputStream)位於不同的try catch塊中,並且在下一個塊中非常空。

以下代碼修復了一切。注意我擺脫了其中一個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()); 
    } 
} 
    }