2015-06-29 35 views
1

我非常新到Android工作室和视频教程还在学习。我发现毕加索,并希望将它用于我的项目,但是当我尝试应用/在列表视图中练习时,我似乎并没有得到它,即时通讯有一个错误,说Target must not be null。我尝试了解决方案,但仍然没有。对不起,我的英语不好。这里是我的代码,请帮助我。毕加索Android的目标不能为空

class MyAdapter extends ArrayAdapter<String> { 

Context context; 

public MyAdapter(Context context, int row_layout, String[] values) { 
    super(context, R.layout.row_layout2, values); 
} 



@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageHolder holder = null; 
    holder = new ImageHolder(); 

    LayoutInflater theInflater = LayoutInflater.from(getContext()); 
    View theView = theInflater.inflate(R.layout.row_layout2, parent, false); 
    String tvShow = getItem(position); 

    TextView theTextView = (TextView) theView.findViewById(R.id.textView1); 

    theTextView.setText(tvShow); 

    holder.imageIcon = (ImageView) convertView.findViewById(R.id.imageView1); 

    convertView.setTag(holder); 

    Picasso.with(this.context).load(getItem(R.drawable.sample4)).into(holder.imageIcon); //ERROR HERE 

    return theView; 
} 

static class ImageHolder 
{ 
    ImageView imageIcon; 
} 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 

static class ImageHolder { 
    ImageView imageIcon; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String[] favoriteShows = { 
      "Hannibal", "Sherlock", "Supernatural" 
    }; 

    //ImageHolder holder = new ImageHolder(); 

    ListAdapter theAdapter = new MyAdapter(this, R.layout.row_layout, favoriteShows); 

    ListView theListView = (ListView) findViewById(R.id.theListView); 

    theListView.setAdapter(theAdapter); 

    theListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      String tvShowPicked= "You selected " + 
        String.valueOf(adapterView.getItemAtPosition(position)); 

      Toast.makeText(MainActivity.this, tvShowPicked, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

伊夫ALSE试图把MainActivity毕加索线,看看是否有什么变化。

holder.imageIcon = (ImageView) findViewById(R.id.imageView1); 

    ImageView imageView = (ImageView) findViewById(R.id.imageView1); 

    Picasso.with(this) 
      .load(R.drawable.sample4) 
      .into(holder.imageIcon); 

我row_layout2.xml

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="1dp" 
    android:layout_marginTop="1dp" 
    android:layout_marginRight="1dp" 
    android:src="@drawable/sample3" 
    android:id="@+id/imageView1" 
    android:adjustViewBounds="true" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView1" 
    android:textSize="10sp" 
    android:textStyle="bold" 
    android:textColor="#000000" 
    android:gravity="left" 
    android:paddingLeft="15dp"> 
</TextView> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView2" 
    android:textSize="10sp" 
    android:textStyle="bold" 
    android:textColor="#000000" 
    android:gravity="left|bottom" 
    android:padding="15dp" 
    android:text="ADDRESS HERE"> 
</TextView> 

我activity_main.xml中

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/theListView"> 

    </ListView> 

错误日志:

06-29 21:06:13.990 1288-1288/com.erlawkward.albarol.listviewexample E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.erlawkward.albarol.listviewexample/com.erlawkward.albarol.listviewexample.MainActivity}: java.lang.IllegalArgumentException: Target must not be null. 

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 

at android.app.ActivityThread.access$600(ActivityThread.java:141) 

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 

at android.os.Handler.dispatchMessage(Handler.java:99) 

at android.os.Looper.loop(Looper.java:137) 

at android.app.ActivityThread.main(ActivityThread.java:5041) 

at java.lang.reflect.Method.invokeNative(Native Method) 

at java.lang.reflect.Method.invoke(Method.java:511) 

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IllegalArgumentException: Target must not be null. 

at com.squareup.picasso.RequestCreator.into(RequestCreator.java:618) 

at com.squareup.picasso.RequestCreator.into(RequestCreator.java:601) 

at com.erlawkward.albarol.listviewexample.MainActivity.onCreate(MainActivity.java:59) 

at android.app.Activity.performCreate(Activity.java:5104) 

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
             
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
             
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
             
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
             
at android.os.Handler.dispatchMessage(Handler.java:99) 
             
at android.os.Looper.loop(Looper.java:137) 
             
at android.app.ActivityThread.main(ActivityThread.java:5041) 
             
at java.lang.reflect.Method.invokeNative(Native Method) 
             
at java.lang.reflect.Method.invoke(Method.java:511) 
             
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
             
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
             
at dalvik.system.NativeStart.main(Native 

法)

+0

邮政布局文件 – omainegra

回答

1

在你的适配器

Picasso.with(getContext()).load(R.drawable.sample4).into(holder.imageIcon); 

编辑

而且你使用的是ViewHolder模式以错误的方式取代

Picasso.with(this.context).load(getItem(R.drawable.sample4)).into(holder.imageIcon); 

。使用它的全部意义在于每次调用getView时避免膨胀布局。我编辑的方法遵循

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ImageHolder holder; 

