Android 将数据从异步任务传递到活动视图
有许多问题与我的问题有关,但没有一个真正解决了我的问题。我几乎都试过了 我试图在从网络源获取数据后更改布局中的值,但每次都会收到nullpointerexception 我犯了一个错误Android 将数据从异步任务传递到活动视图,android,android-layout,android-asynctask,android-activity,android-view,Android,Android Layout,Android Asynctask,Android Activity,Android View,有许多问题与我的问题有关,但没有一个真正解决了我的问题。我几乎都试过了 我试图在从网络源获取数据后更改布局中的值,但每次都会收到nullpointerexception 我犯了一个错误 03-25 18:05:43.071: E/AndroidRuntime(4832): FATAL EXCEPTION: main 03-25 18:05:43.071: E/AndroidRuntime(4832): java.lang.NullPointerException 03-25 18
03-25 18:05:43.071: E/AndroidRuntime(4832): FATAL EXCEPTION: main
03-25 18:05:43.071: E/AndroidRuntime(4832): java.lang.NullPointerException
03-25 18:05:43.071: E/AndroidRuntime(4832): at com.wishberg.app.CommunityPageActivity$SendRequest.onPostExecute(CommunityPageActivity.java:158)
03-25 18:05:43.071: E/AndroidRuntime(4832): at com.wishberg.app.CommunityPageActivity$SendRequest.onPostExecute(CommunityPageActivity.java:1)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.os.AsyncTask.finish(AsyncTask.java:631)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.os.Looper.loop(Looper.java:137)
03-25 18:05:43.071: E/AndroidRuntime(4832): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-25 18:05:43.071: E/AndroidRuntime(4832): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 18:05:43.071: E/AndroidRuntime(4832): at java.lang.reflect.Method.invoke(Method.java:525)
03-25 18:05:43.071: E/AndroidRuntime(4832): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-25 18:05:43.071: E/AndroidRuntime(4832): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-25 18:05:43.071: E/AndroidRuntime(4832): at dalvik.system.NativeStart.main(Native Method)
这是我的活动课
public class CommunityPageActivity extends Activity {
public String wishid = null;
private Context context = null;
public String TAG = "communitypage";
private String cachedName = "community";
private static final int URL_LOADER = 0;
private Menu optionsMenu;
private ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent i = getIntent();
wishid = i.getStringExtra("id");
context = getApplicationContext();
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
Common.setRefreshActionButtonState(true, optionsMenu);
progress = new ProgressDialog(this);
progress.setMessage("Loading...");
progress.setIndeterminate(true);
progress.show();
setContentView(R.layout.community);
}
private class SendRequest extends AsyncTask<String, Integer, String> {
// http://www.mysamplecode.com/2012/11/android-progress-bar-example.html
ViewHolder holder = null;
protected String doInBackground(String... requestURL) {
String data = "";
HttpURLConnection httpUrlConnection = null;
try {
data = Common.readStream(in);
} catch (MalformedURLException exception) {
Log.e(TAG, "MalformedURLException");
} catch (IOException exception) {
Log.e(TAG, "IOException");
} finally {
if (null != httpUrlConnection)
httpUrlConnection.disconnect();
}
return data;
}
protected void onPostExecute(String jsonString) {
progress.dismiss();
System.out.println(jsonString);
JSONArray jsonArray = Common.getArrayFromJsonString(jsonString, 0);
Inflater inflater;
// View v = inflater.inflate(R.layout.community);
holder.txtWishName = (TextView) CommunityPageActivity.this.findViewById(R.id.tv_communitywishname);
System.out.println(holder);
System.out.println(jsonArray);
}
/* private view holder class */
private class ViewHolder {
ImageView imageView;
TextView txtWishName;
ImageButton btn_touchwood;
ImageButton btn_addwish;
TextView tvGesture;
TextView tvNotes;
}
}
}
公共类CommunityPageActivity扩展活动{
公共字符串wishid=null;
私有上下文=null;
公共字符串TAG=“communitypage”;
私有字符串cachedName=“community”;
私有静态final int URL_LOADER=0;
私人菜单选项菜单;
私人进展对话进展;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
Intent i=getIntent();
wishid=i.getStringExtra(“id”);
context=getApplicationContext();
ActionBar ActionBar=getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
Common.setRefreshActionButtonState(true,选项菜单);
进度=新建进度对话框(此对话框);
progress.setMessage(“加载…”);
progress.setUndeterminate(true);
progress.show();
setContentView(R.layout.community);
}
私有类SendRequest扩展了异步任务{
// http://www.mysamplecode.com/2012/11/android-progress-bar-example.html
ViewHolder=null;
受保护的字符串doInBackground(字符串…请求URL){
字符串数据=”;
HttpURLConnection HttpURLConnection=null;
试一试{
数据=Common.readStream(in);
}捕获(畸形异常异常){
Log.e(标签“MalformedURLException”);
}捕获(IOException异常){
Log.e(标记“IOException”);
}最后{
if(null!=httpUrlConnection)
httpUrlConnection.disconnect();
}
返回数据;
}
受保护的void onPostExecute(字符串jsonString){
进步。解散();
System.out.println(jsonString);
JSONArray JSONArray=Common.getArrayFromJsonString(jsonString,0);
充气机;
//视图v=充气机。充气(右布局。社区);
holder.txtWishName=(TextView)CommunityPageActivity.this.findViewById(R.id.tv_communitywishname);
系统输出打印LN(支架);
System.out.println(jsonArray);
}
/*私有视图持有者类*/
私有类视窗持有者{
图像视图图像视图;
文本视图txtWishName;
图像按钮btn_touchwood;
图像按钮btn_addwish;
文本视图;
文本视图tvNotes;
}
}
}
删除此行
progress.dismiss();
您尚未初始化,也未在任何地方使用。。
根据评论
你的
删除此行
progress.dismiss();
您尚未初始化,也未在任何地方使用。。
根据评论
你的
删除此行
progress.dismiss();
您尚未初始化,也未在任何地方使用。。
根据评论
你的
删除此行
progress.dismiss();
您尚未初始化,也未在任何地方使用。。
根据评论
你的
首先,不要在
AsyncTask
中初始化小部件。不要在里面使用充气机。您应该在onCreate(..)
中初始化所有内容
然后,您可以在异步任务中执行昂贵的操作(HTTP连接等)。然后在onPostExecute
中,您应该更新UI小部件,这些小部件在活动中被初始化。至少AsyncTask
就是这样运作的
正如前面提到的,您的holder
变量没有初始化,这就是为什么您首先会得到异常
Upd:此外,在onPostExecute()
中解析JSON数据是一个坏主意,因为它可能会抵消使用AsyncTask的预期效果-此方法在UI线程上运行并可能冻结它。首先,不要在异步任务中初始化小部件。不要在里面使用充气机。您应该在onCreate(..)
中初始化所有内容
然后,您可以在异步任务中执行昂贵的操作(HTTP连接等)。然后在onPostExecute
中,您应该更新UI小部件,这些小部件在活动中被初始化。至少AsyncTask
就是这样运作的
正如前面提到的,您的holder
变量没有初始化,这就是为什么您首先会得到异常
Upd:此外,在onPostExecute()
中解析JSON数据是一个坏主意,因为它可能会抵消使用AsyncTask的预期效果-此方法在UI线程上运行并可能冻结它。首先,不要在异步任务中初始化小部件。不要在里面使用充气机。您应该在onCreate(..)
中初始化所有内容
然后,您可以在异步任务中执行昂贵的操作(HTTP连接等)。然后在onPostExecute
中,您应该更新UI小部件,这些小部件在活动中被初始化。至少AsyncTask
就是这样运作的
正如前面提到的,您的holder
变量没有初始化,这就是为什么您首先会得到异常
Upd:此外,在onPostExecute()
中解析JSON数据是个坏主意,因为它可能会