Android 在片段中的AsyncTask中加载JSON时出现问题

Android 在片段中的AsyncTask中加载JSON时出现问题,android,json,android-fragments,android-asynctask,Android,Json,Android Fragments,Android Asynctask,我有3个可旋转的空视图。第三个视图是“ViewAll”。第一个视图工作正常,但当我滑动到第二个视图时,它会显示此错误 我曾尝试在AsyncTask中显示用JSON加载的数据,但出现了以下NullPointerException错误 我不知道怎么解决它 11-12 10:00:23.046: E/InputEventReceiver(12007): Exception dispatching input event. 11-12 10:00:23.046: E/MessageQueue-JNI(1

我有3个可旋转的空视图。第三个视图是“ViewAll”。第一个视图工作正常,但当我滑动到第二个视图时,它会显示此错误

我曾尝试在AsyncTask中显示用JSON加载的数据,但出现了以下NullPointerException错误 我不知道怎么解决它

11-12 10:00:23.046: E/InputEventReceiver(12007): Exception dispatching input event.
11-12 10:00:23.046: E/MessageQueue-JNI(12007): Exception in MessageQueue callback: handleReceiveCallback
11-12 10:00:23.056: E/MessageQueue-JNI(12007): java.lang.NullPointerException
11-12 10:00:23.056: E/MessageQueue-JNI(12007):  at com.example.rumorz.ViewAll$PostTask.onPreExecute(ViewAll.java:52)
11-12 10:00:23.056: E/MessageQueue-JNI(12007):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
这是我的密码:

public class ViewAll extends Fragment {

    //URL to get JSON Array
    private static String url = ""; //URL to my site with JSON-code

    //JSON Node Names 
    private static final String TAG_USER = "user";
    private static final String TAG_message= "message";

    TextView tvuser ;
    TextView tvmessage ;

    JSONArray user = null;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    new PostTask().execute();
    View rootView = inflater.inflate(R.layout.viewall, container, false);

    return rootView; 
}


private class PostTask extends AsyncTask<String, String, JSONObject> {
       @Override
       protected void onPreExecute() {
          super.onPreExecute();

             tvuser = (TextView)getView().findViewById(R.id.tvUser);
         tvmessage = (TextView)getView().findViewById(R.id.tvmessage);
       }

       @Override
       protected JSONObject doInBackground(String... args) {
           JSONParser jParser = new JSONParser();

           // Getting JSON from URL
           JSONObject json = jParser.getJSONFromUrl(url);
           return json;
       }




       @Override
       protected void onPostExecute(JSONObject json) {
        try {
               user = json.getJSONArray(TAG_USER);
                JSONObject c = user.getJSONObject(0);

                // Storing  JSON item in a Variable
                 String users = c.getString(TAG_USER);
                 String message = c.getString(TAG_message);


                tvuser.setText(users);
                tvmessage.setText(message);

        } catch (JSONException e) {
                e.printStackTrace();
            }
       }
public类ViewAll扩展片段{
//获取JSON数组的URL
私有静态字符串url=“”;//使用JSON代码指向我的站点的url
//JSON节点名称
私有静态最终字符串标记_USER=“USER”;
私有静态最终字符串标记_message=“message”;
文本视图用户;
TextView-tvmessage;
JSONArray user=null;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
新建PostTask().execute();
视图根视图=充气机。充气(R.layout.viewall,container,false);
返回rootView;
}
私有类PostTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
tvuser=(TextView)getView().findViewById(R.id.tvuser);
tvmessage=(TextView)getView().findViewById(R.id.tvmessage);
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
//从URL获取JSON
JSONObject json=jParser.getJSONFromUrl(url);
返回json;
}
@凌驾
受保护的void onPostExecute(JSONObject json){
试一试{
user=json.getJSONArray(TAG_user);
JSONObject c=user.getJSONObject(0);
//在变量中存储JSON项
String users=c.getString(TAG_USER);
String message=c.getString(TAG_message);
tvuser.setText(用户);
tvmessage.setText(消息);
}捕获(JSONException e){
e、 printStackTrace();
}
}

}

onCreateView
中初始化它。使用膨胀视图对象初始化textview。或者使用
onActivityCreated
中的
getView
初始化textview

由于textview被声明为类成员,因此可以在
onPostEecute
中使用它将文本设置为相同

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.viewall, container, false);
    tvuser = (TextView)rootView.findViewById(R.id.tvUser);
    tvmessage = (TextView)rootview.findViewById(R.id.tvmessage);

    new PostTask().execute();
    return rootView; 
}
onPreExecute(),在执行任务后立即在UI线程上调用。 初始化

tvuser = (TextView)rootView.findViewById(R.id.tvUser);
    tvmessage = (TextView)rootview.findViewById(R.id.tvmessage);

在onCreateView中,您的错误出现在您的
onPreExecute
中。您应该测试
getView()
是否返回null。这可能是问题所在。