gpt4 book ai didi

android - 如何解决空服装 ListView 问题?

转载 作者:行者123 更新时间:2023-11-30 03:28:44 24 4
gpt4 key购买 nike

我写了一段代码来获取 YouTube 中与特定用户相关的所有视频,如下所示:

import java.util.ArrayList;
import java.util.Collection;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;


import com.example.tstnetconnwithjson.tables.custome;
import com.example.tstnetconnwithjson.tables.videos;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {



Button search; ;
TextView name ;
ListView listview ;
ArrayList<videos > videolist;
ArrayAdapter< videos > adapter ;
AlertDialog.Builder alert ;
ProgressDialog progressdialog ;
EditText name;

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

videolist = new ArrayList<videos>();
adapter = new ArrayAdapter<videos>(this, android.R.layout.simple_list_item_1 , android.R.id.text1,videolist);
name=(EditText) findViewById(R.id.editText1);
alert = new Builder(this);
alert.setTitle("Warnning" ) ;
alert.setMessage("You want to connect to the internet ..? " );


alert.setNegativeButton("No ", null);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) {
String username=name.getText().toString();
new connection().execute("https://gdata.youtube.com/feeds/api/videos?author="+username+"&v=2&alt=jsonc");

}
});



progressdialog = new ProgressDialog(this);

progressdialog.setMessage("Wait Loading .... ");
progressdialog.setCancelable(false);





search = (Button) findViewById(R.id.button1);
name = (TextView) findViewById(R.id.textView1);

listview = (ListView) findViewById(R.id.listView1);

listview.setAdapter(adapter);


search.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
alert.show();


}
});
}

class connection extends AsyncTask<String, Integer, String>{


@Override
protected void onPreExecute() {
progressdialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... arg0) {

String s = GetUrlBody(arg0[0]);




return s;
}

@Override
protected void onPostExecute(String result) {

try{

JSONObject jo =(JSONObject) new JSONTokener(result).nextValue();

JSONObject feed = jo.optJSONObject("data");
JSONArray entry = feed.optJSONArray("items");


for(int i = 0 ; i<entry.length() ; i++){

String title = entry.getJSONObject(i).getString("title");

String thumbURL = entry.getJSONObject(i).getJSONObject("thumbnail").getString("sqDefault");
Log.d("after get image", "ok")
String url;
try {
url = entry.getJSONObject(i).getJSONObject("player").getString("mobile");
} catch (JSONException ignore) {
url = entry.getJSONObject(i).getJSONObject("player").getString("default");
}

String description = entry.getJSONObject(i).getString("description");
Log.d("after get description", "ok");
videos videoobject=new videos();
videoobject.setDecscrption(description);
videoobject.setImageurl(thumbURL);
videoobject.setVediourl(url);
videoobject.setVideoname(title);

videolist.add(videoobject);
}
listview.setAdapter(new custome(MainActivity.this,videolist));
Log.d("AFTER set custome ", "before notify changes");


adapter.notifyDataSetChanged();

}catch(Exception exception) {
Log.d("exception ", "nock nock nock....");
Log.e("json ", exception.getMessage());
}

progressdialog.dismiss();
super.onPostExecute(result);

}




String GetUrlBody (String Url ){

HttpClient client = new DefaultHttpClient();

HttpGet gethttp = new HttpGet(Url);

try{
HttpResponse response = client.execute(gethttp);

if(response.getStatusLine().getStatusCode() == 200){

String save =
EntityUtils.toString(response.getEntity(), HTTP.UTF_8);

return save;

}else {
return "Not Found";
}

}catch(Exception exception){}




return null;
}



}


}

客户类从基础适配器扩展,以便将 ListView 的 ImageView 设置为视频图像,将 TextView 设置为视频标题。在日志 cat 消息中,结果存在,但我的 ListView 返回空。谁能告诉我为什么?这是服装 ListView 的代码:

public class custome extends BaseAdapter {



ArrayList<videos> data=new ArrayList<videos>();
android.content.Context context1;
android.widget.TextView name;
ImageView picture;

public custome(Context context,ArrayList<videos>arrayList) {
// TODO Auto-generated constructor stub
context=context;
arrayList=data;
}




public int getCount() {
// TODO Auto-generated method stub
return data.size();
}

public Object getItem(int arg0) {
// TODO Auto-generated method stub
return data.get(arg0);
}

public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

public View getView(int arg0, View arg1, ViewGroup arg2) {
View view=arg1;

if(view==null)
{
LayoutInflater layoutInflater=(LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view=layoutInflater.inflate(R.layout.listvideo,null);
}
name=(TextView) view.findViewById(R.id.textView1);
picture=(ImageView) view.findViewById(R.id.imageView1);

videos video = data.get(arg0);
name.setText(video.getVideoname());


URL url = null;
try {
url = new URL(video.getImageurl());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
picture.setImageBitmap(bitmap);





return view;
}

}

最佳答案

问题出在您的自定义构造函数的分配代码中:

使用这个构造函数:

public custome(Context context,ArrayList<videos> arrayList) { 
context=context;
//arrayList=data;<<< WRONG
data=arrayList;//<<<<<<< Correct way of assigning
}

关于android - 如何解决空服装 ListView 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810473/

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