gpt4 book ai didi

java - 从 RecyclerAdapter 使用异步任务时出错

转载 作者:行者123 更新时间:2023-11-30 00:43:02 25 4
gpt4 key购买 nike

我正在尝试使用我的 RecyclerAdapter 中的异步任务,但出于某种原因,我收到此错误:“java.lang.NullPointerException:尝试调用虚拟方法‘android.view.View android.view.View。 findViewById(int)' 在空对象引用上。

这是我的代码:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
Context c;
ImageView img;
View view;



private String[] titles = {"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight"};

class ViewHolder extends RecyclerView.ViewHolder{



public TextView itemTitle;



public ViewHolder(View itemView) {
super(itemView);

itemTitle = (TextView)itemView.findViewById(R.id.item_title);


itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
int position = getAdapterPosition();

String urlString;
switch( position) {
case 0:
Intent i = new Intent(v.getContext(),DisplayPicture.class);
v.getContext().startActivity(i);
urlString = "http://image-cdn.neatoshop.com/styleimg/36217/none/black/default/301347-19.jpg?v=b";
break;
case 1:
urlString = c.getResources().getString(R.string.chuck_http);
break;
case 2:
urlString = c.getResources().getString(R.string.app_name);
break;
case 3:
urlString = c.getResources().getString(R.string.mrt_http);
break;
case 4:
urlString = c.getResources().getString(R.string.faceman_http);
break;
case 5:
urlString = c.getResources().getString(R.string.knight_http);
break;
default:
urlString = c.getResources().getString(R.string.chuck_http);
}
new DownloadImageTask().execute(urlString);



}
});
}
}

// Makes scrolling smooth
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.card_layout, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.itemTitle.setText(titles[i]);
}

@Override
public int getItemCount() {
return titles.length;
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
return downloadImage(urls[0]);
}
protected void onPostExecute(Bitmap bm) {

img = (ImageView) view.findViewById(R.id.imageView);
img.setImageBitmap(bm);
}
}

private Bitmap downloadImage(String urlStr) {
Bitmap bm = null;
InputStream in = null;
try {
in = openHttpConnection(urlStr);
bm = BitmapFactory.decodeStream(in);
in.close();
} catch (Exception ex) {
Log.d("DL Image", ex.getLocalizedMessage());
}
return bm;
}
private InputStream openHttpConnection(String urlString) throws Exception {
InputStream is = null;
int res = -1; // response
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if ( !(conn instanceof HttpURLConnection) ) {
throw new IllegalArgumentException("Not an HttpURLConnection");
}
try {
HttpURLConnection huc = (HttpURLConnection)conn;
huc.setAllowUserInteraction(false);
huc.setInstanceFollowRedirects(true);
huc.setRequestMethod("GET");
huc.connect();
res = huc.getResponseCode();
if ( res == HttpURLConnection.HTTP_OK ) {
is = huc.getInputStream();
}
} catch ( Exception ex ) {
Log.d("Networking", ex.getLocalizedMessage() );
throw ex;
}
return is;
}





}

card_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/card_view"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#81C784"
card_view:cardCornerRadius="12dp"
card_view:cardElevation="3dp"
card_view:contentPadding="4dp"
android:foreground="?selectableItemBackground"
android:clickable="true" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_title"
android:layout_alignParentTop="true"
android:textSize="30sp"
/>


</RelativeLayout>
</android.support.v7.widget.CardView>

最佳答案

行内:

img = (ImageView) view.findViewById(R.id.imageView);

您访问变量 View ,但在您的代码中您从未设置它。所以它是空的。

此外,AsyncTasks 很难正确处理,它可能会在您的 Activity 已被终止时完成。我推荐阅读 this answer given here .

关于java - 从 RecyclerAdapter 使用异步任务时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com