Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当您调用异步任务的方法时,应用程序将退出_Java_Android_Android Activity_Android Context - Fatal编程技术网

Java 当您调用异步任务的方法时,应用程序将退出

Java 当您调用异步任务的方法时,应用程序将退出,java,android,android-activity,android-context,Java,Android,Android Activity,Android Context,我有个问题。我正在尝试创建Activity cause asynchronous task,并在执行创建适配器的被调用方法adapterCreate()class Profile.class之后创建。必须在方法的第一个参数中传输上下文。这里,例如,如果我在线上调用类中的一个方法,如果transfer contex为“this”,则所有方法都可以正常工作。如果我从异步任务调用,应用程序将退出。我不知道该怎么办。我希望得到你的帮助。谢谢大家! Profile.class public class P

我有个问题。我正在尝试创建Activity cause asynchronous task,并在执行创建适配器的被调用方法adapterCreate()class Profile.class之后创建。必须在方法的第一个参数中传输上下文。这里,例如,如果我在线上调用类中的一个方法,如果transfer contex为“this”,则所有方法都可以正常工作。如果我从异步任务调用,应用程序将退出。我不知道该怎么办。我希望得到你的帮助。谢谢大家!

Profile.class

public class Profile extends AppCompatActivity {



    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_application);

        new ParseTask(this).execute();

    }



public void adapterCreate(Activity context){

    String[] str1 = {"mesages1", "messages2"};
    String[] str2 = {"photo1", "photo2"};
    String[] str3 = {"name1", "name2"};

    adapter = new LazyAdapter(context, str1, str2, str3);
    list.setAdapter(adapter);

}

}
public class ParseTask extends AsyncTask<Void, Void, String> {

    HttpURLConnection urlConnection = null;
    BufferedReader reader = null;
    String resultJson = "";

    Activity act;

    public ParseTask (Activity context){
        this.act = context;
    }

    @Override
    protected String doInBackground(Void... params) {
        try {
            URL url = new URL("/friends.json");

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();

            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            resultJson = buffer.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultJson;
    }

    @Override
    protected void onPostExecute(String strJson) {
        super.onPostExecute(strJson);

        new Profile().chatCreate();

    }
}
public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] messages;
    private String[] photo;
    private String[] name;
    private static LayoutInflater inflater=null;
    //public ImageLoader imageLoader;

    public LazyAdapter(Activity a, String[] messages_c, String[] photo_c, String[] name_c) {
        activity = a;
        messages=messages_c;
        photo = photo_c;
        name = name_c;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return name.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null) vi = inflater.inflate(R.layout.listview_row, null);

        TextView name_c = (TextView)vi.findViewById(R.id.name_c);
        TextView content_c = (TextView)vi.findViewById(R.id.content_c);
        ImageView image = (ImageView)vi.findViewById(R.id.image);
        name_chat.setText(name[position]);
        content_chat.setText(messages[position]);
        return vi;
    }
}
ParseTask.class

public class Profile extends AppCompatActivity {



    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_application);

        new ParseTask(this).execute();

    }



public void adapterCreate(Activity context){

    String[] str1 = {"mesages1", "messages2"};
    String[] str2 = {"photo1", "photo2"};
    String[] str3 = {"name1", "name2"};

    adapter = new LazyAdapter(context, str1, str2, str3);
    list.setAdapter(adapter);

}

}
public class ParseTask extends AsyncTask<Void, Void, String> {

    HttpURLConnection urlConnection = null;
    BufferedReader reader = null;
    String resultJson = "";

    Activity act;

    public ParseTask (Activity context){
        this.act = context;
    }

    @Override
    protected String doInBackground(Void... params) {
        try {
            URL url = new URL("/friends.json");

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();

            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            resultJson = buffer.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultJson;
    }

    @Override
    protected void onPostExecute(String strJson) {
        super.onPostExecute(strJson);

        new Profile().chatCreate();

    }
}
public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] messages;
    private String[] photo;
    private String[] name;
    private static LayoutInflater inflater=null;
    //public ImageLoader imageLoader;

    public LazyAdapter(Activity a, String[] messages_c, String[] photo_c, String[] name_c) {
        activity = a;
        messages=messages_c;
        photo = photo_c;
        name = name_c;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return name.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null) vi = inflater.inflate(R.layout.listview_row, null);

        TextView name_c = (TextView)vi.findViewById(R.id.name_c);
        TextView content_c = (TextView)vi.findViewById(R.id.content_c);
        ImageView image = (ImageView)vi.findViewById(R.id.image);
        name_chat.setText(name[position]);
        content_chat.setText(messages[position]);
        return vi;
    }
}
logcat日志

09-24 16:49:10.821 7969-7969/package E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
    at package.Profile.chatCreate(Profile.java:645)
    at package.ParseTask.onPostExecute(ParseTask.java:108)
    at package.ParseTask.onPostExecute(ParseTask.java:21)
    at android.os.AsyncTask.finish(AsyncTask.java:631)
    at android.os.AsyncTask.access$600(AsyncTask.java:177)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

当你在一个活动中说
this
时,活动的上下文会被发送,但异步任务不是这样(这里
this
指的是异步任务本身),因此你必须做的是
yourActivity。这个

你绝对不能这样做:

    new Profile().chatCreate();
Profile
是一个
活动
,它是一个Android组件。您不能使用
new
自己实例化Android组件。只有Android框架可以实例化Android组件,因为它们需要先设置
上下文
,然后才能使用


如果您想在
活动
上调用一个方法,那么您需要使用已经由Android框架创建的
活动
的实例。

post logcat logAdded,请参阅。chatCreate()方法在哪里?我做什么?您的
异步任务
概要文件
类创建,它在构造函数中传递对自身的引用。只需将
act
转换为
Profile
并调用
chatCreate()
,如下所示:
((Profile)act.chatCreate()