2011-08-09 49 views
-1

我已經使用此鏈接完成天氣預報安卓天氣預報 - 錯誤

http://www.anddev.org/android_weather_forecast_-_google_weather_api_-_full_source-t361.html

我得到了以下錯誤:

08-09 10:57:45.737: ERROR/AndroidRuntime(539): FATAL EXCEPTION: main 
08-09 10:57:45.737: ERROR/AndroidRuntime(539): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.anddev.android.weatherforecast/org.anddev.android.weatherforecast.WeatherForecast}: android.view.InflateException: Binary XML file line #55: Error inflating class org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.os.Looper.loop(Looper.java:123) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at dalvik.system.NativeStart.main(Native Method) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539): Caused by: android.view.InflateException: Binary XML file line #55: Error inflating class org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.createView(LayoutInflater.java:508) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.Activity.setContentView(Activity.java:1657) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at org.anddev.android.weatherforecast.WeatherForecast.onCreate(WeatherForecast.java:36) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  ... 11 more 
08-09 10:57:45.737: ERROR/AndroidRuntime(539): Caused by: java.lang.NoSuchMethodException: SingleWeatherInfoView(Context,AttributeSet) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at java.lang.Class.getMatchingConstructor(Class.java:643) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at java.lang.Class.getConstructor(Class.java:472) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  at android.view.LayoutInflater.createView(LayoutInflater.java:480) 
08-09 10:57:45.737: ERROR/AndroidRuntime(539):  ... 21 more 

這是我的XML文件main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/weather_background" 
    > 
    <TableLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0" 
     > 
     <TableRow 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content"> 
         <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Usage like: 'City, Country'" 
         android:gravity="left" 
         /> 
       <CheckBox android:id="@+id/chk_usecelsius" 
         android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:text="Use °C (not °F)" 
           android:gravity="right" 
       /> 
     </TableRow> 
    </TableLayout> 
    <TableLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0" 
     > 
     <TableRow 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content"> 

         <EditText android:id="@+id/edit_input" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Schriesheim, Germany" 
         android:singleLine="true" 
         /> 
       <Button android:id="@+id/cmd_submit" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="OK" 
       /> 
     </TableRow> 
    </TableLayout> 

    <org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
     android:id="@+id/weather_today" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:paddingTop="15px" 
     /> 
    <TableLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0,1,2,3" 
     android:paddingTop="15px" 
     > 
       <TableRow 
           android:layout_width="fill_parent" 
           android:layout_height="wrap_content"> 
         <org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
           android:id="@+id/weather_1" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:gravity="center_horizontal" 
           android:orientation="vertical" 
           /> 
         <org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
           android:id="@+id/weather_2" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:gravity="center_horizontal" 
           android:orientation="vertical" 
           /> 
         <org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
           android:id="@+id/weather_3" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:gravity="center_horizontal" 
           android:orientation="vertical" 
           /> 
         <org.anddev.android.weatherforecast.views.SingleWeatherInfoView 
           android:id="@+id/weather_4" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:gravity="center_horizontal" 
           android:orientation="vertical" 
           /> 
         </TableRow> 
    </TableLayout> 

,這是我的類文件

public class SingleWeatherInfoView extends LinearLayout { 


    private ImageView myWeatherImageView = null; 
    private TextView myTempTextView = null; 

    public SingleWeatherInfoView(Context context) { 
     super(context); 
    } 

    public SingleWeatherInfoView(Context context, AttributeSet attrs, 
      Map inflateParams) { 


     super(context, attrs); 
     /* Setup the ImageView that will show weather-icon. */ 
     this.myWeatherImageView = new ImageView(context); 
     this.myWeatherImageView.setImageDrawable(getResources().getDrawable(
       R.drawable.dunno)); 

     /* Setup the textView that will show the temperature. */ 
     this.myTempTextView = new TextView(context); 
     this.myTempTextView.setText("? °C"); 
     this.myTempTextView.setTextSize(16); 
     this.myTempTextView.setTypeface(Typeface 
       .create("Tahoma", Typeface.BOLD)); 

     /* Add child views to this object. */ 
     this.addView(this.myWeatherImageView, new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     this.addView(this.myTempTextView, new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 


    public void reset() { 
     this.myWeatherImageView.setImageDrawable(getResources().getDrawable(
       R.drawable.dunno)); 
     this.myTempTextView.setText("? °C"); 
    } 

    /** Sets the Child-ImageView of this to the URL passed. */ 
    public void setRemoteImage(URL aURL) { 
     try { 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      Bitmap bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
      this.myWeatherImageView.setImageBitmap(bm); 
     } catch (IOException e) { 
      /* Reset to 'Dunno' on any error. */ 
      this.myWeatherImageView.setImageDrawable(getResources() 
        .getDrawable(R.drawable.dunno)); 
     } 
    } 

    public void setTempCelcius(int aTemp) { 
     this.myTempTextView.setText("" + aTemp + " °C"); 
    } 

    public void setTempFahrenheit(int aTemp) { 
     this.myTempTextView.setText("" + aTemp + " °F"); 
    } 

    public void setTempFahrenheitMinMax(int aMinTemp, int aMaxTemp) { 
     this.myTempTextView.setText("" + aMinTemp + "/" + aMaxTemp + " °F"); 
    } 

    public void setTempCelciusMinMax(int aMinTemp, int aMaxTemp) { 
     this.myTempTextView.setText("" + aMinTemp + "/" + aMaxTemp + " °C"); 
    } 

    public void setTempString(String aTempString) { 
     this.myTempTextView.setText(aTempString); 
    } 
} 

是什麼原因導致這些錯誤?

+0

你爲什麼要在任何地方起訴「這個」關鍵詞。你確定你可以添加意見,這個類.. – ngesh

+0

然後我們想怎麼做? – Piraba

回答

0
  1. 只需將安裝ImageView ...後的所有邏輯移動到新方法init(...)中,並從您移動邏輯的位置調用它。

  2. 創建 public SingleWeatherInfoView(上下文上下文,AttributeSet attrs){超級上下文,attrs); init(...); }

0

它看起來像你使用的是不正確地支持XML通脹SingleWeatherInfoView類。您應該嘗試從代碼而不是XML創建它的實例,並查看是否有效。

0

我有同樣的問題,我是做了錯誤是把不正確的地址的包SingleWeatherInfoViewmain.xml中

com.beach.alpha.SingleWeatherInfoView 

確保您的項目有這條道路。