Android Manifest中无法解析活动

时间:2017-08-13 03:02:43

标签: java android constructor

我的应用程序一直崩溃,我认为这是因为我没有默认构造函数。至少,这是Android Manifest文件中的含义。我尝试添加一个但是当我只添加一个空构造函数时,例如,“public LoaderImageView(){}”它将无法识别它并给我错误。我将复制java和android代码。

请帮助,谢谢。

爪哇:     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>

1 个答案:

答案 0 :(得分:0)

您应该为活动扩展Activity或AppCompatActivity或后代。您不能简单地扩展LinearLayout并将其视为活动。