listview和远程数据库中的java.lang.NullPointerException

listview和远程数据库中的java.lang.NullPointerException,java,android,Java,Android,我正在从一个远程数据库读取数据,然后写入一个包含imageview和文本的ListView 我有java.lang.NullPointerException错误。 我试图解决它,但我做不到 在doInBackground方法的for循环中,数组字符串是ok的,我可以在logcat中写入结果,但在for循环之外我不能 谢谢 package com.example.alztrimakis; import java.util.ArrayList; import org.apache.http.Na

我正在从一个远程数据库读取数据,然后写入一个包含imageview和文本的ListView

我有java.lang.NullPointerException错误。
我试图解决它,但我做不到

在doInBackground方法的for循环中,数组字符串是ok的,我可以在logcat中写入结果,但在for循环之外我不能

谢谢

package com.example.alztrimakis;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

public class contact extends Activity {

ListView list;
LazyImageLoadAdapter adapter;

JSONParser jParser = new JSONParser();
private static final String TAG_nom = "nom";
private static final String TAG_prenom = "prenom";
private static final String TAG_relation = "relation";
private static final String TAG_SUCCESS = "success";
private static final String TAG_photo = "photo";
private static final String TAG_pers = "idpersonne";
 SharedPreferences pref;

 String [] tabphoto, tabnom, tabprenom, tabrelation, tabidpers;
private ProgressDialog pDialog;
String idp ;


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

    list=(ListView)findViewById(R.id.listViewcontact);

    loadReps verif = new loadReps();
    verif.execute();
    Log.d("load","ok");
    Log.d("tabphoto",tabphoto.toString());
    Log.d("tabnom",tabnom.toString());
    Log.d("tabprenom",tabprenom.toString());
    Log.d("tabrelation",tabrelation.toString());
    Log.d("tabidpers",tabidpers.toString());

    // Create custom adapter for listview
    adapter= new LazyImageLoadAdapter(this, tabphoto, tabnom, tabprenom, tabrelation);
    Log.d("adapter","ok");
    //Set adapter to listview
    list.setAdapter(adapter);

}
 public void onItemClick(int mPosition)
{
    String tempValues = tabphoto[mPosition];
    String idperss = tabidpers[mPosition];

    Toast.makeText(contact.this, 
            "Image URL : "+tempValues+" dest "+idperss, 
            Toast.LENGTH_LONG)
    .show();
}

// Image urls used in LazyImageLoadAdapter.java file

class loadReps extends  AsyncTask<String, String, String> {


     JSONObject tt;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(contact.this);
            pDialog.setMessage("Chargement...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            Log.d("onpreExec","ok");
        }
        @Override
        protected String doInBackground(String... args) {

            Log.d("back","ok");
            pref = getSharedPreferences("memtrimakis",0);
             idp = pref.getString("idpatient", "no");       
            if (idp != "no")
            {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("idpatient",idp));
            IWebServices webServices = new WebServices();
            try {
            String result = webServices.getResult("affcontacts.php",nameValuePairs);
            JSONObject json = new JSONObject(result);
            Log.d("rep:", json.toString());
                int success = json.getInt(TAG_SUCCESS);
                selectip ipaddresse =new selectip();
                if (success == 1) {
                    tabphoto = new String[json.length()];
                    tabnom = new String[json.length()];
                    tabprenom = new String[json.length()];
                    tabrelation = new String[json.length()];
                    tabidpers = new String[json.length()];
                for (int i=0; i<json.length();i++)
                     {
                    tt = (JSONObject) json.get(String.valueOf(i));
                    tabphoto[i] = ipaddresse.adresseip().toString()+"img/"+tt.getString(TAG_photo);
                    tabnom[i]= tt.getString(TAG_nom);
                    tabprenom[i]= tt.getString(TAG_prenom);;
                    tabrelation[i]= tt.getString(TAG_relation);
                    tabidpers[i]= tt.getString(TAG_pers);
                     }


                }
                }

            catch (Exception e) {
                 e.printStackTrace();
            }
            }
                return null;
            }
        @Override
            protected void onPostExecute(String file_url) {


                Log.d("post","ok");
                runOnUiThread(new Runnable() {
                    @Override

                    public void run() {
                        for (int j=0; j<tabphoto.length;j++)
{Log.d("tabphotob"+j,tabphoto[j]);}


                    }
                });
                if(pDialog != null)
                    pDialog.dismiss();  
                }

 }

}

异步任务是异步的。当
execute()
返回时,结果还不可用,当您尝试访问未初始化的
tabphoto
数组时,您的NPE就会出现


将与异步任务结果一起使用的代码移动到任务的
onPostExecute()

NPE,因为tabphoto、tabnom、tabprenom和TabRelational数组在分配给适配器之前未初始化。这是因为Asynctasks是异步的,因此在您尝试访问结果时可能仍在运行。请确保按照以下步骤在onPostExecute()中构造适配器:

package com.example.alztrimakis;


import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

