我一直在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是相同的例子,那麼爲什麼我不工作?有沒有其他人有這個問題,你做了什麼?有什麼方法可以解決這個問題嗎?
更新:我不認爲我的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
所以它一定是另一個問題。 – Zolt 2012-04-01 04:33:07
更新:我發現jArray的長度是0. lblShow.setText(jArray.length()+「」);沒有輸出。而且,「結果」變量的值是一個空字符串。另外,while((line = reader.readLine())!= null)經歷了0次迭代。 – Zolt 2012-04-01 06:00:39