초보자 수준입니다. 안드로이드 앱에서 다른 원격 이미지와 텍스트로 listview를 채우고 있습니다. 어댑터를 사용하여 listview 및 AsynTask를 채워 이미지를로드합니다. 그러나 나는 두 가지 문제에 직면 해 있으며 며칠 이래 가장 많이 시도했지만 불행히도 성공할 수는 없습니다. 첫 번째 문제는 첫 번째 이미지와 텍스트가 listview의 첫 번째 행에 나타나고 두 번째 행에 두 번째 이미지와 텍스트가 채워지는 것보다 사라지고 사라지는 것과 마찬가지로 각 행에 이미지와 텍스트가 표시되고 사라지는 것입니다.FATAL listview에 이미지를 표시하는 동안 주 예외가 발생했습니다.
11-01 20:03:56.449: ERROR/AndroidRuntime(29665): FATAL EXCEPTION: main
11-01 20:03:56.449: ERROR/AndroidRuntime(29665): java.lang.NullPointerException
이 내 메인 클래스입니다 : 내가 startParsing 메소드를 호출하고 기본 클래스에서
public class ParseImagesActivity extends ListActivity {
String myURL;
String xml;
Document doc;
NodeList nodes;
//int i=5;
int j=0;
int equal;
int h;
String[] length = {"1","2","3","4","5","6","7","8","9",null};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
xml = XmlParser.getXML("http://url.com");
doc = XmlParser.XMLfromString(xml);
nodes = doc.getElementsByTagName("item");
Element g = (Element)nodes.item(j);
startParsing(XmlParser.getValue(g,"thumb"));
}
가 그것에게 URL을 전달하는 두 번째 문제는 마지막 행이 응용 프로그램의 충돌보다 나타나고 예외 아래에주는 실행 중지했을 때이다 ..1 XmlParser 클래스에서 URL을 반환하는 함수 XmlParser.getValue (g, "thumb")에 의해 첫 번째 이미지에 액세스합니다. 방법을 startParsing 것은 : 다른 이미지에 액세스하려면 ... 등을 여기에
private void startParsing(String url) {
new backgroundLoadListView().execute(url);
}
public class backgroundLoadListView extends
AsyncTask<String, Void, String> {
@Override
protected void onPostExecute(String unused) {
// TODO Auto-generated method stub
if(j<nodes.getLength()){
setListAdapter(new MyCustomAdapter(ParseImagesActivity.this, R.layout.row, length));
Log.e("post Execute","post execute="+j);
equal=j;
j++;
Element h = (Element)nodes.item(j);
startParsing(XmlParser.getValue(h,"thumb"));
}
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
//Log.e("do in back","do in back="+j);
String url = params[0];
preLoadSrcBitmap(url);
return null;
}
}
은 내가 MyCustomerAdapter 생성자를 호출하고 있고 postExecute 방법에 내가 url2,3,4을 통과 startParsing 메소드를 호출하고 있습니다. MyCustomAdapter 클래스와 preloadSrcBitmap 방법은 다음과 같습니다 문제점 나를 돕는 사람들에
public class MyCustomAdapter extends ArrayAdapter<String> {
Bitmap bm;
public MyCustomAdapter(Context context, int textViewResourceId,
String[] objects) {
//
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
bm = srcBitmap;
Log.e("my customer adapter","my adapter"+j);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//return super.getView(position, convertView, parent);
View row = convertView;
if(row==null){
LayoutInflater inflater=getLayoutInflater();
row=inflater.inflate(R.layout.row, parent, false);
}
Log.e("getview",j+"calls");
TextView label=(TextView)row.findViewById(R.id.weekofday);
ImageView icon=(ImageView)row.findViewById(R.id.icon);
if(j<nodes.getLength())
{
if(equal==position)
{
Log.e("text view calls",""+equal);
Element f = (Element)nodes.item(equal);
label.setText(XmlParser.getValue(f, "title"));
icon.setImageBitmap(bm);
}
}
return row;
}
}
Bitmap srcBitmap;
private void preLoadSrcBitmap(String url){
//Log.e("preloadsrcbitmap","preloadsrcbitmap="+j);
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
srcBitmap = LoadImage(url, bmOptions);
}
/** Called when the activity is first created. */
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String selection = l.getItemAtPosition(position).toString();
Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
}
private Bitmap LoadImage(String URL, BitmapFactory.Options options)
{
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in, null, options);
in.close();
} catch (IOException e1) {
}
return bitmap;
}
private InputStream OpenHttpConnection(String strURL) throws IOException{
InputStream inputStream = null;
URL url = new URL(strURL);
URLConnection conn = url.openConnection();
try{
HttpURLConnection httpConn = (HttpURLConnection)conn;
httpConn.setRequestMethod("GET");
httpConn.connect();
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = httpConn.getInputStream();
}
}
catch (Exception ex){
}
return inputStream;
}
그리고 정말 고마워. 나는 그들을 알아낼 수 없다. (나는 한동안 이런 짓을하지 않았기 때문에 개요 : P) : AsyncTask를 사용하여 UI를 (활동과 상호 작용)를 업데이트
이 스택 트레이스의 더 제공
감사합니다 - NPE가 일어난 경우 다음 줄이 당신을 말할 것이다는 –