2017-02-19 1 views
0

내 마커 용 맞춤 정보 창을 만들려면이 코드를 시도하고 있습니다. 정보가 영구적으로 나타나길 원하며 특정 로직을 기반으로 정보창의 이미지를 동적으로 변경하고 싶습니다. 아래에 나와있는 Google 검색에서 일부 코드를 적용했습니다.Android google지도 맞춤 정보 창 오류가 갑자기 닫힙니다.

public static MapActivityFragment1 newInstance(String param1, String param2) { 
     MapActivityFragment1 fragment = new MapActivityFragment1(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_map_activity_fragment1, null, false); 

     SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
     tv = (TextView) view.findViewById(R.id.textRefresh); 
     customHandler = new android.os.Handler(); 
     customHandler.postDelayed(updateTimerThread, 0); 
     mMap.setInfoWindowAdapter(new BalloonAdapter(getLayoutInflater(savedInstanceState))); 
     return view; 
    } 
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
    } 


private class Getdata extends AsyncTask<String, Void, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      //pDialog = new ProgressDialog(MyMapActivity.this); 
      //pDialog.setMessage("Please wait..."); 
      //pDialog.setCancelable(false); 
      //pDialog.show(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       String fID= params[0]; 

       URL url = new URL("http://******.php"); 
       JSONObject postDataParams = new JSONObject(); 
       postDataParams.put("fID", fID); 
       Log.e("params", postDataParams.toString()); 


       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(15000 /* milliseconds */); 
       conn.setConnectTimeout(15000 /* milliseconds */); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 

       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os, "UTF-8")); 
       writer.write(getPostDataString(postDataParams)); 

       writer.flush(); 
       writer.close(); 
       os.close(); 
       int responseCode = conn.getResponseCode(); 

       if (responseCode == HttpURLConnection.HTTP_OK) { 

        BufferedReader in=new BufferedReader(
          new InputStreamReader(
            conn.getInputStream())); 
        StringBuffer sb = new StringBuffer(""); 
        String line=""; 

        while((line = in.readLine()) != null) { 

         sb.append(line); 
         break; 
        } 

        in.close(); 
        return sb.toString(); 

       } 
       else { 
        return new String("false : "+responseCode); 
       } 


      } catch (Exception e) { 
       return new String("Exception: " + e.getMessage()); 
      } 


     } 


     @Override 
     protected void onPostExecute(String result) { 
      String s = result.trim(); 
      //Toast.makeText(getApplicationContext(), "restult is"+s, Toast.LENGTH_LONG).show(); 
      String stringSucess = ""; 

      int height = 50; 
      int width = 40; 
      BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.drawable.basgray); 
      Bitmap b=bitmapdraw.getBitmap(); 
      Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false); 
      LatLng sydney = new LatLng(-34, 151); 
      mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney").icon(BitmapDescriptorFactory.fromBitmap(smallMarker))); 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 

      //setListAdapter(adapter); 
     } 

    } 

는 여기에 내가 로그인하면 내 BallonAdapter

public class BalloonAdapter implements InfoWindowAdapter { 
    LayoutInflater inflater = null; 
    private TextView textViewTitle; 

    public BalloonAdapter(LayoutInflater inflater) { 
     this.inflater = inflater; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     View v = inflater.inflate(R.layout.balloon, null); 
     if (marker != null) { 
      textViewTitle = (TextView) v.findViewById(R.id.textViewTitle); 
      textViewTitle.setText(marker.getTitle()); 
     } 
     return (v); 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return (null); 
    } 
} 

의 코드이며, 응용 프로그램이 그만이 조각 온다. 시나리오에서 로그를 어디서 검색 할 수 있습니까? 아니면 별도로 기록해야합니까? 왜냐하면 안드로이드 스튜디오에 로그인 한 것도 보지 못하기 때문입니다. 문제는이 줄에 있습니다 mMap.setInfoWindowAdapter (새 BalloonAdapter (getLayoutInflater (savedInstanceState))); 공개 ViewCreateView 함수에서.

답변

0

다른 도움을 받으려면이 방금 mMap.setInfoWindowAdapter (새로운 BalloonAdapter (getLayoutInflater (null)))를 추가 한 솔루션을 찾았습니다. 돌아 가기보기; } 의미 나는 null이라는 단어와 그 단어로 대체됩니다. IT는 이제 제대로 작동합니다.