Android的AsynkTask投掷空指针 [英] Android AsynkTask Throwing null pointer
本文介绍了Android的AsynkTask投掷空指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
不完全知道我在做什么错在这里,但我想从使用AsynkTask的HTTPS URL下载图像,但我epicly失败不知何故?为什么我得到一个空指针异常?
我已经困的URL并显示它,所以我知道这是合法的,我甚至用Web浏览器打它。
公共类WelcomeFragment扩展片段{
SimpleCursorAdapter适配器;
静态最后的String [] FROM = {} StatusData.KEY_USER_NAME;
静态最终诠释[] TO = {} R.id.txtName;
私人ProgressDialog simpleWaitDialog;
私人ImageView的downloadedImg; @覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
} 公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
的WebView mWebView;
TextView的MNAME,memail,母亲,mtextView1;
ImageView的mpicture; 查看查看= inflater.inflate(R.layout.fragment_welcome,NULL); 串约= getResources()的getString(R.string.about_msg)。
MNAME =(TextView中)view.findViewById(R.id.txtName);
memail =(TextView中)view.findViewById(R.id.txtEmail);
mpicture =(ImageView的)view.findViewById(R.id.profilepicture);
妈妈=(TextView中)view.findViewById(R.id.txtOther);
mtextView1 =(TextView中)view.findViewById(R.id.textView1);
关于= about.replace(\\\\,);
约=< HTML和GT;<身体GT;
+&下,P对齐= \\证明\\>中
+约+< / P>中
+< /身体GT;< / HTML>中; //获取数据
光标C = getActivity()getContentResolver()查询(StatusProvider.CONTENT_URI_USER,NULL,NULL,NULL,NULL); 如果(c.moveToFirst())
{ mName.setText(c.getString(2));
memail.setText(c.getString(5)); //电子邮件
mtextView1.setText(c.getString(6)); // URL图片 mpicture.setTag(c.getString(6));
新ImageDownloader()执行(c.getString(6))。 mother.setText(c.getString(7)); //重要的另一半
Log.i(欢迎光临,NAME FOUND表);
}其他{
Log.i(欢迎光临,找不到名称表);
}
mWebView =((的WebView)view.findViewById(R.id.about)); mWebView.loadData(约,text / html的,UTF-8); 返回视图。
}
私有类ImageDownloader扩展的AsyncTask<弦乐,太虚,位图> { @覆盖
保护位图doInBackground(字符串参数...){
// TODO自动生成方法存根
返回downloadBitmap(参数[0]);
} @覆盖
在preExecute保护无效(){
Log.i(异步示例,在名为preExecute);
simpleWaitDialog = ProgressDialog.show(getActivity(),等待,下载图片); } @覆盖
保护无效onPostExecute(位图结果){
Log.i(异步示例,onPostExecute称为);
downloadedImg.setImageBitmap(结果);
simpleWaitDialog.dismiss();
} 私人位图downloadBitmap(字符串URL){
//用来初始化默认的HTTP客户端对象
最后DefaultHttpClient客户端=新DefaultHttpClient(); //形成HttoGet要求
最终HTTPGET调用getRequest =新HTTPGET(URL);
尝试{ HTT presponse响应= client.execute(调用getRequest); //检查成功200 OK
。最终诠释状态code = response.getStatusLine()的getStatus code(); 如果(状态code!= HttpStatus.SC_OK){
Log.w(ImageDownloader,错误+状态code +,同时检索从位图+网址);
返回null; } 最终HttpEntity实体= response.getEntity();
如果(实体!= NULL){
为InputStream的InputStream = NULL;
尝试{
//从流获取内容
的InputStream = entity.getContent(); //解码流数据回图像位图理解的android
最后的位图位图= BitmapFactory.de codeStream(InputStream的); 返回位图;
} {最后
如果(的InputStream!= NULL){
inputStream.close();
}
entity.consumeContent();
}
}
}赶上(例外五){
//你可以提供一个IOException异常更明确的错误信息
getRequest.abort();
; Log.e(ImageDownloader+ URL + e.toString()的东西,而从检索了位错)
} 返回null;
}
}}
logcat的:
05-23 13:32:00.116:E / AndroidRuntime(22911):致命异常:主要
05-23 13:32:00.116:E / AndroidRuntime(22911):显示java.lang.NullPointerException
05-23 13:32:00.116:E / AndroidRuntime(22911):在com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:111)
05-23 13:32:00.116:E / AndroidRuntime(22911):在com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:1)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask.finish(AsyncTask.java:631)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.Handler.dispatchMessage(Handler.java:99)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.os.Looper.loop(Looper.java:137)
05-23 13:32:00.116:E / AndroidRuntime(22911):在android.app.ActivityThread.main(ActivityThread.java:4950)
05-23 13:32:00.116:E / AndroidRuntime(22911):在java.lang.reflect.Method.invokeNative(本机方法)
05-23 13:32:00.116:E / AndroidRuntime(22911):在java.lang.reflect.Method.invoke(Method.java:511)
05-23 13:32:00.116:E / AndroidRuntime(22911):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1004)
05-23 13:32:00.116:E / AndroidRuntime(22911):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
05-23 13:32:00.116:E / AndroidRuntime(22911):在dalvik.system.NativeStart.main(本机方法)
解决方案
downloadedImg
未初始化
Not exactly sure what I'm doing wrong here but I'm trying to download an image from an https url using a AsynkTask but I'm epicly failing somehow?! Why am I getting a null pointer exception?
I've trapped the url and displayed it so I know it's legit, I even hit it with the web browser.
public class WelcomeFragment extends Fragment {
SimpleCursorAdapter adapter;
static final String[] FROM = { StatusData.KEY_USER_NAME };
static final int[] TO = { R.id.txtName };
private ProgressDialog simpleWaitDialog;
private ImageView downloadedImg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
WebView mWebView;
TextView mName, memail, mother, mtextView1;
ImageView mpicture;
View view = inflater.inflate(R.layout.fragment_welcome, null);
String about = getResources().getString(R.string.about_msg);
mName = (TextView) view.findViewById(R.id.txtName);
memail = (TextView) view.findViewById(R.id.txtEmail);
mpicture = (ImageView) view.findViewById(R.id.profilepicture);
mother = (TextView) view.findViewById(R.id.txtOther);
mtextView1 = (TextView) view.findViewById(R.id.textView1);
about = about.replace("\\", "");
about = "<html><body>"
+ "<p align=\"justify\">"
+ about + "</p> "
+ "</body></html>";
// Get the data
Cursor c = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_USER, null, null, null, null);
if(c.moveToFirst())
{
mName.setText(c.getString(2));
memail.setText(c.getString(5)); //email
mtextView1.setText(c.getString(6)); //picture url
mpicture.setTag(c.getString(6));
new ImageDownloader().execute(c.getString(6));
mother.setText(c.getString(7)); //significant_other
Log.i("WELCOME", "NAME FOUND IN TABLE" );
} else {
Log.i("WELCOME", "NAME NOT FOUND IN TABLE" );
}
mWebView = ((WebView) view.findViewById(R.id.about));
mWebView.loadData(about, "text/html", "utf-8");
return view;
}
private class ImageDownloader extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... param) {
// TODO Auto-generated method stub
return downloadBitmap(param[0]);
}
@Override
protected void onPreExecute() {
Log.i("Async-Example", "onPreExecute Called");
simpleWaitDialog = ProgressDialog.show(getActivity(),"Wait", "Downloading Image");
}
@Override
protected void onPostExecute(Bitmap result) {
Log.i("Async-Example", "onPostExecute Called");
downloadedImg.setImageBitmap(result);
simpleWaitDialog.dismiss();
}
private Bitmap downloadBitmap(String url) {
// initilize the default HTTP client object
final DefaultHttpClient client = new DefaultHttpClient();
//forming a HttoGet request
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
//check 200 OK for success
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
// getting contents from the stream
inputStream = entity.getContent();
// decoding stream data back into image Bitmap that android understands
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// You Could provide a more explicit error message for IOException
getRequest.abort();
Log.e("ImageDownloader", "Something went wrong while retrieving bitmap from " + url + e.toString());
}
return null;
}
}
}
logcat:
05-23 13:32:00.116: E/AndroidRuntime(22911): FATAL EXCEPTION: main
05-23 13:32:00.116: E/AndroidRuntime(22911): java.lang.NullPointerException
05-23 13:32:00.116: E/AndroidRuntime(22911): at com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:111)
05-23 13:32:00.116: E/AndroidRuntime(22911): at com.projectcaruso.naturalfamilyplaning.WelcomeFragment$ImageDownloader.onPostExecute(WelcomeFragment.java:1)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.os.AsyncTask.finish(AsyncTask.java:631)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.os.Handler.dispatchMessage(Handler.java:99)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.os.Looper.loop(Looper.java:137)
05-23 13:32:00.116: E/AndroidRuntime(22911): at android.app.ActivityThread.main(ActivityThread.java:4950)
05-23 13:32:00.116: E/AndroidRuntime(22911): at java.lang.reflect.Method.invokeNative(Native Method)
05-23 13:32:00.116: E/AndroidRuntime(22911): at java.lang.reflect.Method.invoke(Method.java:511)
05-23 13:32:00.116: E/AndroidRuntime(22911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
05-23 13:32:00.116: E/AndroidRuntime(22911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
05-23 13:32:00.116: E/AndroidRuntime(22911): at dalvik.system.NativeStart.main(Native Method)
解决方案
downloadedImg
is not initialized
这篇关于Android的AsynkTask投掷空指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文