listview和远程数据库中的java.lang.NullPointerException
我正在从一个远程数据库读取数据,然后写入一个包含imageview和文本的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
我试图解决它,但我做不到 在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();
}
}
}