【发布时间】:2017-06-28 17:47:47
【问题描述】:
b = BitmapFactory.decodeResource(this.getApplicationContext().getResources(),R.drawable.elon);
我正在尝试创建一个照片效果应用程序,当我使用它创建位图时,它会返回一个空指针异常。
我所做的创建了一个简单的活动,它在底部有回收器视图(水平),在回收器视图上方有一个图像视图。
recycler 视图只有每个必须更改的效果的按钮,添加了一个按钮。当从回收器视图中单击一个按钮时,主类中的一个方法被调用并且必须运行,我的 MainActivity.java 是:
公共类 MainActivity 扩展 AppCompatActivity {
static {
System.loadLibrary("NativeImageProcessor");
}
Toolbar tl;
ImageView mainImage;
RecyclerView rec;
ArrayList<String> list = new ArrayList<String>();
com.zomato.photofilters.imageprocessors.Filter myFilter;
Drawable b;
Bitmap input;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tl = (Toolbar)findViewById(R.id.toolbar);
tl.setTitle("Image Effects");
setSupportActionBar(tl);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels;
int width = dm.widthPixels;
mainImage = (ImageView)findViewById(R.id.mainImage);
mainImage.setMinimumHeight((int) (0.6 * height));
rec= (RecyclerView)findViewById(R.id.rec);
rec.setLayoutManager(new
LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
list.add("Keep original");
list.add("Star Lit Filter");
list.add("Blue Mess Filter");
list.add("Awe Stuck Vibe Filter");
list.add("Lime Stutter Filter");
list.add("Night Whispher Filter");
HorizontalAdapter ha=new HorizontalAdapter(list);
rec.setAdapter(ha);
}
public void imageOutput(int filterNum){
try{
input = BitmapFactory.decodeResource(getApplicationContext().getResources(),R.mipmap.ic_launcher_round);
}catch (Exception e){
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_SHORT).show();
}
switch (filterNum){
case 0:
mainImage.setImageBitmap(input);
break;
case 1:
myFilter = SampleFilters.getStarLitFilter();
mainImage.setImageBitmap(myFilter.processFilter(input));
break;
case 2:
myFilter = SampleFilters.getBlueMessFilter();
mainImage.setImageBitmap(myFilter.processFilter(input));
break;
case 3:
myFilter = SampleFilters.getAweStruckVibeFilter();
mainImage.setImageBitmap(myFilter.processFilter(input));
break;
case 4:
myFilter = SampleFilters.getLimeStutterFilter();
mainImage.setImageBitmap(myFilter.processFilter(input));
break;
case 5:
myFilter = SampleFilters.getNightWhisperFilter();
mainImage.setImageBitmap(myFilter.processFilter(input));
break;
}
}
}
这是我的 HorizontalAdapter.java 类:
public class HorizontalAdapter extends
RecyclerView.Adapter<HorizontalAdapter.myViewHolder> {
ArrayList<String> list;
MainActivity ma = new MainActivity();
HorizontalAdapter(ArrayList list){
this.list = list;
}
@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
return new myViewHolder(v);
}
@Override
public void onBindViewHolder(myViewHolder holder, final int position) {
holder.filterButton.setText(list.get(position));
holder.filterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("exe","1");
ma.imageOutput(position);
Log.i("exe","0");
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class myViewHolder extends RecyclerView.ViewHolder{
Button filterButton;
public myViewHolder(View itemView) {
super(itemView);
filterButton = (Button)itemView.findViewById(R.id.filterButton);
}
}
}
这里的 ImageOutput 方法是从水平回收器适配器传递按钮的位置作为参数调用的。 我得到的错误是在 try catch 块中的位图中,将错误显示为空对象引用并崩溃,我在监视器中的错误程序是:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ag.testphotofilterwithbuttons, PID: 2528
java.lang.NullPointerException: Attempt to invoke virtual method
'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:107)
at com.example.ag.testphotofilterwithbuttons.MainActivity.imageOutput(MainActivity.java:69)
at com.example.ag.testphotofilterwithbuttons.HorizontalAdapter$1.onClick(HorizontalAdapter.java:38)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
【问题讨论】:
-
请编辑您的问题并提供来自您的异常的完整 Java 堆栈跟踪。
-
你完成了!你能检查我犯了什么错误吗??
-
请将代码发布到
HorizontalAdapter,特别是堆栈跟踪中显示的onClick()方法。您用于imageOutput()调用的MainActitvity未正确创建,就像您尝试自己创建MainActivity的实例一样。 -
嘿,普通软件!完成包括水平适配器!
标签: android bitmap android-drawable android-bitmap bitmapfactory