2017-08-13 44 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

解释他如何处理一个示例,注释是给出一个想法,以便用户可以对其进行处理,回答是给出他/她缺少的以及如何解决错误的整个想法。 –