2017-08-13 47 views
-2

我的應用程序不斷崩潰,我認爲這是因爲我沒有默認的構造函數。至少,這是Android Manifest文件中提到的內容。我嘗試添加一個,但是當我添加一個空的構造函數時,例如「public LoaderImageView(){}」,它將不會識別它並給出錯誤。我將複製java和android代碼。活動無法在Android清單中解決

請幫忙,謝謝。

Java: package com.example.imageviewloader;

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Handler; 
import android.os.Message; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ProgressBar; 

import java.io.IOException; 
import java.net.MalformedURLException; 

/** 
* Created by Owner on 8/12/2017. 
*/ 

public class LoaderImageView extends LinearLayout { 

private static final int COMPLETE = 0; 
private static final int FAILED = 1; 


private Context mContext; 
private Drawable mDrawable; 
private ProgressBar mSpinner; 
private ImageView mImage; 


public LoaderImageView(final Context context, final AttributeSet attrSet) { 
    super(context, attrSet); 
    final String url = attrSet.getAttributeValue(null, "image"); 
    if(url != null){ 
     instantiate(context, url); 
    } else { 
     instantiate(context, null); 
    } 
} 

private void instantiate(final Context context, final String imageUrl) { 
    mContext = context; 

    mImage = new ImageView(mContext); 
    mImage.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT)); 

    mSpinner = new ProgressBar(mContext); 
    mSpinner.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT)); 

    mSpinner.setIndeterminate(true); 

    addView(mSpinner); 
    addView(mImage); 

    if(imageUrl != null){ 
     setImageDrawable(imageUrl); 
    } 
} 

public void setImageDrawable(final String imageUrl) { 
    mDrawable = null; 
    mSpinner.setVisibility(View.VISIBLE); 
    mImage.setVisibility(View.GONE); 
    new Thread(){ 
     public void run() { 
      try { 
       mDrawable = getDrawableFromUrl(imageUrl); 
       imageLoadedHandler.sendEmptyMessage(COMPLETE); 
      } catch (MalformedURLException e) { 
       imageLoadedHandler.sendEmptyMessage(FAILED); 
      } catch (IOException e) { 
       imageLoadedHandler.sendEmptyMessage(FAILED); 
      } 
     } 
    }.start(); 
} 

private final Handler imageLoadedHandler = new Handler (new 
Handler.Callback() { 
    @Override 
    public boolean handleMessage(Message msg) { 
     switch (msg.what) { 
      case COMPLETE: 
       mImage.setImageDrawable(mDrawable); 
       mImage.setVisibility(View.VISIBLE); 
       mSpinner.setVisibility(View.GONE); 
       break; 
      case FAILED: 
      default: 
       // Could change image here to a 'failed' image 
       // otherwise will just keep on spinning 
       break; 
     } 
     return true; 
    } 
}); 

private static Drawable getDrawableFromUrl(final String url) throws 
IOException, MalformedURLException { 
    return Drawable.createFromStream(((java.io.InputStream)new 
java.net.URL(url).getContent()), "name"); 
} 

} 

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.imageviewloader"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".LoaderImageView"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 
+0

在帖子中包含您的崩潰日誌 – UmarZaii

+0

您需要一個適用於您的應用程序的視圖,並且您的Launcher java文件未擴展任何視圖(AppCompatActivity),因此創建一個擴展AppCompatActivity的Activity並運行您的應用程序。 –

回答

0

您應該擴展活動或AppCompatActivity或子孫的活動。您不能簡單地擴展LinearLayout並將其假定爲活動。

+0

這應該是一個評論而不是答案。 –

+0

那麼應該怎麼回答? –

+0

解釋他如何處理一個示例,註釋是給出一個想法,以便用戶可以對其進行處理,回答是給出他/她缺少的以及如何解決錯誤的整個想法。 –