2012-04-06 9 views
-2

私のデータベースから検索しようとしていますが、ここでエラーが発生しています。MySQLの問題にはデータがあります。私のコードです。アンドロイドで検索、スレッド、MySQLを

public class Main extends MapActivity { 
    /** Called when the activity is first created. */ 
    private Context ctx = this; 
    private Context ctx2 = this; 
    private ProgressDialog pd, pd2 = null; 
    private Object data, data2 = null;private String url;private MapView myMap; 
    private Connector http; 

    static String searchy; 
    String selection; 
    // MapView mapView; 
    List<Overlay> mapOverlays; 
    Drawable drawable; 
    Drawable drawable2; 
    CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay; 
    CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay2; 


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

     myMap = (MapView) findViewById(R.id.mapview); 
     myMap.setBuiltInZoomControls(true); 
     // addmarkers(); 
     // EditText searchInput = (EditText) findViewById(R.id.txtSearch); 
     // final String searchitem = searchInput.getText().toString().trim(); 

     Button search = (Button) findViewById(R.id.searchBtn); 
     search.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Log.i("MyApp", "Background thread starting"); 

       // pd = ProgressDialog.show(Main.this, "Working..", 
       // "Downloading Data...", true, false); 

       addmarkers(); 
      } 
     }); 

    } 

//は、オーバーレイを追加し、データベース

 public class Connector { 
      private Drawable marker; 
     private GeoPoint point; 
     private List<Overlay> mapOverlays; 

     public Connector(Context ctx1) { 
      ctx = ctx1; 
      marker = ctx.getResources().getDrawable(R.drawable.default_marker); 
      itemizedOverlay = new CustomItemizedOverlay<CustomOverlayItem>(
        marker, myMap); 
     } 

     public void connect(String url, MapView myMap) { 
      // TODO Auto-generated method stub 
      InputStream is = null; 
      // mapOverlays = myMap.getOverlays(); 
      // mapOverlays.clear(); 
      String result = null; 
      int ct_id; 
      String ct_name = null; 
      // String[] ct_namey = null; 
      String ct_add = null; 
      String ct_lat; 
      String ct_long; 
      String imageURL; 
      // the year data to send 
      EditText txt_username = (EditText) findViewById(R.id.txtSearch); 
      String woi = txt_username.getText().toString(); 
      Toast.makeText(getBaseContext(), woi, Toast.LENGTH_SHORT).show(); 

      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("searchy", woi)); 
      // http post 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(url); 
       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); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
        Log.v("log_tag", "Line reads: " + line); 

       } 
       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","address: " + json_data.getString("address") 

        ); 
        if (searchy.equals(json_data.getString("address"))) { 
         ct_id = json_data.getInt("id"); 
         ct_name = json_data.getString("name"); 
         // ct_namey[i] = json_data.getString("name"); 
         ct_add = json_data.getString("address"); 
         ct_lat = json_data.getString("lat"); 
         ct_long = json_data.getString("lng"); 
         imageURL = json_data.getString("imageUrl"); 

         Double lon = (Double.parseDouble(ct_long)); 
         Double lat = (Double.parseDouble(ct_lat)); 

         point = new GeoPoint((int) (lat * 1E6), 
           (int) (lon * 1E6)); 

         CustomOverlayItem overlayItem = new CustomOverlayItem(
           point, ct_name, ct_add, imageURL); 
         itemizedOverlay.addOverlay(overlayItem); 
         mapOverlays.add(itemizedOverlay); 
         myMap.postInvalidate(); 

        } else { 
         Toast.makeText(getBaseContext(), 
           "No such address is found", Toast.LENGTH_LONG) 
           .show(); 
        } 
       } 

      } catch (JSONException e) { 
       Log.e("log_tag", "Error parsing data " + e.toString()); 
      } 
      return; 
     } 

    } 



    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

//から取り出しマップ

public void addmarkers() { 
     url = "http://10.0.2.2/therm/searchy.php"; 
     http = new Connector(ctx); 
     http.connect(url, myMap); } 

//クラスコネクタに検索マーカーを追加するの.phpファイル

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("hospitals"); 
$q=mysql_query("SELECT * FROM hosi WHERE address like '%".$_REQUEST['searchy']."%'"); 
    while($e=mysql_fetch_assoc($q)) 
     $output[]=$e; 
print(json_encode($output)); 
mysql_close();?> 

ここではエラーがあります。 mが取得:あなたのmapOverlaysコレクションの初期化に失敗しましたので、あなたがNPEを取得しているよう

//error04-06 16:04:07.162: V/log_tag(10708): Line reads: [{"id":"1","name":"The Nairobi Hospital","address":"Upperhill","consult":"2000","phone":"+254202846000","desc":"The.... "}] 
04-06 16:04:07.162: V/log_tag(10708): Line reads: 
04-06 16:04:07.502: I/log_tag(10708): address: Upperhill 
04-06 16:04:07.552: W/dalvikvm(10708): threadid=1: thread exiting with uncaught exception (group=0x400287f0) 
04-06 16:04:07.572: E/AndroidRuntime(10708): FATAL EXCEPTION: main 
04-06 16:04:07.572: E/AndroidRuntime(10708): java.lang.NullPointerException 
04-06 16:04:07.572: E/AndroidRuntime(10708): at com.realestatefinder.plotjson.Main$Connector.connect(Main.java:276) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at com.realestatefinder.plotjson.Main$1.onClick(Main.java:86) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.view.View.performClick(View.java:2408) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.view.View$PerformClick.run(View.java:8816) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.os.Handler.handleCallback(Handler.java:587) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.os.Looper.loop(Looper.java:123) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 16:04:07.572: E/AndroidRuntime(10708): at java.lang.reflect.Method.invoke(Method.java:521) 
+1

どのようなエラーが表示されますか。質問を編集して提出してください。 – Gray

+0

コードを更新しました。それを見てください – user1207576

+1

'Main'のどの行は276ですか?このコードをデバッグして、その行のどのオブジェクトが「null」であるかを確認しましたか? – Gray

答えて

1

が見えます。

// mapOverlays = myMap.getOverlays(); 
// mapOverlays.clear(); 

あなたのエラーが表示さ:あなたは、初期化コメントアウト

java.lang.NullPointerException 
at com.realestatefinder.plotjson.Main$Connector.connect(Main.java:276) 

を、あなたはライン276であることを言った:私はあなたがそうAndroidのデバッガを使用する方法を学ぶと思う

mapOverlays.add(itemizedOverlay); 

将来この種のコードをトレースすることができます。運が良かった。