2012-03-26 24 views
0

私は、MySQLサーバーからデータを送受信するAndroidアプリの基本を取得しようとしています(実装はこの学習例とは関係ありません)。AndroidがMySQLデータベースに正しく接続できません

package com.davekelley.polling; 

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.ParseException; 
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.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.ActionBar; 
import android.app.Activity; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Chart extends Activity { 

    JSONArray jArray; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb=null; 

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

     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://www.davidjkelley.net/city.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      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); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 

      String line="0"; 
      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()); 
     } 
     //paring data 
     int ct_id; 
     String ct_name; 
     try{ 
      jArray = new JSONArray(result); 
      JSONObject json_data=null; 
      for(int i=0;i<jArray.length();i++){ 
       json_data = jArray.getJSONObject(i); 
       ct_id=json_data.getInt("CITY_ID"); 
       ct_name=json_data.getString("CITY_NAME"); 
      } 
     } 
     catch(JSONException e1){ 
      Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show(); 
     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 

をそしてここでXMLファイル 'chartfragment' のコードです:ここでのコードは、これまでだ

03-26 20:34:13.782: E/log_tag(1025): Error in http connection android.os.NetworkOnMainThreadException 
03-26 20:34:13.802: E/log_tag(1025): Error converting result java.lang.NullPointerException 
03-26 20:34:13.802: D/AndroidRuntime(1025): Shutting down VM 
03-26 20:34:13.802: W/dalvikvm(1025): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
03-26 20:34:13.832: E/AndroidRuntime(1025): FATAL EXCEPTION: main 
03-26 20:34:13.832: E/AndroidRuntime(1025): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.davekelley.polling/com.davekelley.polling.Chart}: java.lang.NullPointerException 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.os.Looper.loop(Looper.java:137) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at dalvik.system.NativeStart.main(Native Method) 
03-26 20:34:13.832: E/AndroidRuntime(1025): Caused by: java.lang.NullPointerException 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at org.json.JSONArray.<init>(JSONArray.java:87) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at org.json.JSONArray.<init>(JSONArray.java:103) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at com.davekelley.polling.Chart.onCreate(Chart.java:68) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.Activity.performCreate(Activity.java:4465) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
03-26 20:34:13.832: E/AndroidRuntime(1025):  ... 11 more 

:ここ

<?xml version="1.0" encoding="utf-8"?> 
    <ListView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

<!-- <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/chartTitleTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center"/> 
--> 

    </ListView> 

とはLogCatの問題私は遭遇していますだから、明らかにメインスレッド問題のネットワーク接続は、これをAsynctaskに移動する必要があることを意味します。しかし、そのようなエラーの塊で、私は何か他のものが欠けているのだろうか、それは明らかです。私は最終的にデータベースにユーザー/パスワードを登録し、クエリを取得して応答を送信できるようにしたいので、これは基本的にウォームアップです。 http://www.davidjkelley.net/city.phpに行った場合は、データベースが実際にAndroidコード内にリンクしているクエリPHPファイルに正しく応答していることがわかります。問題ではありません。

編集〜このチュートリアルの後で、アクティビティ(以前はアクティビティ)がhttp://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/であることに注意してください。これは、私のXMLがListViewだけである理由です。 id 'list'。

編集〜私のPHPコード:あなたは上記の投稿のリンクを訪問したとき、SQLの読み出しが正常に表示されて

<?php 
mysql_connect("127.0.0.1","***","***"); 
mysql_select_db("***"); 
$sql=mysql_query("select * from CITY where CITY_NAME like 'A%'"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

が明らか星のセットは、正しい情報です。

+0

NetworkOnMainThreadExceptionを取得している場合は、取得するのと同じくらい基本的です。最初に修正してください。この時点で、あなたがmysql DBを使って.phpページを打っているという事実は、側面の問題です。あなたはおそらくSYNパケットを送っていないでしょう... –

+0

解明したいですか?私はこのためにAsynctaskを作成する方法について尋ねました... – Davek804

+0

非同期の場合、これは開始する場所のようです:http://www.vogella.de/articles/AndroidPerformance/article.html特に第5章を参照してください。 –

答えて

2

データベースの実行方法は? PHPがどのように接続するのがより適切かもしれません。 PHPでは、アプリケーションからのリクエストを実際のデータベースに接続していない可能性があります(URLが間違っているか、データベース自体の名前)。チュートリアルthisをご覧ください。私はそれが正常に動作することを確認することができますし、あなたが同様に必要な機能を達成するようです。このチュートリアルでは、localhostの代わりにホストされたサーバー上で実行できるように、コードを変更する場所に関する注意事項があります。

+0

最新のアップデートをチェックしてください。 – Davek804

+0

また、リンクをありがとうございます。私は、私のベルトの下でこの基本的な側面を持っていると、それを使用します! – Davek804

+0

KDEx、ちょうどコピーペーストの手紙のチュートリアルの手紙を作り直したことを伝えたいと思っています。私が変更した唯一の事は、ローカルのホストIPアドレスを実際のサーバーのオンラインにしていたことです。私は私の元の質問NetworkOnMainThreadExceptionで扱っているのと同じエラーで終わります。何かアドバイス? – Davek804

関連する問題