public class contact extends Activity {

ListView list;
LazyImageLoadAdapter adapter;

JSONParser jParser = new JSONParser();
private static final String TAG_nom = "nom";
private static final String TAG_prenom = "prenom";
private static final String TAG_relation = "relation";
private static final String TAG_SUCCESS = "success";
private static final String TAG_photo = "photo";
private static final String TAG_pers = "idpersonne";
 SharedPreferences pref;

 String [] tabphoto, tabnom, tabprenom, tabrelation, tabidpers;
private ProgressDialog pDialog;
String idp ;


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

    list=(ListView)findViewById(R.id.listViewcontact);

    loadReps verif = new loadReps();
    verif.execute();
    Log.d("load","ok");
    Log.d("tabphoto",tabphoto.toString());
    Log.d("tabnom",tabnom.toString());
    Log.d("tabprenom",tabprenom.toString());
    Log.d("tabrelation",tabrelation.toString());
    Log.d("tabidpers",tabidpers.toString());



}
 public void onItemClick(int mPosition)
{
    String tempValues = tabphoto[mPosition];
    String idperss = tabidpers[mPosition];

    Toast.makeText(contact.this, 
            "Image URL : "+tempValues+" dest "+idperss, 
            Toast.LENGTH_LONG)
    .show();
}

// Image urls used in LazyImageLoadAdapter.java file

class loadReps extends  AsyncTask<String, String, String> {


