【发布时间】:2020-03-17 21:54:56
【问题描述】:
一切正常,应用程序出现。但是当我点击任何切换按钮时,应用程序就会崩溃。
我试过了,但我找不到问题。 实际上我没有足够的知识,我是这个领域的新手。所以请帮助我。
这是视图 activity.java
package com.wallpaper.wallperx;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.WallpaperManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
public class ViewActivity<bgDrawable> extends AppCompatActivity implements View.OnClickListener {
ImageView imageView;
FloatingActionMenu floatingActionMenu;
FloatingActionButton floatingActionButton, btn_set, btn_share, btn_download;
private static final int PERMISSION_REQUEST_CODE = 1000;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
else
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_REQUEST_CODE);
}
floatingActionMenu = findViewById(R.id.floatingActionMenu);
btn_set = findViewById(R.id.SetWallpaper);
btn_share = findViewById(R.id.ShareWallpaper);
btn_download = findViewById(R.id.DownloadWallpaper);
btn_set.setOnClickListener(this);
btn_share.setOnClickListener(this);
btn_download.setOnClickListener(this);
imageView = findViewById(R.id.fullImage);
Picasso.get().load(getIntent().getStringExtra("images")).into(imageView);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick (View v){
switch (v.getId()) {
case R.id.SetWallpaper:
SetWallpaper();
floatingActionButton.toggle(true);
break;
case R.id.ShareWallpaper:
ShareWallpaper();
floatingActionButton.toggle(true);
break;
case R.id.DownloadWallpaper:
saveImage();
floatingActionButton.toggle(true);
break;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void saveImage ()
{
if (ActivityCompat.checkSelfPermission(ViewActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ViewActivity.this, "You Should Grant Permission", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT > -Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_REQUEST_CODE);
}
} else {
String fileName = UUID.randomUUID().toString() + ".jpg";
Picasso.get().load(getIntent().getStringExtra("images")).into(new SaveImageHelper(getBaseContext(),
getApplicationContext(), getContentResolver(),
fileName,
"Image Description"));
}
}
@SuppressLint("SetWorldReadable")
private void ShareWallpaper () {
Bitmap bitmap = getBitmapFromView(imageView);
try {
File file = new File(this.getExternalCacheDir(), "black.png");
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
file.setReadable(true, false);
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(ViewActivity.this, BuildConfig.APPLICATION_ID + "provider", file));
intent.setType("image/*");
startActivity(Intent.createChooser(intent, "Share this image Via"));
} catch (Exception e) {
e.printStackTrace();
}
}
private Bitmap getBitmapFromView (View view){
Bitmap returnBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnBitmap);
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
view.draw(canvas);
return returnBitmap;
}
private void SetWallpaper () {
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());
try {
manager.setBitmap(bitmap);
Toast.makeText(this, "your Wallpaper set successfully!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(this, "Ooh no... its an Error!", Toast.LENGTH_SHORT).show();
}
}
}
还有这个日志猫
2020-03-18 03:16:50.407 31609-31609/? E/lpaper.wallper:runtime_flags 中设置的未知位:0x8000 2020-03-18 03:17:04.862 31609-31609/com.wallpaper.wallperx E/AndroidRuntime:致命例外:主要 进程:com.wallpaper.wallperx,PID:31609 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.github.clans.fab.FloatingActionButton.toggle(boolean)” 在 com.wallpaper.wallperx.ViewActivity.onClick(ViewActivity.java:97) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
【问题讨论】:
标签: android firebase android-fragments