    if (convertView == null){ 
     LayoutInflater theInflater = LayoutInflater.from(getContext()); 
     convertView = theInflater.inflate(R.layout.row_layout2, parent, false); 

     holder = new ImageHolder(); 
     holder.textView = (TextView) convertView.findViewById(R.id.textView1); 
     holder.imageIcon = (ImageView) convertView.findViewById(R.id.imageView1); 

     convertView.setTag(holder); 
    } 
    else{ 
     holder = (ImageHolder) convertView.getTag(); 
    } 

    holder.textView.setText(getItem(position)); 

    //ERROR FIXED 
    Picasso.with(getContext()).load(R.drawable.sample4).into(holder.imageIcon); 

    return convertView; 
} 

的持有人

static class ImageHolder 
{ 
    ImageView imageIcon; 
    TextView textView; 
} 

而且在的onCreate活动

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String[] favoriteShows = { 
      "Hannibal", "Sherlock", "Supernatural" 
    }; 

    ListAdapter theAdapter = new MyAdapter(this, R.layout.row_layout2, favoriteShows); 

    ListView theListView = (ListView) findViewById(R.id.theListView); 
    theListView.setAdapter(theAdapter); 

    theListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      String tvShowPicked = "You selected " + 
        String.valueOf(adapterView.getItemAtPosition(position)); 

      Toast.makeText(MainActivity.this, tvShowPicked, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+0

仍然有同样的错误。我的holder.imageIcon为空,我不知道为什么。 – ErlAl

+0

@ErlAl您是否用我的'getView'方法替换了您的'getView'方法?同时检查这两个方案中的错误是否相同 – omainegra

+0

是的先生,我已将其替换并仍然有相同的错误。 – ErlAl

1

原因是您的context为空。

尝试初始化您的上下文。

public MyAdapter(Context context, int row_layout, String[] values) { 
    super(context, R.layout.row_layout2, values); 
    this.context=context; 
} 
+0

仍具有相同的错误的代码。 Picasso.with(this.context).load(的getItem(R.drawable.sample4))代入(holder.imageIcon)。 我.into(价值)仍然是空 – ErlAl

+0

@ omainegra的答案应该解决您的问题,如果没有,那么有可能是ID与你的错配layout.I的意思是说imageView1可能不row_layout2.xml文件存在。请双核实。 – Soham

+0

这里是我的ImageView ErlAl

0

为什么使用Picasso将drawable加载到ImageView中? 只需使用的ImageView的setImageResource()方法。

+0

我已经尝试使用它,并使用不同的图像尺寸,但到目前为止,我不喜欢输出。 我希望我放置的所有图像的大小与设备的大小相同。如果你能帮我或给我一个小费,请 – ErlAl