2012-04-06 51 views
-2

搜索,线程和MySQL我试图从我的数据库中进行搜索,这里是它继续带来的错误代码。数据是在MySQL的问题是它不断崩溃可以有人帮助我please.Here是我的代码。Android

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 void addmarkers() { 
     url = "http://10.0.2.2/therm/searchy.php"; 
     http = new Connector(ctx); 
     http.connect(url, myMap); } 

//类连接器,增加了覆盖并获取从数据库

 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; 
    } 
} 

//带.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到处:

//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 2012-04-06 13:22:24

+0

我已经更新了代码,请看看它 – user1207576 2012-04-06 13:37:35

+1

'Main'中的哪一行是276?你有没有调试过这段代码,看看那行上的哪些对象是'null'? – Gray 2012-04-06 13:42:10

回答

1

看起来你已经看到了NPE,因为你们没有初始化您的收藏mapOverlays。您注释掉初始化:

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

你的错误显示:

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

,你说行276:

mapOverlays.add(itemizedOverlay); 

我觉得你学习如何使用Android调试器等等你可以在将来追踪这类代码。祝你好运。