     JSONObject tt;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(contact.this);
            pDialog.setMessage("Chargement...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            Log.d("onpreExec","ok");
        }
        @Override
        protected String doInBackground(String... args) {

            Log.d("back","ok");
            pref = getSharedPreferences("memtrimakis",0);
             idp = pref.getString("idpatient", "no");       
            if (idp != "no")
            {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("idpatient",idp));
            IWebServices webServices = new WebServices();
            try {
            String result = webServices.getResult("affcontacts.php",nameValuePairs);
            JSONObject json = new JSONObject(result);
            Log.d("rep:", json.toString());
                int success = json.getInt(TAG_SUCCESS);
                selectip ipaddresse =new selectip();
                if (success == 1) {
                    tabphoto = new String[json.length()];
                    tabnom = new String[json.length()];
                    tabprenom = new String[json.length()];
                    tabrelation = new String[json.length()];
                    tabidpers = new String[json.length()];
                for (int i=0; i<json.length();i++)
                     {
                    tt = (JSONObject) json.get(String.valueOf(i));
                    tabphoto[i] = ipaddresse.adresseip().toString()+"img/"+tt.getString(TAG_photo);
                    tabnom[i]= tt.getString(TAG_nom);
                    tabprenom[i]= tt.getString(TAG_prenom);;
                    tabrelation[i]= tt.getString(TAG_relation);
                    tabidpers[i]= tt.getString(TAG_pers);
                     }


                }
                }

            catch (Exception e) {
                 e.printStackTrace();
            }
            }
                return null;
            }
        @Override
            protected void onPostExecute(String file_url) {


                Log.d("post","ok");
                runOnUiThread(new Runnable() {
                    @Override

                    public void run() {
                        for (int j=0; j<tabphoto.length;j++)
{Log.d("tabphotob"+j,tabphoto[j]);}


                    }
                });
 // Create custom adapter for listview
        adapter= new LazyImageLoadAdapter(contact.this, tabphoto, tabnom, tabprenom, tabrelation);
        Log.d("adapter","ok");
        //Set adapter to listview
        list.setAdapter(adapter);
                    if(pDialog != null)
                        pDialog.dismiss(); 


                }

 }

}
package com.example.alztrimakis;
导入java.util.ArrayList;
导入org.apache.http.NameValuePair;
导入org.apache.http.message.BasicNameValuePair;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.ListView;
导入android.widget.Toast;
公共类联系人扩展活动{
列表视图列表;
LazyImageLoadAdapter;
JSONParser jParser=新的JSONParser();
私有静态最终字符串标记_nom=“nom”;
私有静态最终字符串标记_prenom=“prenom”;
私有静态最终字符串标记_relation=“relation”;
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串标记_photo=“photo”;
私有静态最终字符串标记_pers=“idpersonne”;
共享参考优先;
字符串[]tabphoto、tabnom、tabprenom、tabrelation、tabidpers;
私人对话;
字符串idp;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contact);
列表=(ListView)findViewById(R.id.listViewcontact);
loadReps verif=新的loadReps();
verif.execute();
日志d(“加载”、“正常”);
Log.d(“tabphoto”,tabphoto.toString());
Log.d(“tabnom”,tabnom.toString());
Log.d(“tabprenom”,tabprenom.toString());
Log.d(“tabrelation”,tabrelation.toString());
Log.d(“tabidpers”,tabidpers.toString());
}
公共空间链接(集成)
{
字符串tempValues=tabphoto[mPosition];
字符串idpers=tabidpers[mPosition];
Toast.makeText(contact.this,
“图像URL:”+tempValues+“dest”+idpers,
吐司长度(长)
.show();
}
//LazyImageLoadAdapter.java文件中使用的图像URL
类loadReps扩展异步任务{
JSONObject tt;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(contact.this);
pDialog.setMessage(“计费…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
Log.d(“onpreExec”、“ok”);
}
@凌驾
受保护的字符串doInBackground(字符串…args){
日志d(“返回”、“确定”);
pref=getSharedReferences(“memtrimakis”,0);
idp=pref.getString(“idpatient”、“no”);
如果(idp!=“否”)
{
ArrayList nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“idpatient”,idp));
IWebServices webServices=新的webServices();
试一试{
字符串结果=webServices.getResult(“affscontacts.php”,nameValuePairs);
JSONObject json=新的JSONObject(结果);
Log.d(“rep:,json.toString());
int success=json.getInt(TAG_success);
selectip IP地址=新建selectip();
如果(成功==1){
tabphoto=新字符串[json.length()];
tabnom=新字符串[json.length()];
tabprenom=新字符串[json.length()];
tabrelation=新字符串[json.length()];
tabidpers=新字符串[json.length()];

对于(int i=0;ii正在尝试移动代码,我如何替换onPostExecute()上的这个(活动)?在adapter=new lazymageloadadapter(this,tabphoto,tabnom,tabprenom,tabrelation)行中;看起来异步任务是一个非静态的内部类(它本身有问题,但现在不是重点)因此,您可以使用
ActivityName。此
用于
上下文
而不是
。我需要的是活动而不是上下文,因此我使用了此适配器=新LazyImageLoadAdapter(act、tabphoto、tabnom、tabprenom、tabrelation);act是我在oncreate thanksRight中得到的活动!我已经更新了我的答案,使用contact.this作为上下文。顺便说一句,你不应该用小写的“contact”命名java类(第一个字母)。它应该是用大写的“C”命名的
package com.example.alztrimakis;


import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

public class contact extends Activity {

ListView list;
LazyImageLoadAdapter adapter;

JSONParser jParser = new JSONParser();
private static final String TAG_nom = "nom";
private static final String TAG_prenom = "prenom";
private static final String TAG_relation = "relation";
private static final String TAG_SUCCESS = "success";
private static final String TAG_photo = "photo";
private static final String TAG_pers = "idpersonne";
 SharedPreferences pref;

 String [] tabphoto, tabnom, tabprenom, tabrelation, tabidpers;
private ProgressDialog pDialog;
String idp ;


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

    list=(ListView)findViewById(R.id.listViewcontact);

    loadReps verif = new loadReps();
    verif.execute();
    Log.d("load","ok");
    Log.d("tabphoto",tabphoto.toString());
    Log.d("tabnom",tabnom.toString());
    Log.d("tabprenom",tabprenom.toString());
    Log.d("tabrelation",tabrelation.toString());
    Log.d("tabidpers",tabidpers.toString());



}
 public void onItemClick(int mPosition)
{
    String tempValues = tabphoto[mPosition];
    String idperss = tabidpers[mPosition];

    Toast.makeText(contact.this, 
            "Image URL : "+tempValues+" dest "+idperss, 
            Toast.LENGTH_LONG)
    .show();
}

// Image urls used in LazyImageLoadAdapter.java file

class loadReps extends  AsyncTask<String, String, String> {


     JSONObject tt;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(contact.this);
            pDialog.setMessage("Chargement...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            Log.d("onpreExec","ok");
        }
        @Override
        protected String doInBackground(String... args) {

            Log.d("back","ok");
            pref = getSharedPreferences("memtrimakis",0);
             idp = pref.getString("idpatient", "no");       
            if (idp != "no")
            {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("idpatient",idp));
            IWebServices webServices = new WebServices();
            try {
            String result = webServices.getResult("affcontacts.php",nameValuePairs);
            JSONObject json = new JSONObject(result);
            Log.d("rep:", json.toString());
                int success = json.getInt(TAG_SUCCESS);
                selectip ipaddresse =new selectip();
                if (success == 1) {
                    tabphoto = new String[json.length()];
                    tabnom = new String[json.length()];
                    tabprenom = new String[json.length()];
                    tabrelation = new String[json.length()];
                    tabidpers = new String[json.length()];
                for (int i=0; i<json.length();i++)
                     {
                    tt = (JSONObject) json.get(String.valueOf(i));
                    tabphoto[i] = ipaddresse.adresseip().toString()+"img/"+tt.getString(TAG_photo);
                    tabnom[i]= tt.getString(TAG_nom);
                    tabprenom[i]= tt.getString(TAG_prenom);;
                    tabrelation[i]= tt.getString(TAG_relation);
                    tabidpers[i]= tt.getString(TAG_pers);
                     }


                }
                }

            catch (Exception e) {
                 e.printStackTrace();
            }
            }
                return null;
            }
        @Override
            protected void onPostExecute(String file_url) {


                Log.d("post","ok");
                runOnUiThread(new Runnable() {
                    @Override

                    public void run() {
                        for (int j=0; j<tabphoto.length;j++)
{Log.d("tabphotob"+j,tabphoto[j]);}


                    }
                });
 // Create custom adapter for listview
        adapter= new LazyImageLoadAdapter(contact.this, tabphoto, tabnom, tabprenom, tabrelation);
        Log.d("adapter","ok");
        //Set adapter to listview
        list.setAdapter(adapter);
                    if(pDialog != null)
                        pDialog.dismiss(); 


                }

 }

}